如果有两个变量a和b,它们可以是整数、浮点数或字符串。
如果它们相等(在字符串的情况下忽略大小写),我希望返回
尽可能使用Pythonic方式实现。
如果它们相等(在字符串的情况下忽略大小写),我希望返回
True
。尽可能使用Pythonic方式实现。
这是我能想到的最具有Python风格的代码。与其请求许可,不如先行动后寻求原谅:
>>> def iequal(a, b):
... try:
... return a.upper() == b.upper()
... except AttributeError:
... return a == b
...
>>>
>>> iequal(2, 2)
True
>>> iequal(4, 2)
False
>>> iequal("joe", "Joe")
True
>>> iequal("joe", "Joel")
False
try/except
时,我立刻按下了 (+1)。 - mgilsoniequal(1.0,1)
将返回False
,这似乎有点奇怪... - mgilson__str__
的对象或者故意重写为返回异常的__str__
无法转换为字符串。其次,@mgilson,是的,一个比较两个字符串而不考虑大小写的方法不应该对两个具有不同字符串表示的东西(除了大小写)评估为True
。这是功能对称的基本问题。第三,由于调用upper()
并不强制将对象转换为字符串,因此您可能会有两个字符串表示相等的对象,但此函数将返回False
。 - Silas Ray__str__
方法: class Foo(): pass; x = Foo(); print str(x)
的输出结果为 <__main__.Foo object at 0x108dcec90>
。 - jterracedef equal(a, b):
try:
return a.lower() == b.lower()
except AttributeError:
return a == b
catch
语句,你要用except
。但最好不要使用裸的except
语句。 - mgilson>>> def equals_ignore_case(a,b):
... return a.upper() == b.upper()
...
>>> equals_ignore_case("hello","Hello")
True