2015-09-13 113 views
-1

现在问题来自我的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() 
+0

您的代码显示了在“if语句”中组合多个条件的主题缺乏理解。最好再多做一些Google搜索。 – StillLearnin

+0

对于python 2用“raw_input”代替“input” –

+0

假设你输入“Yes”,想想第一次检查的结果是什么。这是错误的,因此执行下降到“elif” – StillLearnin

回答

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"是错误的,因为实际上"New"确实等于"New"or之后的下一个条件现在已经过测试,并且返回True(因为"New"实际上并不等于"new"),所以该块将被执行,打印"Invalid input"并全面运行main()

+0

亲爱的Downvoters:我很想用我的回答解决您的担忧,但您没有说明任何问题。现在,我很伤心:( – MattDMo

+0

不完全是一个有用的答案为明显的问题是缺乏了解的条件进行编程。OP已经怀疑这是问题,你的答案没有帮助所以现在他很伤心:( – StillLearnin

+0

@StillLearnin (条件!=“新建”)或(条件!=“新建”)#现在我已经对自己的答案感到满意了,希望其他人和我们的操作系统也会一样。 – MattDMo

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

这将始终为真,因为condition不能同时为“新”和“新”。至少有一个比较结果为True,使整个表达式等于True。这可以通过将or切换到and来解决。代码中的其他条件也相同。

即使您更改支票

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

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

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

elif一定是假的,因为condition不是 “拿来主义”,也不是 “拿来主义”。您可以通过将所有的测试中解决这个相同的,如果:

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"]: 

,你的代码会接受输入,如“新”,“拿来主义”,“新的”和失败( print("Invalid input"))用于其他输入。

+0

非常感谢你!对不起张贴这是一个马虎的问题,这是我的第一篇文章,我很欣赏这个解释和努力,谢谢!!!!! – SavageSammy