以下代码的快速摘要。我尝试弄乱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”时,我希望程序关闭。我似乎根本无法做到这一点。
答案 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()
。