【问题标题】:Extra lines being printed based on earlier input datatype根据较早的输入数据类型打印额外的行
【发布时间】:2015-10-03 01:54:32
【问题描述】:

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

当一个字符串输入到 coin 时,会出现消息“请输入有效的输入”并再次运行 main,这是预期的。然后,当正确输入硬币中的金额之一时,程序会吐出正确的输入,但每次之前输入的字符串不正确时,它似乎都会“记住”并打印“感谢您的惠顾,您支付:0 加元”。因此,例如,将发生以下终端会话:

请以便士为单位选择硬币价值(不允许使用硬币):asd
请输入有效的输入
请以便士为单位选择硬币价值(不允许使用 toonies):嗯
请输入有效的输入
请选择以便士为单位的硬币价值(不允许使用硬币):100
感谢您的惠顾,您已支付:100 加元
感谢您的惠顾,您已支付:0 c CAD
感谢您的惠顾,您已支付:0 c CAD

我只想显示关于 100c 的声明。 我不明白是什么导致代码“记住”字符串输入。代码如下,我真的很困惑为什么会这样。当coinamount() 中的else 语句运行时,程序是否应该像我刚刚运行代码一样有效地'restart',因为正在重新分配用户输入并使用新提示? p>

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()

【问题讨论】:

  • 那是因为您(错误地)对任务使用了递归。请不要

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


【解决方案1】:

您混淆了循环和递归。当您的程序现在运行时,它正在执行此操作:

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()

【讨论】:

    猜你喜欢
    • 2017-08-09
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-05
    相关资源
    最近更新 更多