【问题标题】:Python Anagrams recursionPython Anagrams 递归
【发布时间】:2013-12-12 17:13:46
【问题描述】:

一段时间以来,我一直在使用此代码时遇到问题。代码应该做的是获取输入的单词,从输入的单词中删除字母,然后制作单词的子集并将其保存到数组中以进行打印。我的问题是这段代码将保存可以从输入的单词创建的每个单词。 Ex input= spot output= top tops stop pots pot, ect.

如果它只打印 tops、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)

我知道你们不是来为我工作的,但我真的很努力,但无法亲自找到导师。如果您能告诉我出了什么问题以及如何解决,我将不胜感激。

【问题讨论】:

  • sortedwords.txttextlistanagram 方法中的用途是什么? “从输入的单词中删除一个字母”是什么意思?

标签: python anagram


【解决方案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)

【讨论】:

  • 您对 textList 的看法是正确的。导师并没有真正给我答案。只是指出我正确的方向。他们有很多人必须在短时间内帮助他们。我将查找 .append() 的文档,希望它有效。我试图解决这个问题 4 小时。我收到了不再定义已保存单词的错误。我应该如何定义它?
  • 我不会查找附加文档。您使用正确!我会在追加之前进行检查,并确保您追加的词不短于原始词的长度。
  • 我收到了不再定义 savewords 的错误。我应该如何定义它?
  • 我的示例有错字,已修复!
  • 是的,我想通了。我得到的字数仍然少于我的输入。即使使用 if 语句。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-02
  • 2019-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-18
  • 2019-01-17
相关资源
最近更新 更多