我是编程新手,我正在尝试编写一个接受文件名作为参数的函数。该函数应该打开文件,读取它,如果文件包含“?”,则返回 True 在文本文件的每一行中。输入文件可以具有一次或多次指定的字符。这是我到目前为止所拥有的:
def char_finder(filename):
inputFile = open(filename, "r")
for line in inputFile:
if '?' in line:
return True
else:
return False
inputFile.close
print(char_finder("inputfile.txt"))
Run Code Online (Sandbox Code Playgroud)
我花了几个小时寻找每一种可能的类似解决方案,但没有结果。
您面临的主要问题是您在第一次迭代中返回。这return将结束您的函数的执行。
如果您要检查是否所有行都包含“?”,那么检查应该只是在找不到“?”时返回。如果您设法耗尽迭代,则所有行都有“?” 你只需返回 True 即可。
def char_finder(filename):
with open(filename, "r") as inputFile:
for line in inputFile:
if '?' not in line:
return False
return True
Run Code Online (Sandbox Code Playgroud)
此外,请注意现在使用上下文管理器读取文件,这是一种更干净的方法。
最后,为了完全重构它,我们可以使用all函数,它将迭代每一行,并且一旦发现不匹配的条件就会短路。它几乎与上面显示的完全一样,但所有工作都为我们完成了:
def char_finder(filename):
with open(filename, "r") as inputFile:
return all('?' in line for line in inputFile)
Run Code Online (Sandbox Code Playgroud)