如何检查两个单词是否是字谜python

Dan*_*nko 4 python sorting string

我正在处理简单的问题,检查两个字符串是否是字谜.我写了一个简单的代码,可以检查,两个字符串,如'abcd'和'dcba'是字谜,但我知道如何处理更复杂的字符串,如"Astronomer"和"Moon starter"

line1 = input('Enter the first word: ')
line2 = input('Enter the second word: ')

def deleteSpaces(s):
    s_new = s.replace(" ","")
    return s_new


def anagramSolution2(s1,s2):
    alist1 = list(deleteSpaces(s1))
    alist2 = list(deleteSpaces(s2))

    print(alist1)
    print(alist2)

    alist1.sort()
    alist2.sort()

    pos = 0
    matches = True

    while pos < len(deleteSpaces(s1)) and matches:
        if alist1[pos]==alist2[pos]:
            pos = pos + 1
        else:
            matches = False

    return matches
Run Code Online (Sandbox Code Playgroud)

首先我认为问题在于使用空格,但后来我明白,如果字符串的大小不同,我的算法就不起作用了.

在那种情况下我不知道该怎么做.

在这里,我找到了一个漂亮的解决方案,但它也不起作用

def anagrams(s1,s2):
    return [False, True][sum([ord(x) for x in s1]) == sum([ord(x) for x in s2])]
Run Code Online (Sandbox Code Playgroud)

如果我运行这个函数并在两个字符串上测试它,我会得到这样的输出

Examples:

First Word: apple
Second Word: pleap

output: True

First Word: Moon starter
Second Word: Astronomer

output: False //however it should should be True because this words are anagrams 
Run Code Online (Sandbox Code Playgroud)

mii*_*lek 8

你的算法没问题.你的问题是你不考虑大写和小写字母.改变两条线

alist1 = list(deleteSpaces(s1))
alist2 = list(deleteSpaces(s2))
Run Code Online (Sandbox Code Playgroud)

alist1 = list(deleteSpaces(s1).lower())
alist2 = list(deleteSpaces(s2).lower())
Run Code Online (Sandbox Code Playgroud)

将解决您的问题.作为替代方案,您可以简单地使用以下功能:

def anagrams(s1, s2):
    def sort(s):
        return sorted(s.replace(" ", "").lower())
    return sort(s1) == sort(s2)
Run Code Online (Sandbox Code Playgroud)