我之前设法让这段代码工作,但我已经意外地改变了一些东西而无法弄清楚是什么。 无效的代码是:
while True:
answer = input ("Would you like to play this game? Type yes if you would like to. Type no to end the program")
if answer == 'no' or 'n' or 'No' or 'N':
sys.exit()
elif answer == 'yes' or 'y' or 'Yes' or 'Y':
code = input("Input a three digit code. Must be more than 001 and less than 100.")
当我运行代码并输入其中一个答案时,程序将不会运行下一部分并且不会给出错误消息。 如果有必要,我已将整个程序的代码放在下面:
import random
import sys
while True:
answer = input ("Would you like to play this game? Type yes if you would like to. Type no to end the program")
if answer == 'no' or 'n' or 'No' or 'N':
sys.exit()
elif answer == 'yes' or 'y' or 'Yes' or 'Y':
code = input("Input a three digit code. Must be more than 001 and less than 100.")
try:
value = int(code)
except:
print ("Invalid code")
continue
if 1 <= value <= 100:
print (code)
print ("Valid code")
print ("I will now try to guess your number")
number = random.randint(1, 100)
while number > int(code) or number < int(code):
print ("Failed attempt. Number guessed is")
number = random.randint(1, 100)
print (number)
else:
if number == int(code):
print ("Your code is")
print (code)
else:
print ("Invalid code")
编辑:非常感谢,yes选项现在正在运行,但是当选择任何no选项时程序仍然不会退出,就像之前一样。编辑的代码是:
if answer in ('no', 'n', 'No', 'N'):
sys.exit()
elif answer in ('yes', 'y', 'Yes', 'Y'):
我通过打印答案值进行检查,我相信它正在注册无输入,但由于某种原因没有执行后面的命令。
编辑:我对逻辑仍然有点模糊,但将其更改为exit()修复了问题。它在现在关闭时要求确认,当它之前没有时,但是以其他方式排序。答案 0 :(得分:4)
导致无声退出的问题:
if answer == 'no' or 'n' or 'No' or 'N':
sys.exit()
该测试将answer == 'no'
测试为一个测试,然后将'n'
测试为单独的测试,依此类推。当任何测试返回&#34; truthy&#34;时,or
个链返回值(或最后评估的值,如果没有真实的),所以测试总是最终评估为&#34; truthy&#34;因为像'n'
这样的非空字符串是真的。如果您正在尝试测试这些值中的任何一个,那么您可以在&#34;中包含&#34;测试以查看answer
是否是公认的值组之一,例如:
if answer in ('no', 'n', 'No', 'N'):
答案 1 :(得分:1)
原因在于这个表达式:
if answer == 'no' or 'n' or 'No' or 'N':
在python中,上面与此完全相同:
if (answer == 'no') or ('n' != '') or ('No' != '') or ('N' != ''):
由于除第一个表达式之外的所有表达式的计算结果为true,因此整个表达式为真。
最简单的解决方案是将您的输入转换为小写并修剪任何额外空间,然后检查答案是否在允许答案列表中,以便您可以轻松比较&#34; n&#34;,&# 34; N&#34;,&#34; no&#34;,&#34; NO&#34;,&#34; No&#34;,&#34; nO&#34;。
if answer.strip().lower() in ("n", "no"):