Форум сайта python.su
Начинаю изучай Python и случайно столкнулся с такой ситуацией. Пользователь вводит букву, далее его эта буква ищется в строке. Случайно пользователь ввел пустую строку и… она нашлась в строке!
>>>"" in "строка" True
>>>"" in ("строка1") True
>>>"" in ("строка1", "строка2") False
Офлайн
Частью строки является символ, часть набора является его элемент.
Вот тут вот набор не создается
"" in ("строка1")
"" in "строка1"
"" in ("строка1",)
Офлайн
BilboДа, потому что, например, строка “ab” содержит три пустые строки: перед a, между a и b, после b.
Не могу понять почему такая рекация? Так и должно быть?
BilboЭто поиск в кортеже. Операция in применима почти ко всем встроенным типам. В строке операция in ищет строку, а в кортеже операция in ищет элемент.
Но>>>"" in ("строка1", "строка2") False
>>> s = '' >>> if s and s in 'abc': ... True ... else: ... False ... False >>> >>> s = 'b' >>> if s and s in 'abc': ... True ... else: ... False ... True >>>
Отредактировано py.user.next (Март 24, 2017 03:18:08)
Офлайн
С кортежами понял, спасибо. А вот со словами, как последовательностями символов все равно не разобрался.
Например, так:
s = "привет" if "" in s: print ("True")
"" != "п" "" != "р" "" != "и" ... "" != "т"
s.find("")
0
s.find("п")
0
Отредактировано Bilbo (Март 24, 2017 06:32:25)
Офлайн
что по-вашему должны возвращать
'' in ''
'aaa'.split('a')
Офлайн
Bilboпустота п пустота р пустота и пустота в пустота е пустота т пустотаs = "привет"
BilboЭта пустая строка там есть, но в неё не входит ни один символ.и получил ответs.find("")
0
>>> ''[0] Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: string index out of range >>>
Офлайн
Shaman, py.user.next, спасибо. Мой уровень пока не высок, разобраться даже в ответах сложно. Пример со сплитом мне показался очень показательным. Как написал py.user.next, до и после каждого символа - пустота. Спасибо.
Офлайн
Bilbo
Мне кажется логичным, что если “” in “привет” дает положительный результат, то я должен иметь возможность сослаться (получить индекс) на элемента “” в строке “привет”.
>>> "привет"[0:0] == '' True >>> "привет"[1:1] == '' True ...
p = '' s = "привет" for i,n in enumerate(s): if s[i:i + len(p)] == p: print(True) break
s[0:0+0]=='', s[1:1+0]=='', s[2:2+0]=='' ....
Отредактировано wallet (Март 24, 2017 09:10:31)
Офлайн