我一直在努力解决一个程序,我相信它归结为这个声明:
while line != '\n' or '':
我正在使用readline()读取文件,我正在努力修复我的函数中的代码。 对于这个while循环,我希望它继续这些条件: - 行不等于'\ n' 要么 - 行不等于''
为什么这句话不代表上述情况?
答案 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 != '':