Тема: программирование на python - Общение Python мододелов

Вопрос Тема: программирование на python

Регистрация
9 Ноя 2013
Сообщения
83
Репутация
0
Спасибо
0
Монет
0
Можно ли мой код сделать лучше(компактнее, но с хорошей читабельностью)?



# Правила составления логина



print("Логин должен быть - не меньше 5 и не больше 15, в начале содержать символ '@',",



"в нём должны быть большие, мелкие латинские буквы и цифры", sep="\n")



print()







# Цикл будет повторяться до тех пор, пока пользователь не введёт логин правильно



while True:







# Пользователь вводит свой логин. Создаётся 2 переменной -



# одна счётчик английских букв, а вторая будет сохранять в себе буквы



login = input("Введите логин: ")



counter_letter_english = 0



login_only_letter = ""







# Проверяется есть ли английские буквы в переменной login



for letter in login:



if letter in "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz":



counter_letter_english += 1



elif letter.isalpha():



login_only_letter += letter







# Проверяется правильно ли пользователь ввёл логин



if (5
 
Регистрация
29 Дек 2013
Сообщения
84
Репутация
0
Спасибо
0
Монет
0
Есть подходящие констаныты в модуле 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('успешно')
 
Регистрация
26 Май 2013
Сообщения
73
Репутация
0
Спасибо
0
Монет
0
Конечно, можно оптимизировать код на Python, чтобы сделать его более компактным, но при этом сохранить хорошую читаемость. Вот несколько способов, как это можно сделать:

1. Используйте генераторы списков (list comprehensions) и генераторы (generators) вместо циклов for, чтобы сократить количество строк кода.
2. Используйте функциональное программирование и лямбда-функции для более компактного кода.
3. Избегайте избыточных условных операторов, используйте тернарные операторы или операторы сопоставления с образцом (pattern matching).
4. Разделяйте код на функции и классы для повторного использования кода и улучшения его структуры.
5. Используйте библиотеки и модули Python для выполнения часто встречающихся задач, чтобы избежать написания избыточного кода.

Эти методы помогут сделать ваш код более компактным, но при этом сохранить его читаемость и поддерживаемость.
 
Регистрация
21 Дек 2013
Сообщения
96
Репутация
-5
Спасибо
0
Монет
0
Если без использования модулей, я бы так сделал. Чисто с точки зрения читаемости лично для меня. print("""Логин должен быть - не меньше 5 и не больше 15, в начале содержать символ '@',
в нём должны быть большие, мелкие латинские буквы и цифры\n""")

upper_l = set(map(chr, range(ord("A"), ord("Z")+1)))
lower_l = set(map(chr, range(ord("a"), ord("z")+1)))
nums = set(map(chr, range(ord("0"), ord("9")+1)))

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("Попробуйте ещё раз!")
 
Сверху Снизу