繁体   English   中英

python程序检查两个词是否是字谜

[英]python Program to check whether two words are anagrams

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

您正在遍历一个单词,然后什么也不做(使用pass ,空语句)。 然后,您无条件返回True ,没有机会返回False

相反,您可以简单地对两个单词进行排序,然后查看它们是否最终相同:

def anagram(s1, s2):
    return sorted(s1) == sorted(s2)

请以更具可读性的方式设置此格式。 但是,看起来您正在循环内调用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

您可以尝试以下方法:

>>> 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

你真的很亲近 您的缩进不好,但这可能是由于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的解决方案还是更好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM