如何在while循环中使用布尔运算符OR

时间:2016-01-03 00:34:42

标签: python

我一直在努力解决一个程序,我相信它归结为这个声明:

while line != '\n' or '':

我正在使用readline()读取文件,我正在努力修复我的函数中的代码。 对于这个while循环,我希望它继续这些条件: - 行不等于'\ n' 要么 - 行不等于''

为什么这句话不代表上述情况?

3 个答案:

答案 0 :(得分:3)

你必须阅读

line != '\n' or ''

as

(line != '\n') or ''

空字符串在布尔上下文中求值为False,因此表达式等效于

line != '\n' or False

相当于

line != '\n'

您需要将@houcros建议的表达式编写为

line != '\n' or line != ''

或正如我所建议的那样,

line not in ('\n', '')

我认为更容易阅读。在您的特定情况下,对于这个特定的程序,一个简单的

while line.strip()

也足够了 - 如果line只包含空格(检查这是否是实际想要的那样),line.strip()将为'',如前所述,评估为False

答案 1 :(得分:2)

虽然你说你想要" line不等于'\n'line不等于''",我认为你真的希望" line不等于'\n'并且行不等于''"。否则,您的情况很简单(因为line不能都等于'\n'并且为空)。

因此,我相信您正在寻找的条件是:

while line != '\n' and line != '':

或等效,

while not (line == '\n' or line == ''):

答案 2 :(得分:0)

我认为应该是

while line != '\n' or line != '':