字谜不匹配(字符串到列表),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的主要内容,如果未能解决你的问题,请参考以下文章