Вопрос задан 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['Здоровье'])
Ответы на вопрос
Отвечает Иванова Ника.
Для нескольких дуэлей удобнее вынести бой в отдельную функцию. После каждого поединка сохраняем результат в словарь, проигравшему восстанавливаем здоровье, а победителю добавляем бонус к максимальному запасу здоровья для следующего боя.
Pythonimport 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)
Важный момент: в исходном варианте оба персонажа атакуют за один проход цикла. Поэтому персонаж мог нанести ответный удар даже после того, как его здоровье уже стало меньше или равно нулю. В функции выше после первой атаки добавлена проверка:
Pythonif player2['Здоровье'] <= 0:
break
Благодаря этому проигравший не совершает «последнюю атаку» после поражения.
Словарь results после выполнения будет иметь примерно такой вид:
Python{
'Дуэль 1': {
'Победитель': 'Боб',
'Количество ходов': 12,
'Здоровье победителя в конце боя': 15,
'Максимальное здоровье победителя после награды': 110
},
'Дуэль 2': {
'Победитель': 'Мери',
'Количество ходов': 13,
'Здоровье победителя в конце боя': 8,
'Максимальное здоровье победителя после награды': 110
}
}
За каждую победу персонаж получает +10 к полю Макс_здоровье, поэтому в следующем бою начинает с большим количеством здоровья.
Похожие вопросы
Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
Предметы
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili

