我的字谜代码不包含多个字母

时间:2016-03-01 15:15:30

标签: python anagram

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

但如果交换了多个字母,则无效,但我试图解释这一点。

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”,则认为它是一个字谜。

4 个答案:

答案 0 :(得分:3)

即使不使用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)

答案 1 :(得分:0)

newcounter = int(0)

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

开始,它们将被忽略

告诉我它是否有效

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

答案 2 :(得分:0)

不使用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"

答案 3 :(得分:-2)

[编辑这只是我无法阅读的PALINDROMES]

这里有点简单:

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"