为什么我的代码一直要求我四次宿舍?

时间:2014-11-12 22:45:19

标签: python function input

我有这个家庭作业,我不打算改变这部分代码

def main():

    pennies = get_input("Enter pennies : ")
    nickels = get_input("Enter nickels : ")
    dimes = get_input("Enter dimes : ")
    quarters = get_input("Enter quarters : ")

    print("You entered : ")
    print("\tPennies  : " , pennies)
    print("\tNickels  : " , nickels)
    print("\tDimes    : " , dimes)
    print("\tQuarters : " , quarters)

    total_value = get_total(pennies, nickels, dimes, quarters)
    dollars, cents = get_left_over_cents(pennies, nickels, dimes, quarters)
    left_over_cents = get_left_over_cents(pennies, nickels, dimes, quarters)
    print("Total = $", format(total_value,".02f"), sep="")
    print('You have', dollars, "dollars and", cents, "cent(s)")

这是我完成的作业代码

def main():
    pennies = get_input("Enter pennies : ")
    nickels = get_input("Enter nickels : ")
    dimes = get_input("Enter dimes : ")
    quarters = get_input("Enter quarters : ")

    print("You entered : ")
    print("\tPennies  : " , pennies)
    print("\tNickels  : " , nickels)
    print("\tDimes    : " , dimes)
    print("\tQuarters : " , quarters)

    total_value = get_total(pennies, nickels, dimes, quarters)
    dollars, cents = get_left_over_cents(pennies, nickels, dimes, quarters)
    left_over_cents = get_left_over_cents(pennies, nickels, dimes, quarters)
    print("Total = $", format(total_value,".02f"), sep="")
    print('You have', dollars, "dollars and", cents, "cent(s)")

def get_input(pennies):
    pennies = input("Enter Pennies: ")
    while int(pennies) < 0:
        print("Error: money cannot be negative")
        pennies = int(input("Enter correct amount of pennies: "))
    return pennies

def get_input(nickels):
    nickels = input("Enter nickels: ")
    while int(nickels) < 0:
        print("Error: money cannot be negative")
        nickels = int(input("Enter correct amount of nickels: "))
    return nickels

def get_input(dimes):
    dimes = input("Enter dimes: ")
    while int(dimes) < 0:
        print("Error: money cannot be negative")
        dimes = int(input("Enter correct amount of dimes: "))
    return dimes

def get_input(quarters):
    quarters = input("Enter quarters: ")
    while int(quarters) < 0:
        print("Error: money cannot be negative")
        quarters = int(input("Enter correct amount of quarters: "))
    return quarters

def get_total(pennies, nickels, dimes, quarters):
    amount_pennies = (int(pennies) * .01)
    amount_nickels = (int(nickels) * .05)
    amount_dimes = (int(dimes) * .10)
    amount_quarters = (int(quarters) * .25)
    return amount_pennies + amount_nickels + amount_dimes + amount_quarters

def get_left_over_cents(pennies, nickels, dimes, quarters):
    total = int(pennies) + 5*int(nickels) + 10*int(dimes) + 25*int(quarters)
    return total // 100, total % 100

main()

但每次我运行代码时,它都会告诉我进入4次宿舍。但我希望它能说进入便士,输入镍币等等。有人能帮我吗?我真的很困惑如何在不改变核心代码的情况下做到这一点

2 个答案:

答案 0 :(得分:6)

您不断重新定义get_input功能。每次执行此操作时,旧的get_input功能都会黯然失色,变得不再可用。所以,最后,你只有get_input你做的季度。

您需要重命名您的函数,以便每个函数都有一个不会掩盖其他函数的唯一名称。为什么不这样做:

def get_pennies(...):
    ...

def get_nickels(...):
    ...

def get_dimes(...):
    ...

def get_quarters(...):
    ...

或者,更好的是,制作一个可以处理所有硬币类型的功能。 (基本)示例如下:

def get_coin(coin_type):
    amount = int(input("Enter " + coin_type + ": "))  # BTW, you forgot to call int() up here before.
    while amount < 0:
        print("Error: money cannot be negative")
        amount = int(input("Enter correct amount of " + coin_type + ": "))
    return amount

然后您将此函数称为:

pennies = get_coin('pennies')
nickels = get_coin('nickels')
...

答案 1 :(得分:4)

作为iCodez explains,每次撰写def get_input(dimes):def get_input(quarters):时,您只需为函数get_input创建新定义,并隐藏旧定义。参数具有不同名称的事实并不意味着什么。 (怎么可能?当你写pennies = get_input("Enter pennies : ")时,Python如何知道你想要调用get_input(pennies)而不是get_input(quarters)?)

您可以通过为每个人提供一个唯一名称(get_penniesget_nickels等)来解决此问题,并通过唯一名称进行调用。

另外,请注意,您实际上并非使用参数penniesnickels或其他任何内容。你正在使用一个提示字符串,并且不采取任何措施。

这很重要,因为这意味着你可以将它们全部重构为一个函数。如果你看看你写的实现,它们已经几乎完全相同了;唯一的区别在于您打印的提示字符串。并且您已经在每个呼叫中​​获得了不同的提示字符串。那么,为什么不使用呢?

def get_input(prompt):
    number = input(prompt)
    while int(number) < 0:
        print("Error: money cannot be negative")
        number = int(input(prompt))
    return number

现在,pennies = get_input("Enter pennies : ")会要求您提供便士,nickels = get_input("Enter nickels : ")会要求您提供镍币等。


作为旁注,所有四个实现(以及我的合并版本()中都存在严重错误。如果您的第一个输入是非负数,则函数将返回字符串,如"3";如果那个是负数,但后者不是,那么函数将返回整数值,如5。你可能想要使第一个number = …和第二个相同。