2016-03-01 3 views
0

Я в настоящее время есть два, если заявления, которые выглядят для текста в строкеPython IF и операторы

if "element1" in htmlText: 
    print("Element 1 Is Present") 
    return 

if "element2" in htmlText: 
    print("Element 2 Is Present") 
    return 

Они оба работают замечательно, что я хотел бы сейчас сделать, это добавить, если заявление, которое проверяет, если element3 присутствует , но ни element1, либо element2 присутствуют

Как объединить эти три проверки вместе, есть ли оператор AND, как в PHP?

+0

Что-то вроде этого? [Как проверить одну переменную на несколько значений?] (Http://stackoverflow.com/q/15112125) –

+2

да. 'AND' .... – skndstry

+0

Существует * и *, конечно, (что буквально 'и'). Но если я получу вас правильно, вы хотите «это условие» и «не другие условия»? – dhke

ответ

4

return С вернется, когда матч был ранее найден, это достаточно, чтобы добавить этот код:

if "element3" in htmlText: 
    print("Element 3 Is Present") 
    return 
1

Try:

if "element1" in htmlText: 
    print("Element 1 Is Present") 
    return 

elif "element2" in htmlText: 
    print("Element 2 Is Present") 
    return 

elif "element3" in htmlText: 
    print("Element 3 Is Present") 
    return 
+0

Операции возврата не нужны с помощью elif –

1

Ofcourse в питоне есть и оператор.

if "element1" in htmlText and "element2" in htmlText: 
    do something 

ИЛИ вы можете придерживаться предыдущей логики

if "element1" in htmlText : 
    do...something 
elif "element2" in htmlText : 
    do something 

elif "element3" in htmlText : 
    do something 

else: 
    do other things 
0

Ни один из других ответов непосредственно адрес это заявление ...

Теперь я хотел бы сделать, это добавить if, который проверяет, присутствует ли элемент 3, но ни один элемент1 или элемент2 не присутствуют

который может быть записан в виде

if "element3" in htmlText and not ("element2" in htmlText or "element1" in htmlText): 
0

Раннее возвращение (проверка условия в правильном порядке, см даны ответы), как правило, предпочтительнее производительность мудрым.

Если вы не можете использовать раннее возвращение, но вместо этого требуете произвольных условий для элементов, помните, что у вас есть (список/dict) понимания.

Например

contains_matrix = [ 
    (element in htmlText) 
    for element in ("element1", "element2", "element3") 
] 

позволит получить список с True и False для каждого из элементов. условие вы упоминаете в вопросе может быть сформулирована как

not contains_matrix[0] and not contains_matrix[1] and contains_matrix[2] 

Позвольте мне повторить: тот же результат может быть достигнут путем проверки "element3" последнего и возвращение рано.

Словари еще лучше (и более вещий):

contains_dict = { 
    element: (element in htmlText) 
    for element in ("element1", "element2", "element3") 
} 

Оценка с:

(
    not contains_dict['element1'] 
    and not contains_dict['element2'] 
    and contains_dict['element3'] 
) 

или даже

[element for element, contained in contains_dict.items() if contained] 

, который дает вам все элементы, которые содержатся в HTML.

0

Я думаю, что это будет наиболее масштабируемое решение:

elementsToCheck = ['element1','element2','element3'] 
for eIdx, eChk in enumerate(htmlText): 
    if eChk in htmlText: 
     print "Element {0} Is Present".format(eIdx) 
     return 

ответить на исходный вопрос (хотя, как уже отмечалось, до того, как не нужно, чтобы проверить против других 2-х элементов):

if 'element3' in htmlText and not ('element1' in htmlText or 'element2' in htmlText): 
    print "Element 3 Is Present" 
    return 
Смежные вопросы