Совместить похожие элементы списка в одну строку
Решал задачу с codewars, вот что должна возвращать функция:
- accum("abcd") -> "A-Bb-Ccc-Dddd"
- accum("RqaEzty") -> "R-Qq-Aaa-Eeee-Zzzzz-Tttttt-Yyyyyyy"
- accum("cwAt") -> "C-Ww-Aaa-Tttt"
Вот мой код:
def accum(s):
lst = []
r = -1
b = []
for i in s:
r += 1
lst.append(i)
b += lst[r] * r
a = '-'.join(b)
return a.title()
print(accum("ZpglnRxqenU"))
Функция возвращает строку и делит каждый символ знаком "-", как мне совместить повторяющиеся элементы?
P.S не ругайте за возможный велосипед, я новичек)
Ответы (2 шт):
Автор решения: passant
→ Ссылка
Начнем с того, что ваша функция "глотает" первый символ. Во-вторых она все выводит большими буквами. И в третьих - зачем все так сложно?
def accum(s):
a=""
for i,elt in enumerate(s):
a = a+"-"+elt.upper()
for _ in range(i):
a = a+elt.lower()
return a[1:]
print(accum("ZpglnRxqenU"))
Результат:
Z-Pp-Ggg-Llll-Nnnnn-Rrrrrr-Xxxxxxx-Qqqqqqqq-Eeeeeeeee-Nnnnnnnnnn-Uuuuuuuuuuu
Другие контрольные прогоны:
print(accum("RqaEzty"))
R-Qq-Aaa-Eeee-Zzzzz-Tttttt-Yyyyyyy
print(accum("abcd"))
A-Bb-Ccc-Dddd
print(accum("cwAt"))
C-Ww-Aaa-Tttt
Небольшой костыль в последней строчке функции - return a[1:] - позволяет избежать множества лишних проверок в цикле.
Автор решения: Viki
→ Ссылка
def accum(s):
kol = 0
st = ""
for i in s:
kol += 1
if kol == 1:
st += i.upper()
else:
st += '-' + i.upper() + i.lower() * (kol - 1)
return st
Первое условие нужно для того, чтобы проверить: в первый ли раз строка вошла в цикл.