首先,我感到抱歉。这是我第一次使用此网站,所以我不知道规则。
我试图展示自己的尝试,但我不知道该怎么做。我只是每天直接重写代码,而没有保存的草稿。我使用了很多方法来解决问题,但是我对编码还是很新鲜的,并且您知道,我继续参加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)
我不知道为什么它将是一个无限循环。以及如何解决呢?怎么了?
考虑了几个小时。我已经尝试了所有已知的方法。
我自己完成了所有练习,并花了我太多时间。这次,我知道我必须得到有经验的人的帮助。一定有我不知道的东西。
答案 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
为什么在某些情况下您的两个代码都使用二等分法,而在某些情况下却没有?这是主要问题。
祝你们一切顺利
祝你有美好的一天