Python: использование AND и OR с методом .FIND () - PullRequest
1 голос
/ 24 октября 2011

представьте, что я ввожу следующий код в интерпретатор:

var1 = 'zuuzuu'

теперь предположим, что я напечатал:

var1.find('a')

интерпретатор возвращает -1.что я понимаю, потому что подстрока не была найдена.но, пожалуйста, помогите мне понять это:

var1.find('a' or 'z') #case 1

возвращает -1

, но

var1.find('a' and 'z') #case 2

возвращает 0

Согласно логике в моей головеинтерпретатор должен вернуть -1 для случая 2, потому что подстроки 'a' и 'z' НЕ находятся в строке.В то время как в случае 1, 0 должен быть возвращен, так как 'z' является подстрокой.

спасибо

Ответы [ 2 ]

7 голосов
/ 24 октября 2011

Выражение 'a' or 'z' всегда дает 'a'. Выражение 'a' and 'z' всегда дает 'z'. Это не своего рода DSL для создания запросов в контейнеры, это простое логическое выражение (и вызывается find с его результатом). Если вы хотите сказать «есть ли« a »или« z »в строке», вам нужно сделать

var1.find('a') != -1 or var.find('z') != -1

А для второго (и 'a', и 'z' в строке):

var1.find('a') != -1 and var.find('z') != -1
1 голос
/ 24 октября 2011

Это потому, что метод find на самом деле не поддерживает or и and, он поддерживает только запросы для строки.

Итак, что на самом деле происходит?Что ж, получается, что or и and - это операторы, которые можно выполнять со строками.

'a' and 'z' --> 'z'
'a' or 'z'  --> 'a'

Итак, у вас это есть, вы просто ищете 'a' и 'z' как обычно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...