Подтвердить что ты не робот

Как проверить, равна ли переменная одной строке или другой строке?

if var is 'stringone' or 'stringtwo':
    dosomething()

Это не работает! У меня есть переменная, и мне нужно, чтобы она что-то делала, когда она является одним из значений, но она не будет вводить оператор if. В Java if (var == "stringone" || "stringtwo") работает. Как написать это в Python?

4b9b3361

Ответ 1

Это не делает то, что вы ожидаете:

if var is 'stringone' or 'stringtwo':
    dosomething()

Это то же самое, что:

if (var is 'stringone') or 'stringtwo':
    dosomething()

Это всегда верно, поскольку 'stringtwo считается "истинным" значением.

Существует две альтернативы:

if var in ('stringone', 'stringtwo'):
    dosomething()

Или вы можете написать отдельные тесты равенства,

if var == 'stringone' or var == 'stringtwo':
    dosomething()

Не используйте is, потому что is сравнивает идентификатор объекта. Иногда вам может избежать неприятностей, потому что Python ставит много строк, так же, как вы можете уйти с ним в Java, потому что Java ставит много строк. Но не используйте is, если вы действительно не хотите идентичность объекта.

>>> 'a' + 'b' == 'ab'
True
>>> 'a' + 'b' is 'abc'[:2]
False # but could be True
>>> 'a' + 'b' is 'ab'
True  # but could be False

Ответ 2

if var == 'stringone' or var == 'stringtwo':
    do_something()

или более pythonic,

if var in ['string one', 'string two']:
    do_something()

Ответ 3

if var == 'stringone' or var == 'stringtwo':
    dosomething()

'is' используется для проверки ссылки на две ссылки на один и тот же объект. Он сравнивает адрес памяти. По-видимому, "stringone" и "var" - разные объекты, они содержат только одну строку, но это два разных экземпляра класса "str". Поэтому у них, конечно, есть два разных адреса памяти, а "is" вернет False.

Ответ 4

Две отдельные проверки. Кроме того, используйте == вместо is для проверки равенства, а не идентификатора.

 if var=='stringone' or var=='stringtwo':
     dosomething()

Ответ 5

for a in soup("p",{'id':'pagination'})[0]("a",{'href': True}):
        if createunicode(a.text) in ['<','<']:
            links.append(a.attrMap['href'])
        else:
            continue

Это работает для меня.