Python不接受用户输入

时间:2015-12-28 20:53:09

标签: python

我之前设法让这段代码工作,但我已经意外地改变了一些东西而无法弄清楚是什么。 无效的代码是:

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()修复了问题。它在现在关闭时要求确认,当它之前没有时,但是以其他方式排序。

2 个答案:

答案 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"):