Одной из популярных стратегий в программировании являются «коллбэки» (callback). Это функция передаваемая в качестве параметра и выполняемая при соблюдении тех или иных условий.
Напишите функцию login, которая принимает имя пользователя и пароль, а также два «коллбэка», первый для реакции на успешную авторизацию, а второй — на ошибку.
Каждый из «коллбэков» в качестве параметра принимает имя пользователя.
Для проверки правильности пароля следуйте алгоритму:
- найдите сумму всех кодов символов имени пользователя;
- умножьте, полученное значение, на длину имени;
- переведите, переведите полученное значение в 16-ричную систему счисления.
Полученная в итоге строка, будет соответствовать перевёрнутому паролю.
Примечание
В решении не должно быть ничего, кроме выражения.
Пример
Ввод
def on_login(username):
print(f'Hello, {username}!')
def on_fail(username):
print(f'Nice try... You are not {username}!')
login('NoobMaster', '4C72', on_login, on_fail)Вывод
Hello, NoobMaster!Ввод
def hello(username):
print(f'Здравствуйте, {username}!')
def alert(username):
print(f'!!! Попытка взлома аккаунта {username} !!!')
print('Блокировка системы через...', 5, 4, 3, 2, 1, 'ТРЕВОГА!', sep='\n')
login('оченьМаленькийРозовыйПони', 'EDE5A', hello, alert)Вывод
!!! Попытка взлома аккаунта оченьМаленькийРозовыйПони !!!
Блокировка системы через...
5
4
3
2
1
ТРЕВОГА!Решение
Простая задача. Считаем сумму кодов всех символов с помощью функции ord(). Умножаем результат на длину имени пользователя. Переводим в шестнадцатиричную систему любым удобным способом (f-строки или функция hex) и сравниваем с паролем, приведенным к нижнему регистру. В случае совпадения вызываем функцию, которую мы получили в переменной success, в противном случае вызываем error().
Посмотреть код
Решение
def login(name, password, success, error):
total = sum(ord(ch) for ch in name)
total *= len(name)
hex_str = f'{total:x}'
if hex_str == password[::-1].lower():
success(name)
else:
error(name)