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



以下代码的快速片段。我试着在这里张贴另一个答案,但似乎根本不起作用。我不确定我做错了什么。在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"时,我希望程序关闭。我似乎根本做不到。

问题出在您的行中,您说的是int(input(">>> ")),它将用户每次输入的内容转换为整数。您应该做的是将用户输入作为字符串,然后检查它是否是1、2和amp;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)

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

最新更新