Помогите с разобраться с тестом)

Напиши программу для принтера make_stickers, которая принимает число details_count и строку robot_part. Функция должна возвращать список строк в следующем формате: {robot_part} detail #{n}.

Примеры:

если make_stickers(3, 'Body') вернуть функция должна ['Body detail #1', 'Body detail #2', 'Body detail #3'].

Задачка по теме списки.

Hачало функции:

def make_stickers(details_count: int, robot_part: str) -> list:
    # write you code here

пока что все до чего додумался это

 res = '[]'
    for i in range(details_count):
        n = i + 1
        res = f"[{robot_part} detail #{n}]"
        return res
    if details_count == 0:
        return res 

но дает только 1 результат Получено: [Hand detail #1]


Ответы (2 шт):

Автор решения: gil9red

У вас ошибка в формате строки и возвращаете вы неправильно, нужно вернуть список

Исправил:

def make_stickers(details_count: int, robot_part: str) -> list:
    items = []
    for i in range(details_count):
        items.append(f"{robot_part} detail #{i+1}")
    return items

В одну строку:

    return [f"{robot_part} detail #{i+1}" for i in range(details_count)]
→ Ссылка
Автор решения: Zhihar
 res = '[]'
    for i in range(details_count):
        n = i + 1
        res = f"[{robot_part} detail #{n}]"
        return res
    if details_count == 0:
        return res 
  1. вы не пополняете список каждый цикл, а создаете новый, на пополнения надо использовать метод append

  2. у вас return в цикле стоит, а значит будет выполнен только 1 цикл, вместо всех

  3. ну и проверку на 0 можно не делать, ведь при details_count = 0 цикл и так не будет выполняться

  4. зачем в строке вы пишете []? В примере такого нет

Так что исходя из этого:

    res = []
    for i in range(details_count):
        n = i + 1
        res.append(f"{robot_part} detail #{n}")
    return res

Из оптимизаций - зачем вводить дополнительную переменную n, когда можно все сделать внутри f-строки:

    res = []
    for i in range(details_count):
        res.append(f"[{robot_part} detail #{i + 1}]")
    return res

Ну и вообще все можно сделать в 1 строчку

    res = [f"{robot_part} detail #{i + 1} for i in range(details_count)"]
→ Ссылка