python - 重复变量的比较与不重复的比较之间的区别
问题描述
我很好奇下面两个样本的不同结果的原因是什么(只是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
.
解决方案
输出不同的原因是第一个示例检查字符串"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 是什么,or
s 都会简化为 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')
推荐阅读
- java - Java while循环不重复
- python - 按天过滤熊猫数据框
- node.js - Vue Micro UI/Web 组件开发工作流程
- docker - 如何访问在 Google Cloud Platform 中运行的 docker 容器
- python - Pandas 数据框:查找值从 x 变为 y 的位置
- arduino - 如何让步进电机罗盘通过360度
- sql - 将存储过程的计数存储到表中
- c++ - VTK Iso Slider 不工作或不显示滑块小部件
- git - 我可以在不明确指定父级的情况下基于分支的分叉点吗?
- perforce - 如何在 Wndows 上使用 Perforce 命令行创建客户端工作区