首页 > 解决方案 > 重复变量的比较与不重复的比较之间的区别

问题描述

我很好奇下面两个样本的不同结果的原因是什么(只是or没有变量GPAor变量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.

标签: pythonvariablesif-statement

解决方案


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

例如,如果你写:

if "a":
    print("Success")

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

if "":
    print("Success")

不会打印任何内容,因为空字符串是“假的”。其他虚假的东西包括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 是什么,ors 都会简化为 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')

推荐阅读