我很好奇以下两个示例产生不同结果的原因是什么(只是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时,上面的代码将产生正确的输出。
答案 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')