字符串和 int 比较在 python2.7 中可以永远为 True 吗?



我知道python2.7允许不同类型之间的比较。因此,str 和 int 之间的相等比较将导致False。 根据 a 和 b 的值,比较是否为真?

a = input('we input some string value a')
if (a==int('some string b')):
print("yes")
else:
print("no, never!!")

上面的代码片段可以输出"是"吗?如果是,什么时候?

简短回答:是的,这可以产生yes作为答案(假设'some string b'是实际上可能包含合法int表示的字符串的占位符;如果它是确切的文字字符串,则当您调用int时,您只会得到一个ValueError)。

长答案

  1. intstr永远无法相提并论。intstr是不相关的不同类型,虽然存在少量的类型灵活性(不同的数字类型与大多数语言中的方式相当),即使在 Python 2 上(其中</>/<=/>=不会引发异常并使用荒谬的回退比较来提供不相关类型的任意排序),它是一种强类型语言,intstr不互操作诸如此类。

  2. 也就是说,Python 2 上的input糟糕;它eval从用户那里收到的文本,所以如果用户输入12345,它实际上会返回一个int。因此,如果用户输入一个合法的int文字,并且'some string b'本身就是int的法律表示,那么你已经提供了一个真实的int来比较两边,并且这段代码可以返回yes,不是因为strint相互比较相等,而是因为当输入看起来像intinput将返回ints(和floats表示float看起来的东西)。


旁注:在病理情况下,有人可能会在前一行上命名input和/或int内置,任何事情都可能发生。我不打算在那里详细介绍;它是一种编程语言,你可以用它做愚蠢的事情,但是告诉它做愚蠢的事情并想知道它是否会愚蠢并没有什么有趣的。

最新更新