Как упростить код, с помощью "for"

def calc_stat(listened):
    minutes1 = listened[-1]
    minutes2 = listened[-2]
    minutes3 = listened[-3]
    minutes4 = listened[-4]
    minutes5 = listened[-5]
    minutes6 = listened[-6]
    minutes7 = listened[-7]
    minutes8 = listened[-8]
    minutes9 = listened[-9]
    minutes10 = listened[-10]
    answer = (minutes1 + minutes2 + minutes3 + minutes4 + minutes5 + minutes6 + minutes7 + minutes8 + minutes9 + minutes10)
    second2 = (answer%60)
    return f'Вы прослушали {len(listened)} песен, общей продолжительностью {answer} минут {(second2)} секунд.'

    
print(calc_stat([193, 148, 210, 144, 174, 159, 163, 189, 230, 204]))

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

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

Вот вам простое решение:

def calc_stat(listened):
    answer = sum(listened[-10:])
    minutes, seconds = divmod(answer, 60)
    return f'Вы прослушали {len(listened)} песен, общей продолжительностью {minutes} минут {(seconds)} секунд.'

print(calc_stat([193, 148, 210, 144, 174, 159, 163, 189, 230, 204]))

Только там давайте время в секундах!


Посмотрите:

https://pythonworld.ru/osnovy/indeksy-i-srezy.html

https://pythonworld.ru/tipy-dannyx-v-python/spiski-list-funkcii-i-metody-spiskov.html

https://pythonworld.ru/osnovy/vstroennye-funkcii.html

→ Ссылка
Автор решения: Zhihar

можно так и без for:

calc_stat = lambda arr: f'Вы прослушали {len(arr)} песен, общей продолжительностью {sum(arr) // 60} минут {sum(arr)  % 60} секунд.'

но если вам надо использовать последние 10 позиций:

calc_stat = lambda arr: f'Вы прослушали {min(len(arr), 10)} песен, общей продолжительностью {sum(arr[-10:]) // 60} минут {sum(arr[-10:])  % 60} секунд.'
→ Ссылка
Автор решения: MarianD

Чтобы точно повторить ваш код, но вместо 10 подобных команд применить цикл for:

def calc_stat(listened):
    answer = 0
    for i in range(-1, -11, -1):
        answer += listened[i]
    second2 = (answer%60)
    return f'Вы прослушали {len(listened)} песен, общей продолжительностью {answer} минут {(second2)} секунд.'

    
print(calc_stat([193, 148, 210, 144, 174, 159, 163, 189, 230, 204]))
→ Ссылка
Автор решения: MarianD

Я вижу, что вы просто подсчитаете все элементы списка listened (честно говоря, не знаю, почему в обратном порядке).

Это лучше всего сделать применением стандартной функции sum() к вашему списку:

def calc_stat(listened):
    answer = sum(listened)
    second2 = (answer%60)
    return f'Вы прослушали {len(listened)} песен, ' \
           f'общей продолжительностью {answer} минут {(second2)} секунд.'

    
print(calc_stat([193, 148, 210, 144, 174, 159, 163, 189, 230, 204]))

Таким образом ваша функция будет работать в независимости от числа элементов в списке, например

>>> calc_stat([193, 148, 210])
'Вы прослушали 3 песен, общей продолжительностью 551 минут 11 секунд.'
→ Ссылка