我的问题是该程序如何处理意外输入。它似乎工作正常,除非输入一个字符串。
当一个人将一个字符串输入硬币时,消息" 请输入一个有效的输入"出现并且main再次运行,这是预期的。然后当正确输入硬币中的一个金额时,程序会输出正确的输入,但是每次输入错误的字符串时,它似乎都记得'和打印" 感谢您的惠顾,您付了:0 CAD "。因此,例如,将发生以下终端会话:
请选择一个便士的硬币值(不允许使用toonies):asd
请输入有效的输入
请以便士选择一个硬币值(不允许使用toonies):hmm
请输入有效的输入
请以便士选择硬币值(不允许使用香椿):100
感谢您的惠顾,您支付:100 c CAD
感谢您的惠顾,您付了:0 c CAD
感谢您的惠顾,您付了:0 c CAD
我只想要关于100c的陈述出现。 我不明白是什么原因导致代码记住'字符串输入。代码如下,我真的很难过为什么会发生这种情况。当coinamount()
中的else语句运行时,该程序不应该有效地 重新启动'好像我刚刚运行了代码一样,因为正在用新的提示重新分配用户输入?
coins = [0, 5, 10, 25, 100]
def coinamount(total):
coin = (input("Please select a coin value in pennies (No toonies allowed): "))
if coin == "q":
print("Quitting...")
elif coin.isnumeric():
coin = int(coin)
total += coin
else:
print("Please enter a valid input")
main()
return total
def verification(coin):
if coin in coins:
print("Thank you for your patronage, you paid:", coin, "c CAD")
elif coin == 200:
print("I told you we don't accept toonies...")
main()
else:
print("Please enter a valid coin amount")
main()
def main():
tab = 0
tabplus = coinamount(tab)
verification(tabplus)
main()
答案 0 :(得分:0)
你混淆了循环和递归。当你现在运行程序时,它正在这样做:
main()
|
---> coinamount()
|
---> main()
|
---> coinamount()
|
---> ...
这不是你想要的程序。它有点不清楚你的程序应该做什么,但我想它会更多main
调用coinamount
和coinamount
循环,直到它获得有效输入并将该有效输入返回main
。
如果你希望main在用户按下q之前继续运行,那么也可以在main中添加一个循环。
以下是一种可能的实施方式:
coins = [0, 5, 10, 25, 100]
def coinamount(total):
while True:
coin = (input("Please select a coin value in pennies (No toonies allowed): "))
if coin == "q":
print("Quitting...")
return coin
elif coin.isnumeric():
coin = int(coin)
total += coin
return total
else:
print("Please enter a valid input")
def verification(coin):
if coin in coins:
print("Thank you for your patronage, you paid:", coin, "c CAD")
elif coin == 200:
print("I told you we don't accept toonies...")
else:
print("Please enter a valid coin amount")
def main():
tabplus = coinamount(0)
while tabplus != "q":
verification(tabplus)
tabplus = coinamount(tabplus)
main()