Python 基于早期输入数据类型打印的额外行
我的问题是这个程序如何处理意外输入。除非输入字符串,否则它似乎工作正常 当一个人向硬币中输入一个字符串时,会出现消息“请输入一个有效的输入”,并再次运行main,这是预期的。然后,当硬币中的一个金额输入正确时,程序会输出正确的输入,但每次输入错误的字符串时,程序似乎都会“记住”并打印“感谢您的惠顾,您已支付:0 CAD”。因此,例如,将发生以下终端会话: 请选择硬币的硬币价值(不允许使用硬币):asdPython 基于早期输入数据类型打印的额外行,python,python-3.x,while-loop,Python,Python 3.x,While Loop,我的问题是这个程序如何处理意外输入。除非输入字符串,否则它似乎工作正常 当一个人向硬币中输入一个字符串时,会出现消息“请输入一个有效的输入”,并再次运行main,这是预期的。然后,当硬币中的一个金额输入正确时,程序会输出正确的输入,但每次输入错误的字符串时,程序似乎都会“记住”并打印“感谢您的惠顾,您已支付:0 CAD”。因此,例如,将发生以下终端会话: 请选择硬币的硬币价值(不允许使用硬币):asd 请输入有效的输入 请选择硬币的硬币价值(不允许使用硬币):嗯 请输入有效的输入 请选择硬币的硬
请输入有效的输入
请选择硬币的硬币价值(不允许使用硬币):嗯
请输入有效的输入
请选择硬币的硬币价值(不允许使用硬币):100
感谢您的惠顾,您已支付:100加元
感谢您的惠顾,您已支付:0加元
感谢您的惠顾,您已支付: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()
您正在混淆循环和递归。当您的程序现在运行时,它正在执行以下操作:
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()
这是因为您(错误地)对任务使用了递归。请不要。