2013-09-26 4 views
0

У меня есть следующий кодМножественные условия не работает

if "[FAILED]" in line and (("Result:" not in line) or ("Date:" not in line)): 
    print line 

Я читаю текстовый файл построчно. Я хочу искать где-нибудь в текстовом файле «[FAILED], но у него не может быть« Результат »или« Дата: »в той же строке.

В настоящее время мой код распечатывает строку, даже если она имеет результат или дату в это.

Любая помощь будет оценена.

Спасибо.

+1

Попытка нарисовать таблицу истинности для вашего expression..then вы найдете проблему. –

ответ

1

Вам нужно and между условиями в скобках.

булева логика сложно, и если часто помогает пройти через примеры. Рассмотрим эту строку:

FAILED blah blah Date: blah 

Таким образом, происходит через условия по одному:

  • Сбой в линии, так что давайте проверим следующее условие.
  • «Результат:» не находится в строке, так что часть истинна.
  • У нас есть OR, и у нас уже есть Истинный результат, поэтому нет необходимости даже проверять, находится ли «Дата:» в строке.
  • Таким образом, обе стороны И истинны, поэтому все это правда.

Очевидно, что то же самое произойдет, если строка содержит «Результат:», но не «Дата:».

Если бы вы и внутри скобок, то ему необходимо будет проверить, что и «Дата» не в линии и «Результат» не на линии, а не быть счастливым, если либо там не было ,

Другой способ выразить состояние, которое может быть яснее этого:

if "[FAILED]" in line and not (("Result:" in line) or ("Date:" in line)): 
+0

Я просто понял это тоже ...;) глупая ошибка. Спасибо за помощь. Я отвечу немного как ответ. – Jeremy

Смежные вопросы