Программа должна считывать символы и в конце выдавать их кол-во по порядку
В общем вопрос такой. На ввод должно подавать например aaabbccbba. А выводится a3b2c2b2a1. Не пойму как зациклить проверку по символам, чтобы только в конце показывал результат. Щас погибну уже.
DNA = input().lower() # ввод и изменение регистра
DNA_a = 0
DNA_b = 0
DNA_c = 0
for i in DNA: # проверка всех символов по очереди
if i == 'a':
DNA_a += 1
if i != 'a':
print('a',end='')
print(DNA_a)
if i == 'b':
DNA_b += 1
print('b',end='')
print(DNA_b)
if i == 'c':
DNA_c += 1
print('c',end='')
print(DNA_c)
Ответы (5 шт):
Автор решения: Alexshev92
→ Ссылка
Можно сделать через itertools.groupby
from itertools import groupby
string = "aaabbccbba"
groups = groupby(string)
result = [(letter, sum(1 for _ in group)) for letter, group in groups]
print("".join("{}{}".format(letter, count) for letter, count in result))
#a3b2c2b2a1
Автор решения: AndreyM
→ Ссылка
Используйте цикл while, если хотите обойтись без создания новой строки, а результат дописывать к текущей.
input_str = "aaabbccbba"
counter = 1
i = 1
while i != len(input_str):
if input_str[i] != input_str[i - 1]: # Если два соседних символа разные
input_str = input_str[:i] + str(counter) + input_str[i:] # Расширяем строку вставляя значения счетчика
counter = 1 # Обнуляем счетчик
i += 2 # Увеличиваем на 2, чтобы перепрыгнуть на след символ, и через вставленное значение
else:
counter += 1
i += 1
print(input_str+str(counter))
Автор решения: strawdog
→ Ссылка
from itertools import groupby
s = "aaabbccbba"
res = "".join([f"{x}{len(list(y))}" for x, y in groupby(s)])
print(res)
a3b2c2b2a1
Автор решения: Артем
→ Ссылка
DNA = "aaabbccb"
out = {}
strin = ""
for i in range(len(DNA)):
if DNA[i] not in out:
out[DNA[i]] = 1
if i != 0:
strin += str(DNA[i-1]) + str(out[DNA[i-1]])
del out[DNA[i - 1]]
else:
out[DNA[i]] += 1
if i == len(DNA) - 1:
strin += str(DNA[i]) + str(out[DNA[i]])
print(strin)
Автор решения: CrazyElf
→ Ссылка
Ещё один вариант чисто по приколу. С одной стороны это решение "в лоб", а с другой оно должно быть вполне понятное:
s = 'aaabbccbba'
s += chr(0)
ch,cnt = s[0],1
for prev,curr in zip(s, s[1:]):
if prev == curr:
cnt += 1
else:
print(f'{ch}{cnt}', end='')
ch,cnt = curr,1
print()