我想返回' listofwords.txt'中的单词列表这是一些字符串' b'
的字谜def find_anagrams(a,b): ##a is the listofwords.txt
f=open('listofwords.txt', 'r')
for line in f:
word=line.strip()
wordsorted= ''.join(sorted(line))
for word in f:
if wordsorted == ''.join(sorted(word)):
print word
为什么它只是给我列表中第一个单词的字谜?
如果没有找到字谜,我该如何回复消息?
答案 0 :(得分:1)
第二个for
不正确。你正在将单词与''.join(sorted(word))进行比较,这是相同的。这应该更好:
def find_anagrams(a, b):
f = open(a, 'r')
for line in f:
word = line.strip()
wordsorted = ''.join(sorted(word))
if wordsorted == ''.join(sorted(b)):
print word
现在,请确保关闭文件(或者,更好的是,使用with
语句。)
编辑:,最好的办法是返回找到的字谜列表。然后你决定如何处理这些单词(打印它们,或者在列表为空时打印消息,或者你想要的任何内容)。所以它可能就像
def find_anagrams(a, b):
anagrams = []
with open(a, 'r') as infile:
for line in f:
word = line.strip()
wordsorted = ''.join(sorted(word))
if wordsorted == ''.join(sorted(b)):
anagrams.append(word)
return anagrams
然后你可以用它作为
anagrams = find_anagrams('words.txt', 'axolotl')
if len(anagrams) > 0:
for anagram in anagrams:
print anagram
else:
print "no anagrams found"
答案 1 :(得分:0)
您正在内循环中重用文件迭代器f
。一旦内循环结束,f
将耗尽,你立即退出外循环,所以你实际上并没有越过第一行。
如果你想在你的文件中的所有行上有两个独立的循环,一个解决方案(我确信这个问题可以更有效地解决)将是首先将行读入列表然后迭代清单:
with open('listofwords.txt') as f: # note: 'r' is the default mode
lines = f.readlines() # also: using `with` is good practice
for line in lines:
word = line.strip()
wordsorted = ''.join(sorted(line))
for word in lines:
if word == ''.join(sorted(word)):
print word
编辑:我的代码没有解决你说的问题(我首先误解了它,看到matiasg对正确代码的回答),但我的回答仍然解释了为什么你只得到第一个字谜文件中的单词。