Почему программа когда выполняется условие с точкой говорит да

string = input()
if '@' and '.' in string:
    print('Да')
else:
    print('Нет')

Вообщем делал задачку по курсу. Задание выглядит так

А где может понадобиться оператор in, кроме игры в слова?

Чаще всего при проверке корректности текста. Например, когда пользователь вводит на сайте свой адрес электронной почты.

Будем считать e-mail адрес корректным, если в нём есть символы «@» и «.». Напиши программу, проверяющую, что почта введена верно.

Так вот я не пойму почему программа когда выполняется условие с точкой программа говорит да? При and же должно выполнятся только при выполнении всех условий . _ .


Ответы (1 шт):

Автор решения: MarianD
if '@' and '.' in string:

значит

if ('@') and ('.' in string):

потому что оператор and имеет очень низкий приоритет.

Теперь, первый операнд, т.е. '@' вычисляется как True, потому что каждая непустая строка так вычисляется (и только пустая, т.е. '', вычисляется как False.)

Из документации в предыдущей ссылке:

По умолчанию объект считается истинным.
... большинство встроенных объектов, считающихся ложными:

  • константы, определяемые как ложные: None и False.
  • ноль любого числового типа: 0, 0.0, 0j, Decimal(0), Fraction(0, 1)
  • пустые последовательности и коллекции: '', (), [], {}, set(), range(0)

Но когда первый операнд операции and вычисляется как True, то результат будет равен второму операнду.

Из документации в предыдущей ссылке:

x and y      если x false, тогда x, иначе y

Значит, ваша команда

if '@' and '.' in string:

имеет тот же эффект как команда

if '.' in string:

игнорирующая присутствие или отсутствие символа @, что вы очевидно не хотели.


Вы хотели

if '@' in string and '.' in string:
→ Ссылка