【问题标题】:My loop not calling my function我的循环没有调用我的函数
【发布时间】:2013-11-13 03:58:51
【问题描述】:

我是 Python 新手。我正在尝试创建一个函数,它只接受最低付款(从 10 开始)并简单地返回余额(付款 12 个月后)。

在函数之外,我正在使用一个循环来调用该函数并检查余额是否为零或小于零。如果不是,则增加最低付款 + 10 美元并再次调用该函数。当余额为零或小于零时,打印出最低付款。

理论上输出应该如下:

测试用例 1:

balance = 3329
annualInterestRate = 0.2

Result Your Code Should Generate:

******Lowest Payment: 310******

Test Case 2:

balance = 4773
annualInterestRate = 0.2
Result Your Code Should Generate:

**最低付款:440**

Test Case 3:

balance = 3926
annualInterestRate = 0.2
Result Your Code Should Generate:

**最低付款:360**

到目前为止,这就是我所拥有的:

balance = 100
annualInterestRate = 0.2
per_month = ( annualInterestRate / 12 ) 

# Answer is 0.0166666 but I need it to be 0.01, so figured out to convert to string then to float, not the most elegant , but practical. :)

convert_to_str = str(per_month)[:4]
per_month = float(convert_to_str)
lowest_payment = 0

def main():
    i = 0
    while i < 11:
        global balance
        global lowest_payment
        global per_month
        balance = balance - lowest_payment
        balance = ((balance * per_month) + balance)
        i = i +1
        #print (balance)
main()

if balance <= 0 or balance == 0:
    print "Lowest Payment: " + str(lowest_payment)
else:
    lowest_payment = lowest_payment + 10
    main()

问题是没有执行我的函数,然后再次循环。我尝试过使用 if 和 while 循环。在我的while循环下面,给出一个无限循环:

while balance >= 0 or balance != 0:
    lowest_payment = lowest_payment + 10
    main()
    if balance <= 0:
        print "Lowest Payment: " + str(lowest_payment)

非常感谢您的帮助。

【问题讨论】:

  • 预期输出是什么?
  • 理论上,余额 = 3329 年利率 = 0.2 代码应生成: 最低付款:310 测试用例 2:余额 = 4773 年利率 = 0.2 应生成:最低付款:440 测试用例 3:余额 = 3926年利率 = 0.2 最低付款:360
  • 您确定您使用的公式正确吗?
  • 如果您在谈论输出,是的,我确信这是它应该产生的输出。至于公式,我先用一个excel电子表格来理解逻辑,然后把它翻译成代码。我遇到的问题之一是在除以 0.2 / 12 时,它应该给出 0.01666666,并且只允许两位小数。我尝试使用 round(),但它向上舍入到下一个数字,也是 '%.2f',但结果相同。我想通了,转换为 String 然后再转换为 float 应该可以解决问题。

标签: function loops python-2.7 while-loop infinite-loop


【解决方案1】:

你可以这样做:

while balance > 0:    
    lowest_payment = lowest_payment + 10
    main()
print "Lowest Payment: " + str(lowest_payment)

您可能希望根据您的问题需要对其进行修改。

【讨论】:

  • 谢谢!!应用您建议的更改,它会看到该功能并与之交互,但是我的逻辑有什么问题?让我们以下面为例: Balance = 3329 .... AnnualInterestRate = 0.02 ,理论上它应该给我“最低最低付款:310”,而不是 110(这是它现在打印的)。
  • 是的,这就是让我想到您的公式中可能存在错误的原因。顺便问一下,你确定while i &lt; 11是正确的吗?它不应该是`i
  • 调试的时候用print语句看平衡,用12的时候是-15.2581,所以才开始用11,现在改了还是给我 10. 如果我们使用 100,它给了我最低的数量:10,这是正确的,但是当我去测试用例时,它们就差了.....
  • 你让我想,在我试图解决的练习中,它们有以下公式:月利率 =(年利率)/12.0 月未付余额 =(以前的余额)-(最低每月支付)每月更新余额=(每月未付余额)+(每月利率x每月未付余额)
【解决方案2】:

我找到了... 你让我想到了公式..并把它整理出来。通过了所有12个案例。在我的最终代码下方。

balance = 100
annualInterestRate = 0.2
month_payment = 10
month_interest = annualInterestRate/12

def debt(balance,month_payment,month_interest):
    for i in xrange(12):
        balance = (balance - month_payment)+month_interest*(balance - month_payment)
    return balance

final_bal = 0
i = 0
while final_bal >=0:
    final_bal = debt(balance,month_payment*i,month_interest)
    month_pay = i*month_payment
    i += 1
print 'Lowest Payment: '+str(month_pay)

【讨论】:

    猜你喜欢
    • 2013-04-09
    • 2017-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-04
    • 1970-01-01
    相关资源
    最近更新 更多