根据早期输入数据类型

时间:2015-10-03 01:54:32

标签: python python-3.x while-loop

我的问题是该程序如何处理意外输入。它似乎工作正常,除非输入一个字符串。

当一个人将一个字符串输入硬币时,消息" 请输入一个有效的输入"出现并且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()

1 个答案:

答案 0 :(得分:0)

你混淆了循环和递归。当你现在运行程序时,它正在这样做:

main()
 |
 ---> coinamount()
        |
        ---> main()
              |
              ---> coinamount()
                     |
                     ---> ...

这不是你想要的程序。它有点不清楚你的程序应该做什么,但我想它会更多main调用coinamountcoinamount循环,直到它获得有效输入并将该有效输入返回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()