我试图写一个函数,获得2个参数(实际上是2个字符串)并比较它们(忽略大小写的差异).例如:
cmr_func('House', 'HouSe') true cmr_func('Chair123', 'CHAIr123') true cmr_func('Mandy123', 'Mandy1234') False.
好吧,我尝试了一些东西,但它似乎非常愚蠢和糟糕的设计功能,无论如何不起作用.我想知道.我相信我需要使用一些内置str
功能,但我不确定它们如何帮助我.
我想过in
用一些循环来使用函数.但我不知道应该在什么样的对象上应用循环.
def str_comp(a,b): for i in a: i.lower() for i in b: i.lower() if a == b: print 'true' else: print 'false'
任何暗示或想法都受到欢迎.谢谢 :)
您可以将两个字符串转换为小写并比较这些结果:
def str_comp (a, b): return a.lower() == b.lower()
这背后的想法是规范化.基本上,您希望获取任何输入字符串,并将其规范化,使得所有其他被视为相等的字符串生成相同的规范化字符串.然后,您只需要比较规范化的字符串是否相等.
你可能会考虑其他操作剥离空白(使用str.strip()
),甚至更复杂的操作,比如转换变音至2个字母的组合(例如ä
到ae
).
您的解决方案的问题在于您似乎假设迭代字符串将允许您单独修改字符.但字符串是不可变的,因此您无法在不创建新字符串的情况下修改现有字符串.因此,当您使用字符串迭代时for i in a
,为每个字符获取许多单独的独立字符串,这些字符串与原始字符串无关a
.所以修改i
不会影响a
.
同样,只调用str.lower()
不会修改字符串,要么是(因为它是不可变的),那么相反,该函数将返回一个新字符串的所有字母转换为小写.
最后,您不应该返回字符串"True"或"False".Python有布尔常量True
和False
它应该用于这一点.如果您使用它们,则无需执行以下操作:
if condition: return True else: return False
由于condition
已经被解释为布尔值,您可以直接返回条件以获得相同的结果:
return condition