重复变量的“或”比较与不重复的比较之间的差异

时间:2018-09-19 00:09:39

标签: python variables if-statement

我很好奇以下两个示例产生不同结果的原因是什么(只是or没有变量GPA,而or有变量GPA)?

GPA = input('Enter GPA Grade: ')
if  GPA == 'A+' or 'a+' or 'A' or 'a':
    print('5.0')

无论我们输入哪种输入,上面的代码总是输出相同的“ 5.0”。

GPA = input('Enter GPA Grade: ')
if  GPA == 'A+' or GPA == 'a+' or GPA == 'A' or GPA == 'a':
    print('5.0')

当我们在or之后键入变量GPA时,上面的代码将产生正确的输出。

1 个答案:

答案 0 :(得分:2)

输出不同的原因是,第一个示例检查字符串"a+""A""a"是否为真,而不是检查GPA是否等于他们。

例如,如果您写了:

if "a":
    print("Success")

"Success"将被打印,因为"a"是“技术上正确的”(更正确地说,它是“真实的”)。相反,如果您写过:

if "":
    print("Success")

什么都不会打印,因为空字符串是“ falsy”。其他虚假的内容包括0[](空列表)。

在您的第一个示例中:

GPA = input('Enter GPA Grade: ')
if GPA == 'A+' or 'a+' or 'A' or 'a':
   print('5.0')  

5.0总是被打印,因为解释器会像这样简化if代码:

if (GPA == 'A+') or ('a+') or ('A') or ('a')

这样,由于字符串真实,表达式将始终求值为True

if (GPA == 'A+') or True or True or True

因此,无论GPA是多少,or都会简化为True。

第二个示例按预期工作,因为您要分别测试每个相等案例。另一个更短的解决方案使用in运算符,该运算符测试元素是否在列表中

GPA = input('Enter GPA Grade: ')
if GPA in ['a', 'A', 'a+', 'A+']:
    print('5.0')

使用str.lower()方法更好:

GPA = input('Enter GPA Grade: ')
if GPA.lower() in ['a', 'a+']:
    print('5.0')