一段时间以来,我一直在使用这段代码。代码应该做的是获取一个输入的单词,从输入的单词中删除字母,然后生成一个单词的子集,并将其保存到一个数组中进行打印。我的问题是,这段代码将保存可以从输入的单词创建的每个单词。Ex input= spot output= top top stop pots pot等。
如果只打印stop、pots和stop就可以了。我已经做了一些调试打印,试图弄清楚程序实际在做什么,但都没有用。我会留下我已经注释掉的代码,因为这可能有助于了解我当时的心态/我想要什么。
我已经搜索了谷歌和这个网站,但它并没有真正的答案,我正在寻找。如果我是的话很抱歉给你带来麻烦
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)我知道你们不是来帮我做工作的,但是我真的试过了,但是找不到一个导师。如果您能让我知道哪里出了问题,以及如何修复它,我将不胜感激。
发布于 2013-11-27 15:36:27
我看了看代码,想知道递归添加了什么?第一遍完成了所有的计算工作,然后递归添加了一些额外的堆栈帧,并改变了输出的打印方式。我是否错误地假设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)https://stackoverflow.com/questions/20236082
复制相似问题