Позади уже первая пятёрка задач — вы отлично справляетесь!
Пора потренироваться с изменяемыми переменными и логикой принятия решений.
Петя и Ваня решили сыграть в игру «Перетягивание числа».
Правила простые:
- Петя увеличивает общее число.
- Ваня уменьшает его.
- Если в итоге получается положительное число — побеждает Петя.
- Если отрицательное — выигрывает Ваня.
- Если сумма равна нулю — ничья.
Создайте две функции:
- move(player, number) — принимает имя игрока и его число, обновляет общий счёт;
- game_over() — возвращает результат: ‘Петя’, ‘Ваня’ или ‘Ничья’.
Общая сумма изначально равна 0.
Примечание
В решении не должно быть вызовов требуемых функций.
Пример
Ввод
move('Петя', 3)
move('Ваня', 4)
print(game_over())
Вывод
Ваня
Ввод
move('Петя', 3)
move('Ваня', 4)
move('Петя', 4)
move('Ваня', 3)
print(game_over())
Вывод
Ничья
Решение
Можно использовать два подхода – в первом случае мы накапливаем сумму очков каждого игрока отдельно и при подсчете просто смотрим на разницу этих чисел.
Второй подход основан на едином числе, и ход одного игрока число увеличивает, а дугого уменьшает.
Несмотря на то, что задача нас толкает к выводу, что правильный именно второй вариант, следует понимать, что иногда бывает так, что заложенное в постановке задачи интуитивное решение не всегда самое оптимальное и поэтому стоит задавать себе вопрос – “а можно ли решить задачу другим способом”? Первое решение может пригодиться, если, например, по какой-то причине нас волнует вопрос, а сколько очков было у каждого игрока к концу игры.
Решение
Посмотреть код
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 'Ничья'
Решение
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 'Ничья'