2014-01-26 3 views
2

Im читает txt-файл и подсчитывает, сколько раз в нем указаны конкретные слова. Например, я хочу знать, сколько раз присутствуют «ABC» и «DEF». Моя первая идея:Могу ли я использовать логический оператор «или» в сочетании со строками?

for line in open: 
    if "ABC" or "DEF" in line: 
     x=x+1 

результат: x = 33 ... но это неправильно. Использование:

for line in open: 
    if "ABC" in line: 
     x=x+1 
    if "DEF" in line: 
     x=x+1 

результат: 8! и это правильно.

Почему первый пример не работает?

+0

ouh yeah, похоже, похоже на вопрос ... – Hubschr

ответ

2
"ABC" or "DEF" in line 

оценивается как

("ABC") or ("DEF" in line) 

Поскольку "ABC" является truthy значение, то, если условие будет выполнено всегда. Вы можете решить эту проблему, как этот

if "ABC" in line or "DEF" in line: 

, который будет оцениваться как

("ABC" in line) or ("DEF" in line) 

Таким образом, если линия была либо ABC или DEF, то условие будет выполнено.

Если количество достоверных слов для проверки велико, было бы неудобно писать длительное условие if. Вместо этого, вы должны написать, что условие, с any функции, как этот

valid_words = ["ABC", "DEF"] 
... 
if any(word in line for word in valid_words): 

Предложения:

  1. Избегайте использования open в качестве имени переменной, так как она будет затенять встроенную open функцию

  2. Когда вы имеете дело с файлами, убедитесь, что вы close the opened files properly or prefer to use with statement.

+0

Или распространите реляционный оператор. –

+0

@ IgnacioVazquez-Abrams Спасибо :) Я включил это в ответ – thefourtheye

+0

thx много! Я не использую «open» в качестве имени переменной в своей программе, я просто использовал ее здесь, но thx для рекомендаций. И да, в моей программе Im также закрываю свой файл: D Я буду использовать любую функцию. большое спасибо: D – Hubschr

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