Python中While循环中的多个条件

时间:2014-09-28 01:04:25

标签: python python-2.7 while-loop

总noob问题,但我试图修改别人的代码。

目前的行是:

while 'Normal Stage' not in text[i]:

我需要它像:

while ('Normal Stage', 'Stage Error') not in text[i]:

基本上检查两个不同的词 这是目前在Python 2.7

我尝试的事情产生了不同的错误:

while 'Normal Stage' not in text[i] or 'Error Stage' not in text[i]:

while text[i] not in ('Normal Stage', 'Error Stage'): 

while ('Normal Stage', 'Error Stage') not in text[i]:

感谢任何帮助!

全循环代码:

i = 0
f = False
while ('Normal Error', 'Stage Error').isdisjoint(text[i]):
    if 'Findings' in text[i]:
        d['Findings'] = (text[i].split(':'))[1].strip()
        f = True
    elif f == True:
        d['Findings'] += "\n" + text[i].strip()
    i += 1

2 个答案:

答案 0 :(得分:1)

您需要and

while 'Normal' not in text[i] and 'Error' not in text[i]:

因为必须满足两个条件,而不是。在De Morgan's laws之后,您还可以将其表达为:

while not ('Normal' in text[i] or 'Error' in text[i]):

e.g。如果在'Normal'中找到'Error'text[i],则while循环应该结束。

由于这是使用字符串,您还可以使用regular expression

import re

while not re.match(r'(?:Normal|Error)', text[i]):

如果在'Normal'中找到'Error'text[i],则正则表达式匹配。

在你的循环中,你永远不会测试i是否小于项目总数;你也需要为它添加一个测试:

while i < len(text) and not ('Normal' in text[i] or 'Error' in text[i]):

答案 1 :(得分:1)

我认为这应该有效:

while ('Normal' not in text[i]) and ('Error' not in text[i]):

如果你想运行while循环,而这些单词都不在文本中,那么这应该有用。如果你想继续运行循环,如果其中一个单词不在文本中,你可以用和替换和。