我的字谜代码不考虑多个字母

My anagram code doesn't account for multiple letters

所以我的代码得到两个单词,并检查一个是否是另一个的变位词。

然而,如果交换了多个字母,则不起作用,尽管我试图解释这一点。

storedword = input("Enter your primary word \t")
global word 
word = list(storedword)


word3 = input("Enter anagram word \t")
word3lowercase = word3.lower()
anaw = list(word3lowercase)


counter = int(0)
letterchecker = int(0)
listlength = len(word)
newcounter = int(0)
if len(anaw) != len(word):
    print ("not anagram")

if len(anaw) == len(word):
    while counter < listlength and newcounter < listlength:
        tempcount = 0
        if anaw[counter] == word[newcounter]:
            temp = word[newcounter]
            word[newcounter] = word[tempcount]
            word[tempcount]=temp
            letterchecker +=1
            counter +=1
            tempcount +=1
            newcounter = int(0)

        else:
            newcounter +=1

if counter == len(word):
    print ("anagram")
else:
    print ("not anagram")

我认为它在 if len(anaw) 部分之后出了什么问题,例如,如果主要单词是 "hannah",而次要单词是 "hannnn",它认为它是一个变位词。

这里可以实现更简单的逻辑,即使不使用 sorted 等。假设您有一个函数 anagram:

def anagram(word1, word2):
    if len(word1) != len(word2):
        return False

    def char_count(word):
        char_count = {}
        for c in word:
            char_count[c] = char_count.get(c, 0) + 1
        return char_count

    cr1 = char_count(word1)
    cr2 = char_count(word2)
    return cr1 == cr2

您可以使用以下方法进行测试:

>>> print(anagram("anagram", "aanragm"))
True
>>> print(anagram("anagram", "aangtfragm"))
False

对于未来的读者,一个超级简单的 pythonic 解决方案可能是使用 Counter:

from collections import Counter
>>> Counter(word1) == Counter(word2)

或使用sorted:

>>> sorted(word1) == sorted(word2)
newcounter = int(0)

这是导致问题的行(在 while 循环中)。 因此,您会再次从头开始检查单词。 我想你希望它是 newcounter=letterchecker。 由于已经使用的字符被放在 word 的前面,如果您以 letterchecker

开头,它们将被忽略

告诉我它是否有效

编辑:检查给出的示例,似乎有效。

[编辑这只是为了我无法阅读的回文]

这里有一些更简单的东西:

storedword = input("Enter your primary word \t")
word3 = input("Enter anagram word \t")
if storedword == word3[::-1]:
    print "Is Anagram"
else:
    print "Is not anagram"

如果不使用 sort,您可以使用以下方法。它从第二个单词的字符数组中删除一个字母。如果没有剩余字母,则这些单词只是变位词(并且单词的开头长度相同且长度大于零):

word1="hannah"
word2="nahpan"

chars1= list(word1)
chars2= list(word2)

if len(chars1)==len(chars2) and len(chars1)>0:
    for char in chars1:
        if char not in chars2:
           break
        chars2.remove(char)                   


if len(chars2)==0:
    print "Both words are anagrams"
else:
    print "Words are not anagrams"