Не нужно делать много циклов. Если будет больше 3-х бросков, ваш код не будет их обрабатывать, можете проверить.
Я бы делал так
def calculate_score(lst):
total_score = 0
has_bonus = True
for radius in lst:
if radius >=5 and radius <=10:
total_score += mid_points
elif radius < 5:
total_score += max_points
if radius > 5:
has_bonus = False
if has_bonus:
total_score += bonus_points
return total_score
Либо проверку на бонус можно сделать через функцию max(lst), она вернет самое больше число в массиве, соответственно, если максимально число больше 5 - бонуса не будет
def calculate_score(lst):
total_score = 0
for radius in lst:
if radius >=5 and radius <=10:
total_score += mid_points
elif radius < 5:
total_score += max_points
if max(lst) < 5:
total_score += bonus_points
return total_score