gpt4 book ai didi

python - 使用 python 中的二分搜索计算最低月付款

转载 作者:太空狗 更新时间:2023-10-29 20:38:54 25 4
gpt4 key购买 nike

我正在尝试使用以下方法计算每月支付的最低还款额:

balance = 999999
annualInterestRate = .18
monthlyInterestRate = annualInterestRate/12

balanceCOPY = balance

#Bisection search parameters

lo = balance/12
hi = (balance*(1+monthlyInterestRate**12))/12
epsilon = .01

guess = (lo + hi)/2

while True:
for month in range(1,13):
balance = balance - guess
balance = balance + (monthlyInterestRate*balance)

if balance > 0 and balance > epsilon:
lo = guess
balance = balanceCOPY
elif balance < 0 and balance < -epsilon:
hi = guess
balance = balanceCOPY
else:
print('Lowest payment: ',str(round(guess,2)))
break

guess = (lo + hi)/2

但是,我似乎陷入了某种无限循环,其中我的 guess 变量没有被更新。我怎样才能打破无限循环并更新我的 guess 变量?

问题出在我的数学上。我想说

hi = (balance*(1+monthlyInterestRate)**12)/12

谢谢大家的帮助!

最佳答案

首先,如果您正在做 MITx 练习并完成了之前的测试(只是为了在猜测中增加 10),那么您还需要迈出一小步才能获得它。只需要对 while 条件进行一些调整,然后检查年度结果。

关于二分搜索,我将尝试阐明这个概念。你总是有两个肢体,最小的和最大的。并且总是会从四肢中间开始猜测。

第一次猜测后,您需要根据年度结果调整四肢。如果在为饮料、女孩、节目书和其他东西支付了最低费用一年后,您还没有支付全部余额,那么您肯定需要提高最低费用。否则,例如,如果您在第 10 个月支付了总余额,那么明年您需要多喝点酒并结识新女孩!开个玩笑……你需要降低最小值。这是您在完成一年的硬付款后需要做的检查


在练习中,我们有:

  • balance and annualInterestRate = given(我们不需要关心)
  • 最小值(下限)= 余额/12
  • 最大(上限)=(余额 x(1 + 月利率)**12)/12.0

第一个猜测将是(最小值 + 最大值)/2 我这样调用 guessMinimum:

guessMinimum = (minimum + maximum)/2

因此您将开始使用第一个猜测 (guessMinimum)。一年后你会检查剩余的。如果余数是负数,说明你付出的太多了。您需要减少每月付款。另一方面,如果一个月后剩余为正(例如,超过您的精度(例如 0.10)),您需要减少每月付款,好吗?!

尝试设计思路......

 +------------------------------------------------+ 
| /\ /\ /\ |
| \/------------------\/-------------------\/ |
|MINIMUM guess MAXIMUM|
| Minimum |
+------------------------------------------------+

如果一年后,“remain”为负数(举例)。意味着'guessMinimum'太多了!!!你需要...不是你,程序!!程序需要调整它,降低最小值,这样......

 +---------------------------------------------------+ 
| Got negative 'remain' |
| ++ |
| /\ || /\ /\ |
| \/-------------||---\/-------------------\/ |
| MINIMUM || guess MAXIMUM |
| ++ Minimum-, |
| ', |
| `. |
| `., |
| ', |
| ', |
| `. |
| ` |
| /\ /\ /\ |
| \/------------------\/-------------------\/ |
| MINIMUM guess MAXIMUM |
+---------------------------------------------------+

对不起各位。我试图插入图像,但作为新成员。我做不到。需要至少 10 个声望....帮助我!!!!使用字符的工作量太大了!!!!

CODE 需要做这项艰苦的工作来调整最小值,直到“剩余”是可以接受的(在您的精度范围内,或 epsilon,或任何字母或变量或..好的。:)

理解概念和图纸后..让我们检查代码。

balance = 999999; 
annualInterestRate = 0.18

monthlyInterestRate = annualInterestRate / 12

minimum = balance / 12
maximum = (balance * (1 + monthlyInterestRate)**12) / 12.0

guessMinimum = (minimum + maximum)/2

remain = balance #if you payed nothin, the remain is the balance!!!!

precision = 0.10 #you choose....

while (remain >= precision):

guessMinimum = (minimum + maximum)/2


for i in range (1,13):

newBalance = remain - guessMinimum
monthInterest = annualInterestRate/12*newBalance
remain = newBalance+monthInterest

# after one month, the CODE need to check about the remain

if (remain < 0): #paying too much.... need to decrease the value

maximum = guessMinimum #remember my beautiful draw above!!
remain = balance # reset the remain to start again!!

elif (remain > precision): #paying less .... need to increase the value
minimum = guessMinimum
remain = balance # reset the remain to start again!!

print "Lowest Payment: %.2f" %(guessMinimum)

就是这样。

关于python - 使用 python 中的二分搜索计算最低月付款,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15484917/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com