我很高兴来到这里,对不起,我是初学者,并正在参加MIT的自学开放课程。我正在做问题集:
我目前在实现对分方法的问题C上遇到问题,我的代码如下:
total_cost = 1000000
portion_down_payment = 0.25
current_savings = 0
semi_annual_raise = .07
r = 0.04
month = 0
savings_rate = 0
down_payment = portion_down_payment*total_cost
annual_salary = float (input('Enter your annual salary: '))
low = 0.0
high = 10000
ans = (high+low)/2.0
while (down_payment - current_savings > 100):
current_savings = current_savings + current_savings*(r/12) + (annual_salary/12)*(ans/100)
if (down_payment - current_savings > 100):
high = ans
else:
low = ans
ans = (high+low)/2.0
if month%6 == 0:
annual_salary = annual_salary + semi_annual_raise*annual_salary
month+=1
if month > 36:
print ('down payment not possible in 3 years')
break
print('savings rate:', ans/100)
print('month', month)
我是否缺少某些东西,因为代码会在第一个循环中不断退出,等等...对于我的愚蠢,我深表歉意,我是一个初学者。我想学习和改进,感谢百万社区。 p>
答案 0 :(得分:1)
本质上,您是在询问功课/练习。您应该阅读this post。我将尝试为您提供一些指导,而无需解决练习。
第1步:定义您希望通过二等分实现的目标。该问题或多或少地要求“在36个月内达到current_savings
的100内的down_payment
的储蓄率(如果有)是多少”。这样可以为您提供第一个二等分条件的指针。
类似的东西:
while True:
if abs(down_payment - current_savings) < 100:
break
elif down_payment > current_savings:
low = ans
else:
high = ans
ans = (high+low)//2 #note the integer division here
第2步:有时,即使以100%的节省率也无法实现节省。您添加类似的内容:
if ans >= 9999:
break
现在,您需要在36个月末计算出current_savings
的内容。您可以使用for
循环或function
或同时使用两者(我会留给您)。
尝试逐步解决问题,并在此处询问您是否不理解/无法解决其中一个步骤
希望有帮助。