Почему программа когда выполняется условие с точкой говорит да
string = input()
if '@' and '.' in string:
print('Да')
else:
print('Нет')
Вообщем делал задачку по курсу. Задание выглядит так
А где может понадобиться оператор in, кроме игры в слова?
Чаще всего при проверке корректности текста. Например, когда пользователь вводит на сайте свой адрес электронной почты.
Будем считать e-mail адрес корректным, если в нём есть символы «@» и «.». Напиши программу, проверяющую, что почта введена верно.
Так вот я не пойму почему программа когда выполняется условие с точкой программа говорит да? При and же должно выполнятся только при выполнении всех условий . _ .
Ответы (1 шт):
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:
