我写了一个小程序来检查两个单词是否是字谜。如果两个单词是字谜,它应该返回“true”,否则它应该返回“False”,但我没有得到正确的输出。请告诉我下面的程序中有什么错误。
def anagram(s1,s2):
for x in s1:
if (x in s2) and (s2.count(x)==s1.count(x)):
pass
return(True)
else:
return(False)
答案 0 :(得分:4)
你正在迭代一个单词,然后没有做任何事情(使用pass
,空语句)。然后你无条件地返回True
,没有机会返回False
。
相反,您可以简单地对这两个单词进行排序,然后查看它们是否最终相同:
def anagram(s1, s2):
return sorted(s1) == sorted(s2)
答案 1 :(得分:0)
请以更易读的方式格式化。但是,看起来你在循环中调用return True
,这意味着如果任何字符在每个字符串中出现的次数相同,那么你的函数将return True
试试这个:
def anagram(s1,s2):
for x in s1:
if ( x in s2 ) and (s2.count(x) == s1.count(x) ):
pass
else:
return False
for x in s2:
if ( x in s1 ) and (s1.count(x) == s2.count(x) ):
pass
else:
return False
return True
答案 2 :(得分:0)
您可以尝试以下方法:
>>> def anagram(str1,str2):
s1=str1.lower()
s2=str2.lower()
a=len(s1)
b=len(s2)
if a==b:
for c in s1:
if c in s2:
for s in s2:
if s in s1:
return True
else:
return False
else:
return False
答案 3 :(得分:-1)
你真的很亲密。你的缩进很糟糕,但这可能是由于SO中的文本格式化。
您的代码中的错误是您过早地返回True。你要做的就是通过所有的字母并检查存在和数量。您可以在下面找到您正在尝试执行的更正且稍微优化的版本。
def anagram(s1, s2):
if set(s1) == set(s2) and all(s2.count(x) == s1.count(x) for x in set(s1)):
return True
return False
但是@ Tigerhawk的解决方案再好不过了。