Задать вопрос
@mikhal_ivanych

Правильно ли решена задача по подсчету очков при игре в дартс?

Всем привет.
Решил задачу. Кому не сложно - отпишите плиз, есть ли ошибки / недостатки.
Спасибо.

"""
Написать функцию для подсчета очков при игре в дартс.
Правила начисления очков:
Радиус больше 10 - 0 очков
Радиус между 5 и 10 включительно - 5 очков
Радиус менее 5 - 10 очков
Если все радиусы менее 5, начисляются дополнительные 100 очков.
"""

min_points = 0
mid_points = 5
max_points = 10
bonus_points = 100


def calculate_score(lst):
    total_score = 0

    for i in lst:
        if i < 5:
            total_score += max_points
        else:
            for j in lst:
                if 5 <= j <= 10:
                    total_score += mid_points
                else:
                    total_score += min_points
            return total_score
    return total_score + bonus_points


print(calculate_score([1, 5, 11]))
print(calculate_score([15, 20, 30]))
print(calculate_score([1, 2, 3, 4]))
  • Вопрос задан
  • 535 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
SoreMix
@SoreMix Куратор тега Python
yellow
Не нужно делать много циклов. Если будет больше 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
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@mikhal_ivanych Автор вопроса
SoreMix да, похоже вариант с max(lst) смотрится получше и цикл один, а не два. Плюс вы убрал вариант с 0 ...
Спасибо за комментарий.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы