试图让Python程序以字母“ q”退出,但输入是整数?

时间:2018-07-24 15:54:40

标签: python string python-3.x ubuntu integer

以下代码的快速摘要。我尝试弄乱another answer posted on here,但似乎根本不起作用。我不确定自己在做什么错。在Xubuntu 18.04 LTS上使用Python 3。这是代码:

while True:
    try:
        print("Your room is DARK, yet a light flashes red. What do you do?")
        print("")
        print("1. Look around.")
        print("2. There's a lamp somewhere...")
        print("3. Go back to bed.")
        print("")
        ans = int(input(">>> "))
        if ans == 1:
            print("")
            print("Too dark to see... better find a light...")
            time.sleep(2)
        if ans == 2:
            print("")
            print("Fumbling, you turn on your nightstand lamp...")
            break
        if ans == 3:
            print("")
            print("You sleep away the troubles... but you can't stay asleep...")
            time.sleep(1)
            print("")
            print("Back to the world of the living...")
        if ans == str('q'):
            sys.exit(0)
    except ValueError:
        print("")

因此,当用户输入“ q”时,我希望程序关闭。我似乎根本无法做到这一点。

2 个答案:

答案 0 :(得分:1)

问题出在您说int(input(">>> "))的行上,该行每次都将用户输入的内容转换为整数。您应该做的是将用户输入作为字符串输入,然后检查它是否是1、2和3的有效数字或等于q。

示例:

ans = input(">>> ")
if ans == '1':
    # Do something
elif ans == '2':
    # Do something
elif ans == '3':
    # Do something
elif ans == 'q':
    sys.exit(0)

答案 1 :(得分:0)

您正在将q转换为输入ans = int(input(">>> "))处的整数,然后尝试将其转换回if ans == str('q'):处的字符串,更好的解决方案是将输入作为字符串保留在(删除int()类型转换,并在每种情况下都将int()显式转换为int类型。

更新:我原来的解决方案有误。校正后的用户会询问字符串是否为数字,然后将其评估为整数。这比较冗长,因此我建议使用Karl的解决方案。但是,如果您不愿意将字符串转换为int类型,我将保留此内容。

while True:
try:
    ans = input(">>> ")
    if ans.isdigit() and int(ans) == 1:
        ...
    elif ans.isdigit() and int(ans) == 2:
        ...
    elif ans.isdigit() and int(ans) == 3:
        ...
    elif ans == 'q':
        sys.exit(0)
except ValueError:
    print("")

那么,您甚至都不需要呼叫str()