字谜不匹配(字符串到列表),Python

Posted

技术标签:

【中文标题】字谜不匹配(字符串到列表),Python【英文标题】:Anagram not matching up (string to list), Python 【发布时间】:2015-05-11 06:06:37 【问题描述】:

我正在尝试制作一个脚本,我可以在其中输入任何单词的字谜,它会从字典中读取以查看是否匹配 (例如 estt 返回:= unjumble words: test)

如果有两个匹配,它会写 (例如 estt 返回:有多个匹配项:test、sett(假设 sett 是一个单词 lol)

我什至连一场比赛都打不开,一直返回“不匹配”,即使我查看从字典制作的列表,我也能看到单词。

这是我目前写的代码

def anagrams(s):
    if s =="":
        return [s]
    else:
        ans = []
        for w in anagrams(s[1:]):
            for pos in range(len(w)+1):
                ans.append(w[:pos]+s[0]+w[pos:])
            return ans

dic_list = []
def dictionary(filename):
    openfile = open(filename,"r")
    read_file = openfile.read()
    lowercase = read_file.lower()
    split_words = lowercase.split()
    for words in split_words:
        dic_list.append(words)

def main():
    dictionary("words.txt")
    anagramsinput = anagrams(input("unjumble words here: "))
    for anagram in anagramsinput:
        if anagram in dic_list:
            print(anagram)
        else:
            print("no match")
            break

好像 anagram 不在 dic_list 中。发生了什么事?

【问题讨论】:

我们可以看看words.txt 我把它做得很小。 docs.google.com/file/d/… 您是否确认 dic_list 包含正确的值? 你用什么输入词测试了? anagramsinput 应该是什么?我不认为你的 anagrams 函数能达到你的预期 【参考方案1】:

您在循环中进行一次检查后中断,删除 break 以获取所有字谜:

def main():
    dictionary("words.txt")
    anagramsinput = anagrams(input("unjumble words here: "))
    for anagram in anagramsinput:
        if anagram in dic_list: # don't break, loop over every possibility
            print(anagram) 

如果您不想打印任何匹配项,只需将其删除,如果您想要所有可能的字母排列,请使用itertools.permutations

from itertools import permutations
def anagrams(s):
  return ("".join(p) for p in permutations(s))

输出:

unjumble words here: onaacir
aaronic

在你的 anagrams 函数中,你在完成外循环之前返回,因此缺少许多排列:

def anagrams(s):
    if s =="":
        return [s]
    else:
        ans = []
        for w in anagrams(s[1:]):
            for pos in range(len(w)+1):
                ans.append(w[:pos]+s[0]+w[pos:])
        return ans # only return when both loops are done

现在,在两次更改之后,您的代码就可以工作了

【讨论】:

如果我放一个可以打乱5次的单词,我不希望它打印5次不匹配。如果我不放 break 我仍然会得到“不匹配” @Archie。无论如何,你都会在第一次迭代时打破循环 谢谢,也许我可以把结果列在第一位。然后再做一个不匹配的声明。我仍然无法让代码工作,它什么也得不到 我添加了使用排列函数运行它的输出 因此,如果在插入排列代码时它可以工作,那意味着问题出在我的 anagrams(): 函数中,对吗?我正在尝试修复它,而不是跳到不同的方法。抱歉,我还是个初学者。

以上是关于字谜不匹配(字符串到列表),Python的主要内容,如果未能解决你的问题,请参考以下文章

检查字符串是不是是字谜

将字符串与字符串列表进行比较以在 Python 中查找字谜

Python中使用列表的字谜

大型字谜搜索未读取到集合 Python 的末尾

在给定的字符串列表中查找字符串的所有字谜

做字谜组的更好方法