Уведомления

Группа в Telegram: @pythonsu

#1 Март 1, 2020 11:00:55

pavel13079
Зарегистрирован: 2020-02-26
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Python цикл for

Узнав, что ДНК не является случайной строкой, только что поступившие в Институт биоинформатики студенты группы информатиков предложили использовать алгоритм сжатия, который сжимает повторяющиеся символы в строке.

Кодирование осуществляется следующим образом:
s = ‘aaaabbсaa’ преобразуется в ‘a4b2с1a2’, то есть группы одинаковых символов исходной строки заменяются на этот символ и количество его повторений в этой позиции строки.

Напишите программу, которая считывает строку, кодирует её предложенным алгоритмом и выводит закодированную последовательность на стандартный вывод. Кодирование должно учитывать регистр символов.

Вот мой код

 s=input()
l=len(s)-1
index=1
for i in range(0,l):
    if s[i]==s[i+1]:
        index+=1
    else:
        print(s[i]+str(index))
        index=1

Если мы вводим строку “GGWWPP”, то выводит G2W2. Подскажите почему последний символ выводит(P.S думаю потому что после него идет пустая строка)

Отредактировано pavel13079 (Март 1, 2020 18:22:18)

Офлайн

#2 Март 1, 2020 15:25:57

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Python цикл for

pavel13079
Если мы вводим строку “GGWWPP”, то выводит G2W2.
Ничего оно не выводит.

Код надо оборачивать в теги иначе съедаются отступы и код становится невалидным.



Офлайн

#3 Март 1, 2020 18:15:50

pavel13079
Зарегистрирован: 2020-02-26
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Python цикл for

doza_and
КАКИЕ ТЕГИ???

Офлайн

#4 Март 1, 2020 18:19:29

Romissevd
От: Счастье
Зарегистрирован: 2015-03-01
Сообщения: 533
Репутация: +  76  -
Профиль   Отправить e-mail  

Python цикл for

 [code python] тут код [/code]

Офлайн

#5 Март 1, 2020 18:22:47

pavel13079
Зарегистрирован: 2020-02-26
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Python цикл for

Romissevd
Спасибо)

Офлайн

#6 Март 1, 2020 18:33:31

Romissevd
От: Счастье
Зарегистрирован: 2015-03-01
Сообщения: 533
Репутация: +  76  -
Профиль   Отправить e-mail  

Python цикл for

Когда ты доходишь до последней буквы ты не заходишь в блок else, вот так будет работать

 s=input()
l=len(s)-1
index=1
for i in range(0,l):
    if s[i]==s[i+1]:
        index+=1
    else:
        print(s[i]+str(index))
        index=1
else:
    print(s[i]+str(index))

Отредактировано Romissevd (Март 1, 2020 18:33:51)

Офлайн

#7 Март 1, 2020 19:05:02

pavel13079
Зарегистрирован: 2020-02-26
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Python цикл for

Romissevd
Когда ты доходишь до последней буквы ты не заходишь в блок else, вот так будет работать
не работает (
Ввод
GGWWZ
Вывод
G2
W2
W1

можно в последнем else тспользовать i+1 но не знаю на скок это правильно

Отредактировано pavel13079 (Март 1, 2020 19:05:56)

Офлайн

#8 Март 1, 2020 19:14:07

Romissevd
От: Счастье
Зарегистрирован: 2015-03-01
Сообщения: 533
Репутация: +  76  -
Профиль   Отправить e-mail  

Python цикл for

 s=input()
l=len(s)-1
index=1
for i in range(0,l):
    if s[i]==s[i+1]:
        index+=1
    else:
        print(s[i]+str(index))
        index=1
else:
    print(s[-1]+str(index))

Офлайн

#9 Март 1, 2020 19:41:28

pavel13079
Зарегистрирован: 2020-02-26
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Python цикл for

Romissevd
а можно все таки поподробнее узнать Почему у нас первый else не срабатывает?)

Офлайн

#10 Март 1, 2020 21:35:38

Romissevd
От: Счастье
Зарегистрирован: 2015-03-01
Сообщения: 533
Репутация: +  76  -
Профиль   Отправить e-mail  

Python цикл for

потому как последний элемент ты никогда не проверяешь и на вывод не подаешь. Твой range сгенирит i от 0 до предпоследнего символа. Ты сравнишь предпоследний символ с последним если они равны прибавишь 1 и выйдешь из цикла, если нет вызовешь print переопределишь index и выйдешь из цикла.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version