Anagram 不匹配(要列出的字符串),Python
Anagram not matching up (string to list), Python
我正在尝试制作一个脚本,我可以在其中输入任何单词的变位词,它会从字典中读取以查看是否存在匹配项
(ex. estt returns:= unjumble words: test)
如果有两个匹配,它会写
(ex. estt returns: 有多个匹配: test, sett(假设sett是一个词 lol)
我什至无法进行一场比赛,一直返回 "no match" 即使如果我查看根据字典制作的列表,我会看到这些词。
这是我到目前为止编写的代码
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
就好像 dic_list 中没有变位词一样。发生什么事了?
您在循环中进行一次检查后就中断了,请删除 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
现在,在两次更改之后,您的代码就可以工作了
我正在尝试制作一个脚本,我可以在其中输入任何单词的变位词,它会从字典中读取以查看是否存在匹配项 (ex. estt returns:= unjumble words: test)
如果有两个匹配,它会写 (ex. estt returns: 有多个匹配: test, sett(假设sett是一个词 lol)
我什至无法进行一场比赛,一直返回 "no match" 即使如果我查看根据字典制作的列表,我会看到这些词。
这是我到目前为止编写的代码
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
就好像 dic_list 中没有变位词一样。发生什么事了?
您在循环中进行一次检查后就中断了,请删除 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
现在,在两次更改之后,您的代码就可以工作了