python - a==b 和 b==a 在 python 中是否给出相同的结果
问题描述
我正在学习python并编写了这段代码。
name = input("Enter your name \n")
name = name.lower()
for i in range(0, len(name)):
if name[i] == "": # investigate
pass
elif name.count(name[i]) > 1:
print(f"The number of times {name[i]} appears in {name} is {name.count(name[i])}")
name = name.replace(name[i], "")
else:
print(f"The number of times {name[i]} appears in {name} is {name.count(name[i])}")
有时会出错,pycharm 要求将 name[i] == "": 翻转为 "" == name[1]
解决方案
正如关于价值比较的文档所说:
内置数值类型(数值类型 - int、float、complex)和标准库类型的数量 fractions.Fraction 和 decimal.Decimal 可以在它们的类型内和它们之间进行比较,但限制是复数不支持顺序比较. 在所涉及的类型的限制内,它们在数学上(算法上)比较正确而不会损失精度。
强调我的。因此,只要您使用内置数字而不超出其范围/精度,a==b 始终等于 b==a。然而,
如果可能,自定义比较行为的用户定义类应遵循一些一致性规则:
比较应该是对称的。换句话说,以下表达式应该具有相同的结果:
x == y 和 y == x
Python 不强制执行这些一致性规则。事实上,非数字值就是不遵守这些规则的一个例子。
这意味着当您使用其他类型时,可能会a==b
返回与b==a
. 编译器不会强制执行。
至于 IDE 建议翻转name[i] == ""
到"" == name[i]
,这只是为了防止在您打算比较时意外分配,因为name[i]=""
它是一个有效的语句(尽管它在预期布尔值的地方无效)而""=name[i]
不是。
推荐阅读
- javascript - 为什么在nest.js 中找不到参数
- javascript - 我可以使用带有打字稿类的反应钩子吗?(不是 React 类,而是经典的 util typescript 类?)
- git - Git命令提取具有特定日期范围和路径的文件
- titanium - 将应用程序从 Titan sdk 3.4.0.GA 更新到 9.2.0.GA 使我的字体看起来非常小
- javascript - 我在 ubuntu 中学习 js,但是当我给出节点 index.js 的 cmd 时,它将进入新行并忽略第一个 cmd
- arrays - C中数组中的内存分配
- c# - Xamarin.Forms 页面底部到顶部动画
- python - 为什么我在不同的地方打印结果不一样?
- r - readLines 函数在 R 连接中不起作用
- git - 如何将本地机器上的代码推送到主分支的 GitHub