Списки Python и для циклов. Как мне связаться с циклом for, который я собираюсь использовать для последующих элементов, а не только для первого? - PullRequest
0 голосов
/ 29 августа 2018

Я новичок в Python, и я работаю над функцией, которую я ожидаю передать строку типа abcd, и она выдает что-то вроде A-Bb-Ccc-Dddd.

Я создал следующее.

`

def mumbler(s):
    chars = list(s)
    mumbled = []
    result = []
    for char in chars:
        caps = char.upper()
        num = chars.index(char)
        low = char.lower()
        mumbled.append( caps+ low*num)
    for i in mumbled:
        result.append(i+'-')
        result = ''.join(result)
    return result[:-1]

`

Это работает для большинства случаев. Однако когда я передаю строку вроде Abcda. Не удается вернуть ожидаемый результат, в этом случае, A-Bb-Ccc-Dddd-Aaaaa. Как мне решить эту проблему? Спасибо, что нашли время, чтобы ответить на это.

Ответы [ 3 ]

0 голосов
/ 29 августа 2018

Перейти на простой 1-строчный - next() на count для поддержания времени повтора и title() для заголовка:

from itertools import count

s = 'Abcda'
i = count(1)

print('-'.join([(x * next(i)).title() for x in s]))
# A-Bb-Ccc-Dddd-Aaaaa
0 голосов
/ 29 августа 2018

Если вы хотите, чтобы ваш собственный код работал, вам просто нужно преобразовать список result в строку вне вашего второго цикла for:

def mumbler(s):
    chars = list(s)
    mumbled = []
    result = []
    for char in chars:
        caps = char.upper()
        num = chars.index(char)
        low = char.lower()
        mumbled.append( caps+ low*num)
    for i in mumbled:
        result.append(i+'-')
    result = ''.join(result)
    return result[:-1]

mumbler('Abcda')
'A-Bb-Ccc-Dddd-Aaaaa'
0 голосов
/ 29 августа 2018

Вы можете сделать это намного проще, используя списки и enumerate

>>> s = 'abcd'
>>> '-'.join([c.upper() + c.lower()*i for i,c in enumerate(s)])
'A-Bb-Ccc-Dddd'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...