我正在尝试创建一个程序,以检查您是否能够越过加拿大边境。由于某些原因,即使不是真的,第一个if语句也会打印。
我尝试添加elif语句并缩进代码,但没有任何效果。
age = int(input("Enter your age: "))
passport = input("Do you have a passport? ")
if age >= 18 and "Yes" or "yes" in passport:
print("You can cross the border to Canada.")
if "No" or "no" in passport:
enhanced_license = input("Do you have an enhanced license? ")
if "Yes" or "yes" in enhanced_license:
print("You can cross the border to Canada.")
if age < 18:
guardian = input("Are you traveling with a legal guardian? ")
if guardian == "Yes" or "yes":
print("You can cross the border to Canada.")
如果您18岁,则一切正常,但增强许可部分除外。 当我为护照输入no时,这是代码的输出:
Enter your age: 18
Do you have a passport? no
You can cross the border to Canada.
Do you have an enhanced license?
答案 0 :(得分:0)
进行以下更改:
if age >= 18 and "Yes" in passport or "yes" in passport:
在其他地方也可以这样做:
if "No" in passport or "no" in passport:
if "Yes" in enhanced_license or "yes" in enhanced_license:
诸如and
和or
之类的逻辑运算符的操作数应始终为布尔表达式,而“ Yes”不是布尔表达式,因此始终求值为True
在Python中,字符串和其他序列如果不为空,则评估为True
;如果为空,则评估为False
。
答案 1 :(得分:0)
如前所述,该行
if age >= 18 and "Yes" or "yes" in passport:
对此负责,并且始终将 True 赋值为age >= 18
,就像
if age >= 18 and True or "yes" in passport:
您应该小写输入,以避免进行大量的条件检查和容易出错的检查:
age = int(input("Enter your age: "))
passport = input("Do you have a passport? ").lower()
if age >= 18 and "yes" in passport:
print("You can cross the border to Canada.")
if "no" in passport:
enhanced_license = input("Do you have an enhanced license? ").lower()
if "yes" in enhanced_license:
print("You can cross the border to Canada.")
if age < 18:
guardian = input("Are you traveling with a legal guardian? ").lower()
if guardian == "yes":
print("You can cross the border to Canada.")
答案 2 :(得分:0)
您也可以只看第一个字母:
if age >= 18 and passport[0] == 'y':
这意味着您可以接受“是”或“是”或“您下注!”或“ ya gosh darn tootin”等。但是,严重的是,一些用户可能会认为“ y”是对该问题的适当回答。
答案 3 :(得分:0)
更改
if age>= 18 and "Yes" or "yes" in passport
到
if age>=18 and "yes" in passport.lower()
这将使用护照字符串的小写字母,并检查其中是否包含“是”。
这也适用于诸如“是的,我当然”或“当然是”之类的字符串,为避免混淆,我会使用类似的
if age>18 and passport.lower()=="yes"
此外,我不会使用if "No" or "no" in passport
,而是使用else,仅在他们没有护照时才会触发。
else:
##your code here
enhanced_license的作用相同:
if age>=18 or enhanced_license.lower()=="yes"
原始代码不起作用的原因是因为python“ or”关键字仅采用布尔值(true或false),因此在显示文本时假定它是true。