Есть подходящие констаныты в модуле string import string
while True:
print("Логин должен быть - не меньше 5 и не больше 15,\n\
в начале содержать символ '@',\n\
в нём должны быть большие, мелкие латинские буквы и цифры")
l=input('логин=')
sl=set(l)
if all((l[0]=='@',\
50,\
len(sl & set(string.digits ))>0)):
break
print('успешно')
Конечно, можно оптимизировать код на Python, чтобы сделать его более компактным, но при этом сохранить хорошую читаемость. Вот несколько способов, как это можно сделать:
1. Используйте генераторы списков (list comprehensions) и генераторы (generators) вместо циклов for, чтобы сократить количество строк кода.
2. Используйте функциональное программирование и лямбда-функции для более компактного кода.
3. Избегайте избыточных условных операторов, используйте тернарные операторы или операторы сопоставления с образцом (pattern matching).
4. Разделяйте код на функции и классы для повторного использования кода и улучшения его структуры.
5. Используйте библиотеки и модули Python для выполнения часто встречающихся задач, чтобы избежать написания избыточного кода.
Эти методы помогут сделать ваш код более компактным, но при этом сохранить его читаемость и поддерживаемость.
Если без использования модулей, я бы так сделал. Чисто с точки зрения читаемости лично для меня. print("""Логин должен быть - не меньше 5 и не больше 15, в начале содержать символ '@',
в нём должны быть большие, мелкие латинские буквы и цифры\n""")
def check_login(login: str) -> bool:
if len(login) < 5 or len(login) > 15:
return False
if login[0] != "@" or not login[1:].isalnum():
return False
l = set(login[1:])
if l & upper_l == set() or l & lower_l == set() or l & nums == set():
return False
return True
while True:
if check_login(input("Введите логин:\n")):
print("Логин успешно сделан!")
break
print("Попробуйте ещё раз!")