首页 > 解决方案 > 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]

标签: python

解决方案


正如关于价值比较的文档所说:

内置数值类型(数值类型 - 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]不是。


推荐阅读