Python If == true 语句仅适用于读取行的最后一行



我的函数只说单词文件中的最后一个单词是一个字谜(第一个辅助函数)。但是文件中的每个单词都是我测试的单词的字谜,并且使用 main 函数之外的辅助函数独立返回 true。我不确定它是否与/n是字符串的一部分有关,然后它考虑到了这一点,但我尝试放入一个 if 语句,说如果它在那里,请删除它,这也不起作用。我还进行了测试,以确保它贯穿.txt文件中的每个单词,并且确实如此。

def is_anagram(string1, string2):
"""Returns True if the two strings are anagrams of eachother.
str, str -> bool"""
if sorted(string1)==sorted(string2):
return True
else:
return False

def find_anagrams(word):
final = []
content = open("small_list.txt")
content.close
while True:
line = content.readline()
print(line)
if is_anagram(word, line) == True:
print("bruh")
final.append(line)
elif line == '':
break
return final

这是预期的,基于您用于读取行的方法(file.readline)。从文档中:

f.readline()从文件中读取一行;换行符 (n) 留在字符串的末尾,仅在最后一个省略 如果文件不以换行符结尾,则为文件行。

您的line有一个尾随换行符,但word肯定没有。因此,最后,您需要更改的只是:

line = content.readline().rstrip()

好吧,这就是您需要更改以使其正常工作的全部内容。此外,我还建议使用with...as上下文管理器来处理文件 I/O。这是很好的做法,你会为此感谢自己。

with open("small_list.txt") as f:
for line in f:
if is_anagram(word, line.rstrip()):
... # do something here

最好使用for循环来迭代文件的行(而不是while,它更干净)。此外,当您使用上下文管理器时,无需显式调用f.close()(您当前没有这样做,您只是引用该方法而不实际调用它)。

在此

答案中结合@Christian Dean 的建议,您也可以简化您的字谜函数 - 调用sorted并在一行中返回结果:

def is_anagram(a, b):
return sorted(a) == sorted(b)

最新更新