MIT 6.00.1x Set 2 P3 ||差不多完成了,非常接近,但是失败了

时间:2018-07-23 09:26:07

标签: python debugging

首先,我感到抱歉。这是我第一次使用此网站,所以我不知道规则。

我试图展示自己的尝试,但我不知道该怎么做。我只是每天直接重写代码,而没有保存的草稿。我使用了很多方法来解决问题,但是我对编码还是很新鲜的,并且您知道,我继续参加MIT CS入门课程。

对于这个问题,我想粘贴原始链接,但是您需要先登录网站。所以我用谷歌搜索并找到包含问题的Github页面。 enter link description here问题集中有三个问题,我已经解决了其中两个。

这是有关如何计算信用卡最近每月付款的信息,必须使用对分搜索

我锻炼了一次。但是,我只能进行一个二等分搜索,然后逐步减去0.01以接近结果。我之前向您展示过我的代码,这是我保存的唯一旧版本。

balance = 999999
annualInterestRate = 0.18
monthly_interest_rate = annualInterestRate /12.0
lower_bound = balance / 12.0
upper_bound = (balance * (1 + monthly_interest_rate)**12) / 12.0

def calculate_balance(balance, fixed):
    month = 0
    while month < 12:
        balance = (balance - fixed) * (monthly_interest_rate + 1)
        month += 1
    return balance

while True:
    if calculate_balance(balance, lower_bound) > 0:
        lower_bound = (lower_bound + upper_bound) / 2
    else:
        skipped_answer = lower_bound
        break
#print(skipped_answer)
while True:
    #print(balance, skipped_answer)
    if calculate_balance(balance, skipped_answer) < 0:
        skipped_answer -= 0.01
    else:
        break
print(round(skipped_answer+0.01, 2))

无论如何,这段代码可以正常工作,但是edx的评分员说我的代码花了太多时间。

因此,我想到了双向二分法搜索,这又使我花费了几个小时。但这是我能力的极限。我没主意这是下面的代码。

balance = 999999
annualInterestRate = 0.18
monthly_interest_rate = annualInterestRate /12.0
lower_bound = balance / 12.0
upper_bound = (balance * (1 + monthly_interest_rate)**12) / 12.0

def calculate_balance(balance, fixed):
    month = 0
    while month < 12:
        balance = (balance - fixed) * (monthly_interest_rate + 1)
        month += 1
        balance
    return balance

while True: 
    if abs(calculate_balance(balance, lower_bound) - balance) > 0.01:
        if calculate_balance(balance, lower_bound) > 0:
            mark = lower_bound
            lower_bound = (lower_bound + upper_bound) / 2
        elif calculate_balance(balance, lower_bound) < 0:
            upper_bound = lower_bound
            lower_bound = mark
    else:
        break
print(lower_bound)

我不知道为什么它将是一个无限循环。以及如何解决呢?怎么了?

考虑了几个小时。我已经尝试了所有已知的方法。

我自己完成了所有练习,并花了我太多时间。这次,我知道我必须得到有经验的人的帮助。一定有我不知道的东西。

1 个答案:

答案 0 :(得分:0)

我不知道现在看到我的代码运行非常快是否有意义。很小 与您的有所不同:

balance = 999999
annualInterestRate = 0.18
payment = 0
lower = balance/12.0
upper = (balance*(1+annualInterestRate/12)**12)/12.0
lbalance = 0

while payment < balance :
    oldbalance = lbalance
    lbalance = balance
    payment = round((lower + upper)/2,3)


    for i in range(0,12):

        unpaidBalance = lbalance - payment
        interest = unpaidBalance * annualInterestRate / 12.0 
        lbalance = unpaidBalance + interest

    if round(lbalance,2) == 0 or oldbalance == lbalance:
        print('Lowest Payment: ' + str(payment))
        break
    elif lbalance > 0 :
        lower = payment
    else:
        upper = payment 

为什么在某些情况下您的两个代码都使用二等分法,而在某些情况下却没有?这是主要问题。

祝你们一切顺利
祝你有美好的一天