现在问题出现在我的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 :(得分: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")
)。