Вопрос задан 11.07.2026 в 07:19. Предмет Информатика. Спрашивает Пряничников Александр.

ЗАДАНИЕ:
Устройте несколько дуэлей подряд и выведите результаты (их можно хранить в словаре).
В награду за победу персонажу можно увеличивать очки здоровья.
ИЗНАЧАЛЬНЫЙ КОД:
import time, random
q=random.randint(1,10)
w=random.randint(1,10)
player1 = {'Имя' : "Боб", 'Здоровье' : 100, 'Атака' : q}
player2 = {'Имя' : "Мери", 'Здоровье' : 100, 'Атака' : w}

while player1['Здоровье'] > 0 and player2['Здоровье'] > 0:
player2['Здоровье'] -= player1['Атака']
print(player1['Имя'], ' атакует ', player2['Имя'])
time.sleep(1)
player1['Здоровье'] -= player2['Атака']
print(player2['Имя'], ' атакует ', player1['Имя'])
time.sleep(1)
print('Боб :', player1['Здоровье'], 'Мери :', player2['Здоровье'])

Перейти к ответам

Ответы на вопрос

Отвечает Иванова Ника.

Для нескольких дуэлей удобнее вынести бой в отдельную функцию. После каждого поединка сохраняем результат в словарь, проигравшему восстанавливаем здоровье, а победителю добавляем бонус к максимальному запасу здоровья для следующего боя.

Python
import time
import random

# Создаём персонажей
player1 = {
'Имя': 'Боб',
'Здоровье': 100,
'Макс_здоровье': 100,
'Атака': random.randint(1, 10)
}

player2 = {
'Имя': 'Мери',
'Здоровье': 100,
'Макс_здоровье': 100,
'Атака': random.randint(1, 10)
}

results = {} # Здесь будут результаты всех дуэлей


def duel(player1, player2, reward=10):
"""Проводит один бой и возвращает информацию о нём."""

turns = 0

while player1['Здоровье'] > 0 and player2['Здоровье'] > 0:
turns += 1

# Боб атакует Мери
player2['Здоровье'] -= player1['Атака']
print(f"{player1['Имя']} атакует {player2['Имя']} "
f"на {player1['Атака']} ед.")
time.sleep(0.5)

# Если Мери проиграла, она уже не должна атаковать в ответ
if player2['Здоровье'] <= 0:
break

# Мери атакует Боба
player1['Здоровье'] -= player2['Атака']
print(f"{player2['Имя']} атакует {player1['Имя']} "
f"на {player2['Атака']} ед.")
time.sleep(0.5)

print(f"Здоровье: Боб — {max(player1['Здоровье'], 0)}, "
f"Мери — {max(player2['Здоровье'], 0)}\n")

# Определяем победителя
if player1['Здоровье'] > 0:
winner = player1
loser = player2
else:
winner = player2
loser = player1

# Победитель получает бонус к максимальному здоровью
winner['Макс_здоровье'] += reward

print(f"Победитель: {winner['Имя']}")
print(f"Награда: +{reward} к максимальному здоровью")
print("-" * 40)

return {
'Победитель': winner['Имя'],
'Количество ходов': turns,
'Здоровье победителя в конце боя': max(winner['Здоровье'], 0),
'Максимальное здоровье победителя после награды':
winner['Макс_здоровье']
}


# Проводим несколько дуэлей
number_of_duels = 3

for duel_number in range(1, number_of_duels + 1):
print(f"\nДУЭЛЬ № {duel_number}")
print(f"Атака Боба: {player1['Атака']}")
print(f"Атака Мери: {player2['Атака']}\n")

# Перед новой дуэлью восстанавливаем здоровье
player1['Здоровье'] = player1['Макс_здоровье']
player2['Здоровье'] = player2['Макс_здоровье']

# Сохраняем результат
results[f'Дуэль {duel_number}'] = duel(player1, player2)

print("\nРЕЗУЛЬТАТЫ ВСЕХ ДУЭЛЕЙ:")
for duel_name, result in results.items():
print(duel_name, "—", result)

Важный момент: в исходном варианте оба персонажа атакуют за один проход цикла. Поэтому персонаж мог нанести ответный удар даже после того, как его здоровье уже стало меньше или равно нулю. В функции выше после первой атаки добавлена проверка:

Python
if player2['Здоровье'] <= 0:
break

Благодаря этому проигравший не совершает «последнюю атаку» после поражения.

Словарь results после выполнения будет иметь примерно такой вид:

Python
{
'Дуэль 1': {
'Победитель': 'Боб',
'Количество ходов': 12,
'Здоровье победителя в конце боя': 15,
'Максимальное здоровье победителя после награды': 110
},
'Дуэль 2': {
'Победитель': 'Мери',
'Количество ходов': 13,
'Здоровье победителя в конце боя': 8,
'Максимальное здоровье победителя после награды': 110
}
}

За каждую победу персонаж получает +10 к полю Макс_здоровье, поэтому в следующем бою начинает с большим количеством здоровья.

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

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

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