没有得到我想要的输入

时间:2015-09-13 03:28:47

标签: python input

  

现在问题出现在我的if语句中,即使我输入"是",它仍会说"输入无效"并重新执行我的main()函数。不确定是什么问题。不确定我是否错误地使用了if,elif语句。

condition=input("What is the condition of the phone(New or Used)?")
        if(condition != "New") or (condition != "new"):
            print("Invalid input")
            return main()
        elif(condition != "Used") or (condition != "used"):
            print("Invalid input")
            return main()


        gps=input("Does the phone have gps(Yes or No)?")
        if(gps != "Yes") or (gps != "yes"):
            print("Invalid input")
            return main()
        elif(gps != "No") or (gps != "no"):
            print("Invalid input")
            return main()


        wifi=input("Does the phone have wifi(Yes or No)?")
        if(wifi != "Yes") or (wifi != "yes"):
            print("Invalid input")
            return main()
        elif(wifi != "No") or (wifi != "no"):
            print("Invalid input")
            return main()


        camera=input("Does the phone have a camera(Yes or No)?")
        if(camera != "Yes") or (camera != "yes"):
            print("Invalid input")
            return main()
        elif(camera != "No") or (camera != "no"):
            print("Invalid input")
            return main()

2 个答案:

答案 0 :(得分:2)

你的程序正在完成它的编写工作。在每个input()行之后,它执行以下操作:

print("Invalid input")
return main()

例如,拿走你的第一个代码块:

condition=input("What is the condition of the phone(New or Used)?")
if(condition != "New") or (condition != "new"):
    print("Invalid input")
    return main()
elif(condition != "Used") or (condition != "used"):
    print("Invalid input")
    return main()

假设您在提示时输入New,因此condition现在的值为"New"if语句中的第一个测试将产生False - "New" != "New"为false,因为事实上"New" 确实等于 "New"。现在测试or之后的下一个条件并返回True(因为"New"实际上不等于"new"),因此执行该块,打印{{1}并重新运行"Invalid input"

答案 1 :(得分:1)

if (condition != "New") or (condition != "new"):

这将始终为True,因为condition不能同时为"新"和"新"。至少有一个比较为True,使整个表达式等于True。可以通过将or切换为and来解决此问题。对于代码中的每个其他条件都是如此。

即使您将支票更改为

(condition != "New") and (condition != "new")

你还有另一个问题。如果condition == "New",则检查为False,评估会跳转到elif

elif (condition != "Used") and (condition != "used"):

elif必须为False,因为condition不是"已使用"也没用过"。你可以通过将所有测试放在同一个if:

来解决这个问题
if (condition != "New") and (condition != "new") and (condition != "Used") and (condition != "used"):

然而,更为惯用的方法是:

if condition not in ["New", "new", "Used", "used"]:
    print("Invalid input")
    return main()

打印"输入无效"如果condition不是["New", "new", "Used", "used"]中的字符串之一。

更好的做法是完全忽略套管。为此,请拨打.lower()上的input

condition = input("What is the condition of the phone(New or Used)?").lower()

然后您可以检查

if condition not in ["new", "used"]:

并且您的代码将接受输入,例如" new"," uSED"," NeW"和其他输入失败(print("Invalid input"))。