Python Anagrams递归

时间:2013-11-27 07:14:44

标签: python anagram

我有一段时间没遇到这段代码了。代码应该做的是取一个输入的单词,从输入的单词中删除字母,然后制作一个单词的子集并将其保存到数组中以进行打印。我的问题是这段代码将保存可以从输入的单词创建的每个单词。 Ex输入=点输出=顶部停止花盆,等等。

如果只打印上衣,花盆和停止,那就没问题了。我做了一些调试打印试图弄清楚程序实际上在做什么,但无济于事。我将留下我已经注释掉的代码,因为它可能有助于了解我当时的心态/目标。

我搜索过谷歌和这个网站,但它并没有真正找到我想要的答案。对不起,如果我是一个麻烦。

mylist = open('sortedwords.txt')
txt = mylist.read()
mylist = txt.split()
stuff = input('Type a word here: ')

def removeletters (word, Analysis):
    for char in range (len(Analysis)):
        if Analysis [char] in word:
             word = word.replace(Analysis[char],"",1)
    return word



def anagramSubset(word, textList):
    newWord = word
    for char in range(len(textList)):
        if textList[char] not in newWord: 
            return False
        else:
           newWord = newWord.replace(textList[char],"",1)
    return True

def anagram(word, textList):
    savedWords =[]
    for checkword in textList:  
        if len(word) == len(checkword) and anagramSubset(word, checkword):
            savedWords.append(checkword)
            print(checkword)

anagram(stuff, mylist)

我知道你们不是来为我做我的工作,但我真的很努力,不能亲自去找导师。如果你能告诉我什么是错的以及如何解决它,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

我查看了代码,并想知道递归的内容是什么?第一遍完成所有计算工作,然后递归添加一些额外的堆栈帧并改变输出的打印方式。我是否错误地假设textList是从文件中的单行拆分的有效单词列表?

当我使用特定的单词列表在本地运行时,这会产生相同的效果(从某种意义上说它找到字母为子集的单词)并且抖动较少:

def anagram(word, textList):
    savedWords = []
    for checkword in textList:
        if anagramSubset(word, checkword):
            savedWords.append(checkword)
    print(savedWords)

如果问题最终变成你得到字母太少的单词,你可以通过检查单词是原始单词的长度来修复你的问题:

if len(original_word) == len(checkword):
    savedWords.append(checkword)