Найти - Пользователи
Полная версия: Оптимизация кода.
Начало » Центр помощи » Оптимизация кода.
1
Rudey
Условие задачи: “Пользователь вводит англ. букву, вывести следующие три по алфавиту. Если алфавит закончился, то вывести циклично с начала алфавита, то есть если z, то a,b,c. Вывод только маленьких букв. Учесть, что пользователь может ввести заглавную”
Я решил эту задачу, можно ли сократить код? И сделать вывод только маленьких букв.
Вот код:
 alp = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
while True:
    user = str(input('Ведите английскую букву:'))
    if user.isalpha():
        break
if user == alp[0]:
    print('Следующие три буквы по алфавиту:',alp[1],alp[2],alp[3])
elif  user == alp[1]:
    print('Следующие три буквы по алфавиту:',alp[2],alp[3],alp[4])
elif user == alp[2]:
    print('Следующие три буквы по алфавиту:',alp[3],alp[4],alp[5])
elif user == alp[3]:
    print('Следующие три буквы по алфавиту:',alp[4],alp[5],alp[6])
elif user == alp[4]:
    print('Следующие три буквы по алфавиту:',alp[5],alp[6],alp[7])
elif user == alp[5]:
    print('Следующие три буквы по алфавиту:',alp[6],alp[7],alp[8])
elif user == alp[6]:
    print('Следующие три буквы по алфавиту:',alp[7],alp[8],alp[9])
elif user == alp[7]:
    print('Следующие три буквы по алфавиту:',alp[8],alp[9],alp[10])
elif user == alp[8]:
    print('Следующие три буквы по алфавиту:',alp[9],alp[10],alp[11])
elif user == alp[9]:
    print('Следующие три буквы по алфавиту:',alp[10],alp[11],alp[12])
elif user == alp[10]:
    print('Следующие три буквы по алфавиту:',alp[11],alp[12],alp[13])
elif user == alp[11]:
    print('Следующие три буквы по алфавиту:',alp[12],alp[13],alp[14])
elif user == alp[12]:
    print('Следующие три буквы по алфавиту:',alp[13],alp[14],alp[15])
elif user == alp[13]:
    print('Следующие три буквы по алфавиту:',alp[14],alp[15],alp[16])
elif user == alp[14]:
    print('Следующие три буквы по алфавиту:',alp[15],alp[16],alp[17])
elif user == alp[15]:
    print('Следующие три буквы по алфавиту:',alp[16],alp[17],alp[18])
elif user == alp[16]:
    print('Следующие три буквы по алфавиту:',alp[17],alp[18],alp[19])
elif user == alp[17]:
    print('Следующие три буквы по алфавиту:',alp[18],alp[19],alp[20])
elif user == alp[18]:
    print('Следующие три буквы по алфавиту:',alp[19],alp[20],alp[21])
elif user == alp[19]:
    print('Следующие три буквы по алфавиту:',alp[20],alp[21],alp[22])
elif user == alp[20]:
    print('Следующие три буквы по алфавиту:',alp[21],alp[22],alp[23])
elif user == alp[21]:
    print('Следующие три буквы по алфавиту:',alp[22],alp[23],alp[24])
elif user == alp[22]:
    print('Следующие три буквы по алфавиту:',alp[23],alp[24],alp[25])
elif user == alp[23]:
    print('Следующие три буквы по алфавиту:',alp[24],alp[25],alp[26])
elif user == alp[24]:
    print('Следующие три буквы по алфавиту:',alp[25],alp[0],alp[1])
elif user == alp[25]:
    print('Следующие три буквы по алфавиту:',alp[0],alp[1],alp[2])
FishHook
Rudey
Отличный код, работает - не трогай!
JOHN_16
Это эталонное решение из области “как не надо делать”. Прям как няшка.
1) английский алфавит уже есть в модуле string
2) воспользоваться переводом строки в нижний регистр методом lower()
3) Почитать что такое “циклический буфер” в общем. И его конкретная реализация в модуле itertools который называется circle. Что бы им воспользоваться нужно понимать концепцию итераторов. Да и еще знать что такое циклы.

Я вот достаточно в общем накинул. Одно из решений займет строчек 10 наверное кода, а может и меньше.
Попробуете сами что нибудь придумать на основании этой информации?
Rodegast
 >>> ns = ord('a')
>>> ks = ord('z')
>>> def nextSibvol(nomer):
...     return chr((nomer - ks) + ns if nomer+1 > ks else nomer+1)
>>> bukva = 'x'
>>> tuple(map(nextSibvol, range(ord(bukva), ord(bukva)+3)))
('y', 'z', 'a')
>>> bukva = 'z'
>>> tuple(map(nextSibvol, range(ord(bukva), ord(bukva)+3)))
('a', 'b', 'c')
>>> bukva = 'a'
>>> tuple(map(nextSibvol, range(ord(bukva), ord(bukva)+3)))
('b', 'c', 'd')
Rudey
JOHN_16
Смотрите, я загуглил модуль string, и нашел string.ascii_lowercase, но как мне с ним работать? там все буквы в одном элементе, то есть, я не могу получить доступ к каждой букве, когда я вношу его в массив там все одним элементом идет.
 import string
alp = [string.ascii_lowercase]
print(alp[0])
FishHook
Rudey
Какие учебники по питону вы уже прочитали? Какие материалы по программированию усвоили?

Я хочу напомнить, что тема форума - язык программирования питон, никто здесь не будет вас учить основам алгоритмирования и элементарной логике.
Rudey
FishHook
Я изучаю Python пол года, книги я не читал, т.к предпочитаю практику, а в книгах одна теория, я освоил синтаксис языка, циклы, типы данных, простейшие алгоритмы(по этому курсу-https://www.youtube.com/watch?v=KdZ4HF1SrFs ), поигрался с библиотекой PyGame, сейчас изучаю Django.
Еще решаю задачи на этом сайте - http://www.itmathrepetitor.ru/prog/zadachi-na-vychisleniya/.
Ну в принципе все. Меня не надо учить элементарной логике, но то что мне не понятно, я спрашиваю.
FishHook
Rudey
Вы, дорогой товарищ, очень веселый персонаж и вы бы удачно подошли на вакантное ныне место форумного клоуна, но если честно нет никого желания тратить на вас время и по существу вас и троллить то как-то западло. Давайте вы не будете больше приходить сюда? Учитесь дальше по ютубу, не в коем случае не изучайте теорию, не читайте книг, не учитесь логике, вам это не надо, потому что вы умственно отсталый и программист из вас не получится никогда ни при каких усилиях. Послушайте искреннего совета: освойте рабочую специальность, например сварщика. Вы будете всегда при деньгах, а голову напрягать вам не надо.

Тему я закрываю ввиду невероятной тупости контента.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB