Connect with us

Обучение

Заметки Python #6: Практические задачи

672

 

Сегодня мы порешаем несколько популярных задач, которые встречаются в курсах по Питону

Часто при изучении функций предлагается решить такую задачку:

Давайте опишем пару сущностей player и enemy через словарь, который будет иметь ключи и значения:
name — строка, полученная от пользователя,
health = 100,
damage = 50.

Поэкспериментируйте с значениями урона и жизней по желанию.
Теперь надо создать функцию attack(person1, person2).
Примечание: имена аргументов можете указать свои.

[adace-ad id=»3470″]

 

Описание ниже решение достаточно примитивное. Можно сделать лучше и интересней, но для начального уровня и для решения задачи — подойдет

Рассмотрим по шагам. Для начала нужно импортировать библиотеку random, чтобы использовать её в своей функции. Для начала напишем саму функцию атаки

[code]

def attack(person1, person2):         #функция атаки с двумя параметрами
nice_shot = random.randint(1, 7)    # рандом создает случайное целое число
if nice_shot >= 3:               #условие рандома. В зависимости от созданного числа выполняем…
person2[‘health’] -= person1[‘damage’] #у второго параметра отнимаем значение damage,
return person1, person2[‘health’]          #возвращаем результат
else:
person1[‘health’] -= person2[‘damage’]  #и наоборот
return person1[‘health’], person2

[/code]

 

Дальше пишем основной код, где будем её применять:

[code]

#первый словарь — наш робот

my_wanzer = {
‘health’: 100, ‘damage’: 30, ‘name’:input(‘Введите имя Ванзера:’)
}

#второй словарь — робот соперника
OCU = {
‘health’: 140, ‘damage’: 20, ‘name’:input(‘Введите противника Объединённого Океанического Союза:’)
}

turn = 1 # указываем переменную, в которой хранится периодичность хода

while my_wanzer[‘health’] <= 0 and OCU[‘health’] <= 0: # цикл: условие ниже выполняется, пока жизнь игрока или жизнь противника не равна или больше нуля
if turn % 2 != 0: # если ход четный, то ходит игрок (у нас он уже начинается с единицы, так что начинает игрок)
my_wanzer,OCU = attack(my_wanzer,OCU) #применяем функцию attack (указав два параметра — на my_wanzer применяется person1, на OCU применяется person2)
else:
OCU,my_wanzer = attack(OCU,my_wanzer) #иначе наоборот
turn += 1 # добавляем счетчик хода

else:  #если у кого-то кончились жизни, то
if my_wanzer[‘health’] > 0:  #сравниваем ключ health из словаря player с нулём.
print(f»{my_wanzer[‘name’]} побелил. Поздравляем») #выводим результат, взяв ключ name из словаря игрока
else:
print(f»{OCU[‘name’]} победил. Попробуй еще раз»)  #иначе победил противник

[/code] [adace-ad id=»3482″]

 

Наша задача выполнена. Но иногда её дополняют еще одним условием

Давайте усложним предыдущее задание. Измените сущности, добавив новый параметр — armor = 1.2 (величина брони персонажа)
Теперь надо добавить новую функцию, которая будет вычислять и возвращать полученный урон по формуле damage / armor
Следовательно, у вас должно быть 2 функции:
1. Наносит урон. Это улучшенная версия функции из задачи 3.
2. Вычисляет урон по отношению к броне.
Примечание. Функция номер 2 используется внутри функции номер 1 для вычисления урона и вычитания его из здоровья персонажа случае

Это немного меняет нашу функцию атаки. Так же, по условиям, задачи создадим новую функцию, которая считает урон с учетом нового параметра armor

[code]

def new_damage (damage, armor): # новая функция для вычисления урона, для вызова нужно передать два параметра
return damage / armor #функция возвращает результат деления параметра damage на armor

[/code]

 

Теперь из второго параметра функции attack мы вычитаем не конкретное значение (person1[‘damage’]), а результат функции new_damage, не забывая при этом указывать и её оба параметра (мы задавали её с двумя параметрами —  damage и amor)

[code]

def attack(person1, person2):
nice_shot = random.randint(1, 7)
if nice_shot >= 3:
person2[‘health’] -= new_damage(person1[‘damage’], person2[‘armor’])
return person1, person2[‘health’] else:
person1[‘health’] -= new_damage(person2[‘damage’], person1[‘armor’])
return person1[‘health’], person2

[/code]

 

Вот и всё. Самое сложное в этой задаче правильно сопоставить параметры функции и применить их к ключам словаря.

[adace-ad id=»3475″]

 

Нажмите что бы оставить комментарий

Ответить

Ваш адрес email не будет опубликован.

Лучшие сервисы стриминга музыки в 2019 году

Сервисы

Телевидение Wink Ростелеком: Samsung LG, Sony, Phillips, Android TV

Ростелеком

Ноутбуки Asus не видят жесткий диск. Автоматический вход в BIOS при старте

Гаджеты

LG WEB OS: приложения, обновления, настройка, проблемы со звуком

Гаджеты

Advertisement Яндекс.Метрика

Digital2.ru - Тренды, Профессии IT, WEB- разработка, Вакансии, Автоматизация, Цифровая экономика
Свободное копирование и распространение материалов с сайта Digital2.ru
разрешено только с указанием активной ссылки на Digital2 как на источник.
Copyright 2018 - 2020 © All rights reserved

OPGIO.COM

Connect