Python二等分方法

时间:2019-02-18 20:15:22

标签: python

我很高兴来到这里,对不起,我是初学者,并正在参加MIT的自学开放课程。我正在做问题集:

https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-0001-introduction-to-computer-science-and-programming-in-python-fall-2016/assignments/MIT6_0001F16_ps1.pdf

我目前在实现对分方法的问题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)

我是否缺少某些东西,因为代码会在第一个循环中不断退出,等等...对于我的愚蠢,我深表歉意,我是一个初学者。我想学习和改进,感谢百万社区。

1 个答案:

答案 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或同时使用两者(我会留给您)。

尝试逐步解决问题,并在此处询问您是否不理解/无法解决其中一个步骤

希望有帮助。