Вы находитесь на странице: 1из 49

Программирование

на Python
Урок 5. Функции
Урок 5. Функции

Немного повторим прошлый урок


Урок 5. Функции

Что будет на уроке сегодня?


Знакомство с функциями Влияние на результат функций

Использование функций, чтобы избежать Возврат из функций


повторений кода

Параметры функций Игра “камень-ножницы-бумага”


Знакомство с функциями
Урок 5. Функции

Определение функции

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

Для определения функций в языке Python используется ключевое слово def


(сокращение от английского слова definition — определение), после которого
указывается имя новой функции. Например создадим функцию hello_func

def hello_func():
Урок 5. Функции.

Структура функции
Имя функции
Можно указывать любое,
но следуя правилам
создания имен. Правила
Слово def такие же как и для
Двоеточие
переменных
Сообщает Сообщает о том, что все
программе, что команды, находящиеся с
сейчас будет отступом и ниже будут
функция относиться к этой
def hello_func(p1, p2): функции

Параметры функции.
Не являются
обязательными. Может
быть любое количество.

Используются внутри и
могут влиять на конечный
результат работы
функции
Урок 5. Функции

Пример функции

def hello_func(): # Функция без параметров


print('Привет, как дела?')
print('Мы рады вас видеть!')
Урок 5. Функции

Вызов функции

def hello_func(): # Функция без параметров


print('Привет, как дела?')
print('Мы рады вас видеть!')

hello_func() # Вызываем функцию

Обратите внимание, что вызов функции осуществляется отдельно и может быть


использован абсолютно в любой части программы! Результат запуска ниже:
Урок 5. Функции

Множественный вызов
Функцию можно вызывать сколько угодно раз. Каждый раз при вызове будет
выполняться та часть кода, которая была написана внутри функции:

def hello_func(): # Функция


print('Привет, как дела?')
print('Мы рады вас видеть!')

hello_func() # Вызываем
функцию
hello_func() # Вызываем
функцию
hello_func() # Вызываем
функцию
hello_func() # Вызываем
функцию
Урок 5. Функции

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

import turtle # Подключаем модуль с черепашкой

def draw_rosette(): # Создаем функцию для рисования


розетки
t = turtle.Pen() # Создаем перо
for i in range(6): # Цикл для рисования
t.circle(50)
t.left(60)

draw_rosette() # Вызываем
функцию
Подключение модуля черепашки
input('Для быловведите
продолжения выполнено до создания
любой символ') функции, а не внутри
# Ставим неё!
на паузу
Также предложение ввести любой символ было выполнено после вызова функции, потому что
нам нужно приостановить работу программы только после того, как функция отработает!
Урок 5. Функции

Множественный вызов
Давайте попробуем несколько раз вызывать функцию draw_rosette()

draw_rosette() # Вызываем функцию 1-ый раз


draw_rosette() # Вызываем функцию 2-ой раз
draw_rosette() # Вызываем функцию 3-ий раз
draw_rosette() # Вызываем функцию 4-ый раз

Как вы думаете, какой результат получится? Попробуйте запустить и проверить!


Урок 5. Функции

Изменяем функцию с черепашкой


Чтобы черепашка рисовала розетку каждый раз в разном месте, нам необходимо каждый раз
перемещать её в случайное место!

def draw_rosette(): # Создаем функцию для рисования


t = turtle.Pen() # Создаем перо
x = random.randint(-300, 300) # Случайное значение для координаты Х
y = random.randint(-300, 300) # Случайное значение для координаты Y
t.setpos(x, y) # Устанавливаем черепашку по координатам
for i in range(6): # Цикл для рисования
t.circle(50)
t.left(60)
Урок 5. Функции

Разбираем что получилось


Здесь мы подключили уже знакомый нам модуль random, с помощью которого можно
создавать случайные числа в указанном диапазоне.

Дальше, внутри функции мы создаем два случайных числа в диапазоне от -300 до 300 и
сохраняем их в переменных X и Y. Если вам тяжело представить данный диапазон, то
посмотрите на рисунок:

И сразу следующим шагом пользуемся новой для нас функцией черепашки, с помощью
которой черепашка перемещается в указанное место на холсте: t.setpos(x, y)
Урок 5. Функции

Любуемся на результат
Попробуйте несколько раз запускать программу, и вы увидите, что каждый раз результат
получается разным! А всё, потому, что в Х и Y каждый раз записываются разные цифры!

Дальше, внутри функции мы создаем два случайных числа в диапазоне от -300 до 300 и
сохраняем их в переменных X и Y. Если вам тяжело представить данный диапазон, то
посмотрите на рисунок:
Параметры функции
Урок 5. Функции

Что за параметры?

Параметры функции - это переменные, в которые мы можем записать любые


значения снаружи функции, а потом использовать их внутри функции. Параметры
указываются в скобках справа от имени функции, через запятую:

def hello_func(name, surname): # name, surname - параметры функции


Урок 5. Функции

Вежливая программа:

Добавим параметры нашей функции, которая здоровается и используем их, чтобы


поздороваться с тем человеком, который будет записан в этих параметрах:

def hello_func(name, surname):


print(f'Привет, {name} {surname}! Как дела?')
print('Мы рады вас видеть!')
Урок 5. Функции

Вежливая программа:

А теперь просто вызовем нашу функцию. Но в скобках мы теперь должны указать


эти самые параметры, иначе Python нас не поймет!

hello_func('Артем', 'Петров')

Попробуйте вызвать данную функцию, записав каждый раз разные имена! И


проверьте: будет ли ваша функция понимать, с кем надо здороваться? :)
Урок 5. Функции

Переменные, как параметры

Для большего удобства, мы можем сначала создать переменные, сохранить в них


значения, а потом уже использовать эти переменные как параметры для функции.
Например наша вежливая программа может выглядеть так:

def hello_func(name, surname):


print(f'Привет, {name} {surname}! Как дела?')
print('Мы рады вас видеть!')

name = 'Артем'
surname = 'Петров'
hello_func(name, surname)
Урок 5. Функции

Параметры для черепашки:


Параметры можно использовать в любых функциях. Очень часто их применяют для
изменения результата. Давайте изменим функцию рисования так, чтобы мы могли
передавать цвет рисования в качестве параметра: (коды цветов можно посмотреть здесь)
import turtle # Подключаем модуль с черепашкой
import random # Подключаем модуль случайностей

def draw_rosette(my_color): # Функция с параметром my_color


t = turtle.Pen() # Создаем перо
t.color(my_color) # Устанавливаем цвет из параметра
x = random.randint(-300, 300) # Случайное значение для координаты Х
y = random.randint(-300, 300) # Случайное значение для координаты Y
t.setpos(x, y) # Устанавливаем черепашку по координатам
for i in range(6): # Цикл для рисования
t.circle(50)
t.left(60)

draw_rosette('#FF0000') # Рисуем красным


draw_rosette('#008000') # Рисуем зеленым
draw_rosette('#0000FF') # Рисуем синим
draw_rosette('#800080') # Рисуем фиолетовым

input('Для продолжения введите любой символ') # Ставим на паузу


Урок 5. Функции

Цветные розетки
Результат уже интереснее:
Перерыв 10 мин
Возвращаем значения.
Оператор return
Урок 5. Функции.

Оператор return

С помощью аргументов мы можем передавать информацию в функцию, но что если нам


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

Чтобы передать информацию из функции обратно в программу, мы будем использовать


оператор return.

return
Урок 5. Функции.

Возвращаем!
Для преобразования в миллиметры мы должны умножить количество пикселей на 0.31 —
примерный размер одного пикселя в мониторе диагональю 27 дюймов.

Чтобы вернуть результат вычисления обратно в программу, мы воспользуемся оператором


return. Так как функция возвращает значение, или результат, значение, указанное после
ключевого слова return, будет возвращено в программу. Давайте определим нашу
функцию:

def pixel_to_mm(count):
width = count * 0.31
return width
Урок 5. Функции.

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

result = pixel_to_mm(100)

А увидеть результат мы сможем, только если выведем на экран значение той самой
переменной, в которую сохраняли результат работы функции:

print(result)

Вот так: 100 пикселей - это всего лишь 31 миллиметр или почти 3 сантиметра!
Урок 5. Функции.

Сколько в вас шариков?


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

Вес одного шарика: 2,7 грамма = 0,0027 кг.

Диаметр одного шарика: 4 см

Напишем две функции:

● одна будет принимать вес в качестве параметра, а возвращать количество шариков.


● вторая будет принимать рост в качестве параметра и возвращать также количество
шариков
Урок 5. Функции.

Функции для расчета:

def weight_to_balls(kg): # Функция для преобразования веса в шарики


weight_balls = kg / 0.0027
return weight_balls

def height_to_balls(cm): # Функция для преобразования роста в шарики


height_balls = cm / 4
return height_balls
Урок 5. Функции.

Ввод данных
Сделаем программу универсальной - позволим пользователю ввести свои данные (не
забудьте преобразовать в число)

my_height = int(input('Введите свой рост в см: '))


my_weight = int(input('Введите свой вес в кг: '))

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

result_height = height_to_balls(my_height)
result_weight = weight_to_balls(my_weight)
Урок 5. Функции.

Вывод результата
Осталось только сделать понятный вывод, чтобы пользователь не запутался где какая
цифра:

print(f'Ваш рост {my_height} см, равен {result_height} шарикам от пинг-понга ')


print(f'Ваш вес {my_weight} кг, равен {result_weight} шарикам от пинг-понга ')
Игра
камень-ножницы-бумага
Урок 5. Функции.

Начальные условия
Так как компьютер всегда работает с числами, то нам будет удобнее принять следующие
условия:

1 - камень, 2 - ножницы, 3 - бумага.

Для данной игры нам понадобится создать две функции:

1. Для формирования случайного числа 1 - 3. С её помощью мы будем реализовывать


игру противника
2. Для преобразования цифры в понятное определение (то есть 1 должно превращаться
в камень, 2 в ножницы, 3 в бумагу)

Также нам понадобятся переменные, которые будут подсчитывать количество выигрышей


игрока и компьютера
Урок 5. Функции.

Данные для игры


def generate_pc():
pc = random.randint(1,3) # Случайное число от 1 до 3
return pc

def num_to_word(num):
if num == 1: # Если число равно 1
return 'камень' # То возвращаем строку 'камень'
elif num == 2: # Если число равно 2
return 'ножницы' # То возвращаем строку 'ножницы'
else: # Иначе (то есть число равно 3)
return 'бумага' # Возвращаем строку 'ножницы'

my_counter = 0 # Счетчик побед игрока


pc_counter = 0 # Счетчик побед компьютера
Урок 5. Функции.

Игровой цикл
while True:
print(40 * '-') # Просто разделитель для удобства игры
answer = int(input('Введите ответ 1 - камень 2 - ножницы 3 - бумага: ')) # Ответ игрока
pc = generate_pc() # Ответ
противника
print(f'Вы: {num_to_word(answer)}, компьютер: {num_to_word(pc)}') # Выводим на
экран
Внутри игрового цикла мы выполняем следующие действия:

1. Сначала просто выводим 40 дефисов, чтобы было удобно читать вывод


2. Затем просим игрока сделать выбор
3. Затем компьютер делает свой выбор, вызывая функцию generate_pc()
4. Затем выводим на экран результаты выбора, вызывая функции преобразования числа в слово. Причем
первый раз вызываем, передавая выбор игрока: num_to_word(answer).
А второй раз вызываем, передавая выбор компьютера: num_to_word(pc)
Урок 5. Функции.

Проверка всех комбинаций


if answer == pc: # Если оба ответа равны
print('Ничья') # Просто выводим сообщение о ничье

elif answer == 1 and pc == 2: # Иначе если у игрока камень(1), а у противника ножницы(2)


print('Вы победили') # Выводим сообщение о победе
my_counter += 1 # Увеличиваем счетчик побед игрока
elif answer == 1 and pc == 3: # Иначе если у игрока камень(1), а у противника бумага(3)
print('Вы проиграли') # Выводим сообщение о проигрыше
pc_counter += 1 # Увеличиваем счетчик побед противника

elif answer == 2 and pc == 3: # Иначе если у игрока ножницы(2), а у противника бумага(3)


print('Вы победили') # Выводим сообщение о победе
my_counter += 1 # Увеличиваем счетчик побед игрока
elif answer == 2 and pc == 1: # Иначе если у игрока ножницы(2), а у противника камень(1)
print('Вы проиграли') # Выводим сообщение о проигрыше
pc_counter += 1 # Увеличиваем счетчик побед противника

elif answer == 3 and pc == 1: # Иначе если у игрока бумага(3), а у противника камень(1)


print('Вы победили') # Выводим сообщение о победе
my_counter += 1 # Увеличиваем счетчик побед игрока
elif answer == 3 and pc == 2: # Иначе если у игрока бумага(3), а у противника ножницы(2)
print('Вы проиграли') # Выводим сообщение о проигрыше
pc_counter += 1 # Увеличиваем счетчик побед противника
Урок 5. Функции.

Выходим из цикла и выводим конечный


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

elif answer == 3 and pc == 2: # Иначе если у игрока бумага(3), а у противника ножницы(2)


print('Вы проиграли') # Выводим сообщение о проигрыше
pc_counter += 1 # Увеличиваем счетчик побед противника

if my_counter == 3 or pc_counter == 3: # Если у игрока 3 победы или у противника 3 победы


break # Выходим из цикла

И в самом конце просто выводим информацию о количестве побед:


print(f'Счет: Вы: {my_counter}, Компьютер: {pc_counter}')
Урок 5. Функции.

Полный код программы


Сюда не влазит, поэтому посмотреть можно по ссылке :)

https://nekobin.com/domuyumuba.py
Урок 5. Функции

Итоги

✔ Узнали про функции и их строение


✔ Изучили параметры функций и научились изменять результат с их помощью
✔ Научились возвращать значения из функций и сохранять его в отдельные
переменные
✔ Написали программу, которая здоровается с указанным человеком.
✔ Модернизировали программу рисования розеток.
✔ Написали игру “камень-ножницы-бумага” с игровым циклом
Урок 5. Функции.

На следующем занятии:
Познакомимся с модулем для создания игр Создадим своё собственное игровое окно
PyGame

Создадим шаблон, который можно Выберем название нашей игре, цвет


будет использовать для любой игры заднего фона и иконку
Немного повторим
С помощью какой команды
создается функция?
Можно ли придумать любое имя
для фнукции?
Сколько всего параметров
можно передать в функцию?
Какой оператор используется
для того, чтобы вернуть
значение из функции?
Урок 5. Функции.

Ваши вопросы
Спасибо
за внимание
Домашнее задание
Заполни, пожалуйста, форму обратной связи по уроку
Напоминание для преподавателя
● Проверить заполнение Журнала
● Заполнить форму Т22

Вам также может понравиться