Как упростить код, с помощью "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
Автор решения: 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 секунд.'