Python If==true语句仅在readline的最后一行上工作
我的函数只是说单词文件中的最后一个单词是一个字谜(第一个助手函数)。但是文件中的每个单词都是我测试过的单词的一个字谜,并且在主函数之外使用helper函数独立返回true。我不确定它是否与Python If==true语句仅在readline的最后一行上工作,python,file,Python,File,我的函数只是说单词文件中的最后一个单词是一个字谜(第一个助手函数)。但是文件中的每个单词都是我测试过的单词的一个字谜,并且在主函数之外使用helper函数独立返回true。我不确定它是否与/n作为字符串的一部分有关,然后它解释了这一点,但我尝试输入一个if语句,如果它在那里,并且也不起作用,则删除它。我还做了测试,以确保它正在.txt文件中的每个单词中运行,并且是正确的 def is_anagram(string1, string2): """Returns True if the tw
/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
)保留在字符串的末尾,仅在最后一个字符串中省略
如果文件未以换行结尾,则为文件的第行
您的行
后面有一个换行符,但word肯定没有。因此,最终,您需要改变的是:
line = content.readline().rstrip()
好吧,这就是你需要改变的一切,让它工作。此外,我还建议使用和…as
上下文管理器来处理文件I/O。这是一种很好的做法,您会为此感谢自己
with open("small_list.txt") as f:
for line in f:
if is_anagram(word, line.rstrip()):
... # do something here
最好使用for
循环来迭代文件的行(而不是,因为更干净)。此外,当您使用上下文管理器时,不需要显式调用f.close()
(您当前没有这样做,您只是引用了该方法,而没有实际调用它)
在这个答案中加入@Christian Dean's,你也可以简化你的字谜函数-调用sorted
并在一行中返回结果:
def is_anagram(a, b):
return sorted(a) == sorted(b)
在阅读内容之前,您似乎正在关闭内容。内容的目的是什么。关闭
?如果blah:return True否则:return False
等同于简单的return blah
。在一般情况下,@detly的可能重复是,但是这里的废话已经是一个废话了……也只是给OP的一个提示:你的字谜函数可以是def is_字谜(a,b):返回排序(a)==排序(b)
。啊,说得对@cᴏʟᴅsᴘᴇᴇᴅ. 我忘了设置rids dups。更新。