我有一段时间没遇到这段代码了。代码应该做的是取一个输入的单词,从输入的单词中删除字母,然后制作一个单词的子集并将其保存到数组中以进行打印。我的问题是这段代码将保存可以从输入的单词创建的每个单词。 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)
我知道你们不是来为我做我的工作,但我真的很努力,不能亲自去找导师。如果你能告诉我什么是错的以及如何解决它,我将不胜感激。
答案 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)