Python迭代问题 导入数学 导入系统 def计算值(loanAmt,numYears): 对于范围(4,9)内的月氯酸盐: 月氯酸盐=月氯酸盐/100 月付款=贷款*月付款/(1-数学功率(1/(1+月付款),努迈尔斯*12)) 总付款=每月付款*单位*12 返回月付款、月付款、总付款 def打印付款(月付款、月付款、总付款、贷款、货币): 打印(“费率-每月付款-总付款”) 对于范围(4,9)内的月氯酸盐: 计算值(loanAmt,numYears) 打印(“{0}%${1:0.2f}${2:0.2f}”。格式(月付款、月付款、总付款)) def repeat(): question=str(输入(“您想创建一个新表吗?(输入y表示是):”) 如果(问题==“y”): main() 其他: sys.exit() def getPositiveFloat(): loanAmt=int(输入(“输入贷款金额:”) numYears=int(输入(“输入年数:”) 如果(loanAmt

Python迭代问题 导入数学 导入系统 def计算值(loanAmt,numYears): 对于范围(4,9)内的月氯酸盐: 月氯酸盐=月氯酸盐/100 月付款=贷款*月付款/(1-数学功率(1/(1+月付款),努迈尔斯*12)) 总付款=每月付款*单位*12 返回月付款、月付款、总付款 def打印付款(月付款、月付款、总付款、贷款、货币): 打印(“费率-每月付款-总付款”) 对于范围(4,9)内的月氯酸盐: 计算值(loanAmt,numYears) 打印(“{0}%${1:0.2f}${2:0.2f}”。格式(月付款、月付款、总付款)) def repeat(): question=str(输入(“您想创建一个新表吗?(输入y表示是):”) 如果(问题==“y”): main() 其他: sys.exit() def getPositiveFloat(): loanAmt=int(输入(“输入贷款金额:”) numYears=int(输入(“输入年数:”) 如果(loanAmt,python,loops,for-loop,arguments,iteration,Python,Loops,For Loop,Arguments,Iteration,当该程序运行时,monthlyRate变量(在printPayments中定义)将迭代,但CalculateValue中计算的值不会迭代。我发现我需要给Monthyrate以calculateValues作为参数,但我不确定如何在不破坏所有内容的情况下做到这一点。如果您的代码与您在那里键入的代码相同,则返回语句缩进过多,这很容易 import math import sys def calculateValues(loanAmt, numYears): for monthlyRate

当该程序运行时,monthlyRate变量(在printPayments中定义)将迭代,但CalculateValue中计算的值不会迭代。我发现我需要给Monthyrate以calculateValues作为参数,但我不确定如何在不破坏所有内容的情况下做到这一点。

如果您的代码与您在那里键入的代码相同,则返回语句缩进过多,这很容易

import math
import sys

def calculateValues(loanAmt, numYears):
    for monthlyRate in range (4, 9):
        monthlyRate = monthlyRate / 100
        monthlyPayment = loanAmt * monthlyRate / (1 - math.pow(1 / (1 + monthlyRate), numYears * 12))
        totalPayment = monthlyPayment * numYears * 12
        return monthlyRate, monthlyPayment, totalPayment

def printPayments(monthlyRate, monthlyPayment, totalPayment, loanAmt, numYears):
    print("Rate   Monthly Payment  Total Payment")
    for monthlyRate in range (4, 9):
        calculateValues(loanAmt, numYears)
        print("{0}%     ${1:0.2f}         ${2:0.2f}".format( monthlyRate, monthlyPayment, totalPayment))

def repeat():
    question = str(input("Would you like to create a new table? (Enter y for yes): "))
    if (question == "y"):
        main()
    else:
        sys.exit()

def getPositiveFloat():
    loanAmt = int(input("Enter the amount of the loan: "))
    numYears = int(input("Enter the number of years: "))
    if (loanAmt < 0) or (numYears < 0):
        print("Please enter a positive number for both questions")
        main()
    return loanAmt, numYears

def main():
    loanAmt, numYears = getPositiveFloat()
    monthlyRate, monthlyPayment, totalPayment = calculateValues(loanAmt, numYears)
    printPayments(monthlyRate, monthlyPayment, totalPayment, loanAmt, numYears)
    repeat()

main()
在第一次迭代后返回的代码应该与上面的代码类似

def calculateValues(loanAmt, numYears):
    myAnswer = []
    for monthlyRate in range (4, 9):
        monthlyRate = monthlyRate / 100
        monthlyPayment = loanAmt * monthlyRate / (1 - math.pow(1 / (1 + monthlyRate), numYears * 12))
        totalPayment = monthlyPayment * numYears * 12
        thisRound = (monthlyRate, monthlyPayment, totalPayment)
        myAnswer.append(thisRound)
    return myAnswer
我在这里只是猜测,如果您想要从每次迭代中获得结果,您需要将它们保存在某个容器中。我个人会把它们保存在字典里,但在你的目标更明确之前,我还没有准备好

<>你应该考虑到你更舒服的是在你的函数中添加一些打印语句,这样你就可以看到每次迭代中的值

def calculateValues(loanAmt, numYears):
    myAnswer = []
    for monthlyRate in range (4, 9):
        monthlyRate = monthlyRate / 100
        monthlyPayment = loanAmt * monthlyRate / (1 - math.pow(1 / (1 + monthlyRate), numYears * 12))
        totalPayment = monthlyPayment * numYears * 12
        thisRound = (monthlyRate, monthlyPayment, totalPayment)
        myAnswer.append(thisRound)
    return myAnswer

问题是,当代码第一次命中“return”语句时,它将返回值并离开函数。看起来您正在printpayments中循环使用monthlyRate(monthlyRate=[4,5,6,7,8])。那很好。现在,对于calculateValues函数,您需要将monthlyPayment和totalPayment返回给调用函数。您还需要将monthlyRate作为参数传入

 def testFunction(somevalue):
    for x in range(0, somevalue):
        print 'hello'
    return x

y = testFunction(2)

hello
hello
>>>y
1
一般来说,您需要阅读和思考如何在计算机编程中编写函数,尤其是在程序执行过程中可以看到变量的地方。这里有一个潜在的有用链接,可供阅读:


希望这能有所帮助。

代码中存在一些问题,通过使用下面的代码执行diff,您可以很容易地看到这些问题

  • calculateValues:在循环中运行,并在第一次迭代时返回结果
  • printPayments调用calculateValues,但不获取结果(这就是为什么同一行被反复打印的原因)
  • printPayments也在一个循环中打印-这意味着有一个循环是不需要的
  • main()调用calculateValues,然后调用printPayments,这意味着调用两个for循环的次数太多,并且没有保存结果
  • 以下是固定代码:

    def calculateValues(monthlyRate, loanAmt, numYears):
        monthlyRate = monthlyRate / 100
        monthlyPayment = loanAmt * monthlyRate \
                    / (1 - math.pow(1 / (1 + monthlyRate), numYears * 12))
        totalPayment = monthlyPayment * numYears * 12
        return (monthlyPayment, totalPayment)
    
    def printPayments(monthlyRate, monthlyPayment, totalPayment, loanAmt, numYears):
        print("Rate   Monthly Payment  Total Payment")
        for monthlyRate in range (4, 9):
            monthlyPayment, totalPayment = calculateValues(monthlyRate, loanAmt, numYears)
            print("{0}%     ${1:0.2f}         ${2:0.2f}".format( monthlyRate, \
                   monthlyPayment, totalPayment))
    
    我认为你计算利息的方式有问题:

    Enter the amount of the loan: 100
    Enter the number of years: 20
    Rate   Monthly Payment  Total Payment
    4%     $4.00         $960.08
    5%     $5.00         $1200.01
    6%     $6.00         $1440.00
    7%     $7.00         $1680.00
    8%     $8.00         $1920.00
    Would you like to create a new table? (Enter y for yes): 
    

    但是这部分我会让你自己解决;)

    你是说你的代码的格式和我的格式一样吗?你应该更清楚,你是在寻找每个月的工资。让代码完全像那样并不能解决问题。运行程序。每月和总付款应该重复,而不是重复。@user3295439这是因为这只是众多问题中的一个。请参阅我的答案以了解更多详细信息。我尝试了您的代码,但它没有按预期工作。我也不知道你改变了什么。只是提醒一下——如果一个答案很好地解决了你的问题,你应该正式接受它。祝你好运
    monthlyPayment = loanAmt * monthlyRate / (1 - math.pow(1 / (1 + monthlyRate), numYears * 12))