如果语句正在打印,即使它不是真的

时间:2019-05-06 23:12:39

标签: python-3.x

我正在尝试创建一个程序,以检查您是否能够越过加拿大边境。由于某些原因,即使不是真的,第一个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? 

4 个答案:

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

诸如andor之类的逻辑运算符的操作数应始终为布尔表达式,而“ 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。