Проект кодирования длины выполнения не выводится - PullRequest
0 голосов
/ 10 ноября 2018
def expand(nums):
    finalword = ''
    position = 0
    wordlength = len(nums)
    keypoint = ''
    while position <= wordlength:
        keypoint = nums[position] * int(nums[position + 1])
        finalword = finalword + keypoint
        keypoint = 0
        position + 2
    return finalword

По какой-то причине эта функция не возвращает значение. Я пытаюсь получить целые числа после символа для умножения указанного символа. Я добавляю 2 к позиции из-за наличия символа на каждом втором индексе

print(expand("d3o5z2y1")) #should output: dddooooozzy

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 10 ноября 2018

Вы никогда не обновляете position.

position + 2 просто выполняет вычисление без сохранения значения этого вычисления в любом месте.Вы, вероятно, хотели position = position + 2.

Кроме того, у вас нет единой комбинации с position <= wordlength, потому что последний индекс nums равен len(nums) - 1.Измените его на position < wordlength.

С этими изменениями

print(expand("d3o5z2y1"))

производит

'dddooooozzy'

Однако ваш способ извлечения символов и количества немного неуклюж,Я предлагаю использовать grouper рецепт из itertools документов.

>>> s = "d3o5z2y1"
>>> list(zip(*[iter(s)]*2))
>>> [('d', '3'), ('o', '5'), ('z', '2'), ('y', '1')]
>>>
>>> ''.join(char*int(count) for char, count in zip(*[iter(s)]*2))
>>> 'dddooooozzy'
0 голосов
/ 10 ноября 2018

Ваша линия:

position + 2

не меняет значение position. Вы вычисляете position + 2, а затем выбрасываете это значение, вы должны присвоить результат позиции, поэтому:

def expand(nums):
    finalword = ''
    position = 0
    wordlength = len(nums)
    keypoint = ''
    while <b>position < wordlength</b>:
        keypoint = nums[position] * int(nums[position + 1])
        finalword = finalword + keypoint
        keypoint = 0
        <b>position = position + 2</b>  # or more compact: position += 2
    return finalword

связанную проверку следует заменить на <, так как если позиция равна длине, у нас уже есть слишком большой индекс.

Много строк также не нужно, мы можем удалить много строк и сохранить:

def expand(nums):
    finalword = ''
    wordlength = len(nums)
    <b>for position in range(0, len(nums), 2)</b>:
        keypoint = nums[position] * int(nums[position + 1])
        finalword += keypoint
    return finalword

При этом вы можете улучшить вышесказанное, используя iter(..) ator и zip:

def expand(nums):
    inums = iter(nums)
    return ''.join(c * int(n) for c, n in zip(inums, inums))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...