用于检查两个单词是否为字谜的程序

时间:2016-11-04 10:48:09

标签: python

我写了一个小程序来检查两个单词是否是字谜。如果两个单词是字谜,它应该返回“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)

4 个答案:

答案 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的解决方案再好不过了。