在Python中a == b和b == a是否给出相同的结果

时间:2020-04-26 18:38:17

标签: 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]

2 个答案:

答案 0 :(得分:1)

正如值比较中的documentation所说:

内置数字类型(数字类型,即int,float,complex)和标准库类型分数(分数和小数)的数量。复数不支持订单比较的限制。在涉及的类型范围内,他们在数学上(算法上)比较正确而不会损失精度。

强调我的。因此,只要您使用内置数字而不超出其范围/精度,a == b始终等于b == a。但是,

自定义类的用户定义类,应尽可能遵循一些一致性规则:

比较应该是对称的。换句话说,以下表达式应具有相同的结果:

x == y和y == x

Python不执行这些一致性规则。实际上,非数字值就是不遵循这些规则的示例。

这意味着当您使用其他类型时,a==b有可能返回与b==a不同的结果。编译器不会强制执行。

对于IDE建议将name[i] == ""翻转到"" == name[i]的情况,这只是为了防止在进行比较时意外分配,因为name[i]=""是有效的语句(尽管它是无效的) (应该是布尔值),而""=name[i]则不是。

答案 1 :(得分:0)

由于索引可能超出范围,可能会出现此错误。因为在您的for循环中,如果字母大于0,您将替换它。

例如:如果您使用“字母”名称,则

在第一次迭代中:The number of times l appears in letter is 1(名称=字母)

第二个:The number of times e appears in letter is 2(name = lttr)

第三个:The number of times t appears in letter is 2(名称= lr)

如您在每次迭代中看到的,

您的名称已更改,最后它会给您一个索引错误。我希望我能解释一下。