如果输入文件包含“?”,则返回True在每一行。否则返回false

时间:2017-07-23 02:31:05

标签: python

我是编程新手,我正在尝试编写一个接受文件名作为参数的函数。此函数应该打开文件,读取它并在文件包含“?”时返回True。在文本文件的每一行。 输入文件可以具有指定字符一次或多次。 这就是我到目前为止所做的:

+--------+
|count(1)|
+--------+
|5       |
+--------+

我花了几个小时寻找所有可能的类似解决方案,但没有结果。

2 个答案:

答案 0 :(得分:4)

您面临的主要问题是您在第一次迭代中返回。 return将结束您的函数执行。

如果您要检查所有行是否包含'?',那么检查应该只是一旦找不到'?'就会返回。如果你设法耗尽你的迭代,那么所有的行都有'?'你只需返回True。

def char_finder(filename):
    with open(filename, "r") as inputFile:
        for line in inputFile:
            if '?' not in line: 
                return False
    return True

此外,请注意文件的读取现在使用上下文管理器,这是一种更简洁的方法。

最后,为了完全重构,我们可以使用all函数,它将迭代每一行,并在找到不匹配条件后短路。它几乎就是上面所示的内容,但所有工作都是为我们完成的:

def char_finder(filename):
    with open(filename, "r") as inputFile:
        return all('?' in line for line in inputFile)

答案 1 :(得分:1)

您可以使用all()确保所有行都通过您的条件。例如:

def char_finder(filename, char):  # lets make it a bit more universal
    with open(filename, "r") as f:
        return all(char in line for line in f)

print(char_finder("inputfile.txt", "?"))