F. Странная игра

Позади уже первая пятёрка задач — вы отлично справляетесь!
Пора потренироваться с изменяемыми переменными и логикой принятия решений.

Петя и Ваня решили сыграть в игру «Перетягивание числа».
Правила простые:

  • Петя увеличивает общее число.
  • Ваня уменьшает его.
  • Если в итоге получается положительное число — побеждает Петя.
  • Если отрицательное — выигрывает Ваня.
  • Если сумма равна нулю — ничья.

Создайте две функции:

  • move(player, number) — принимает имя игрока и его число, обновляет общий счёт;
  • game_over() — возвращает результат: ‘Петя’, ‘Ваня’ или ‘Ничья’.

Общая сумма изначально равна 0.

Примечание

В решении не должно быть вызовов требуемых функций.

Пример

Ввод

move('Петя', 3)
move('Ваня', 4)
print(game_over())

Вывод

Ваня

Ввод

move('Петя', 3)
move('Ваня', 4)
move('Петя', 4)
move('Ваня', 3)
print(game_over())

Вывод

Ничья

Решение

Можно использовать два подхода – в первом случае мы накапливаем сумму очков каждого игрока отдельно и при подсчете просто смотрим на разницу этих чисел.

Второй подход основан на едином числе, и ход одного игрока число увеличивает, а дугого уменьшает.

Несмотря на то, что задача нас толкает к выводу, что правильный именно второй вариант, следует понимать, что иногда бывает так, что заложенное в постановке задачи интуитивное решение не всегда самое оптимальное и поэтому стоит задавать себе вопрос – “а можно ли решить задачу другим способом”? Первое решение может пригодиться, если, например, по какой-то причине нас волнует вопрос, а сколько очков было у каждого игрока к концу игры.

Решение

Посмотреть код
Python
petya_score = 0
vanya_score = 0


def move(player, number):
    global petya_score, vanya_score
    if player == 'Петя':
        petya_score += number
    elif player == 'Ваня':
        vanya_score += number


def game_over():
    if petya_score > vanya_score:
        return 'Петя'
    elif vanya_score > petya_score:
        return 'Ваня'
    else:
        return 'Ничья'

Решение

Python
total_score = 0

def move(player, number):
    global total_score
    if player == 'Петя':
        total_score += number
    elif player == 'Ваня':
        total_score -= number

def game_over():
    if total_score > 0:
        return 'Петя'
    elif total_score < 0:
        return 'Ваня'
    else:
        return 'Ничья'
Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии