2.08M
Категория: ПрограммированиеПрограммирование

Функции

1.

Модуль 3. Урок 1.
Функции
Ссылка на методичку

2.

Модуль 3. Урок 1. Функции
Обсуждение:
Новый заказ

3.

Получен новый заказ!
В ProTeam обратился Институт прикладной химии.
Сотрудники института занимаются приготовлением растворов,
определением их состава, оценкой токсичности веществ и другими
важными задачами.
Готовы помочь институту с автоматизацией?
Обсуждение
рабочих задач
Недавно институт подал заявку на грант,
условием которого является автоматизация
рабочих процессов.
Алёна,
менеджер проектов

4.

Рассмотрим возможную задачу
Обсуждение
рабочих задач
Задача. Написать программу, рассчитывающую массы ингредиентов для приготовления солевых
растворов трёх видов. Ожидаемая масса каждого раствора — 200 г.
● Раствор от обезвоживания имеет 1% соли (остальное — вода).
● Выводящий жидкость раствор — 10% соли.
● Консервирующий раствор — 15% соли.
Масса соли = Масса раствора*процент/100
Масса воды = Масса раствора - Масса соли

5.

Возможное решение
print('Раствор от обезвоживания (200 г):')
salt = 200*1/100
water = 200 - salt
print('На', water, 'г воды добавить', salt, 'г соли')
print('Выводящий жидкость раствор (200 г):')
salt = 200*10/100
print('На', water, 'г воды добавить', salt, 'г соли')
print('Раствор-консервант (200 г):')
salt = 200*15/100
water = 200 - salt
print('На', water, 'г воды добавить', salt, 'г соли')
Обсуждение
рабочих задач
water = 200 - salt

6.

Возможное решение
print('Раствор от обезвоживания (200 г):')
salt = 200*1/100
water = 200 - salt
print('На', water, 'г воды добавить', salt, 'г соли')
print('Выводящий жидкость раствор (200 г):')
salt = 200*10/100
print('На', water, 'г воды добавить', salt, 'г соли')
print('Раствор-консервант (200 г):')
salt = 200*15/100
water = 200 - salt
print('На', water, 'г воды добавить', salt, 'г соли')
Есть ли повторяющиеся части программы?
Если да, то сколько раз они повторяются?
Обсуждение
рабочих задач
water = 200 - salt

7.

Возможное решение
print('Раствор от обезвоживания (200 г):')
salt = 200*1/100
water = 200 - salt
Расчёт массы
ингредиентов
print('На', water, 'г воды добавить', salt, 'г соли')
print('Выводящий жидкость раствор (200 г):')
water = 200 - salt
print('На', water, 'г воды добавить', salt, 'г соли')
Расчёт массы
ингредиентов
print('Раствор-консервант (200 г):')
salt = 200*15/100
water = 200 - salt
print('На', water, 'г воды добавить', salt, 'г соли')
Расчёт массы
ингредиентов
Одна и та же часть программы повторяется для каждого раствора!
Обсуждение
рабочих задач
salt = 200*10/100

8.

Возможное решение
print('Раствор от обезвоживания (200 г):')
salt = 200*1/100
water = 200 - salt
Расчёт массы
ингредиентов
print('На', water, 'г воды добавить', salt, 'г соли')
print('Выводящий жидкость раствор (200 г):')
water = 200 - salt
print('На', water, 'г воды добавить', salt, 'г соли')
Расчёт массы
ингредиентов
print('Раствор-консервант (200 г):')
salt = 200*15/100
water = 200 - salt
print('На', water, 'г воды добавить', salt, 'г соли')
Расчёт массы
ингредиентов
А что, если расчёты нужно делать несколько раз в день,
чередуя с другими вычислениями?
Обсуждение
рабочих задач
salt = 200*10/100

9.

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

10.

Создание функций
Такой инструмент есть, и вы частично знакомы с ним.
можно
определить
как
Обсуждение
рабочих задач
Часть программы (подпрограмму)
функцию и вызывать по имени.

11.

Возможная оптимизация:
print('Раствор от обезвоживания (200 г):')
Функция должна печатать
ингредиенты, учитывая
water = 200 - salt
массу раствора и процент
print('На', water, 'г воды добавить', salt, 'г соли') соли.
salt = 200*1/100
print('Выводящий жидкость раствор (200 г):')
salt = 200*10/100
Эти данные стоит передать
как аргументы.
print('На', water, 'г воды добавить', salt, 'г соли')
print('Раствор-консервант (200 г):')
salt = 200*15/100
water = 200 - salt
print('На', water, 'г воды добавить', salt, 'г соли')
Обсуждение
рабочих задач
water = 200 - salt

12.

Оптимизированная программа
Функция «Печать ингредиентов» :
Получает массу раствора и
процент соли.
Считает массы ингредиентов.
Печатает состав раствора.
Вызов функции с аргументами: 200, 10
(выводящий жидкость раствор)
Вызов функции с аргументами: 200, 15
(раствор-консервант)
Обсуждение
рабочих задач
Вызов функции с аргументами: 200, 1
(раствор от обезвоживания)

13.

Цель рабочего дня —
автоматизировать работу научного института
Заказчик хочет автоматизировать и оптимизировать рутинные
задачи.
● узнаете, как создать собственную функцию и
использовать её в программе;
● узнаете, что такое локальная область видимости;
● оптимизируете расчёты с помощью функций.
Обсуждение
рабочих задач
Сегодня вы:

14.

Модуль 3. Урок 1. Функции
«Мозговой штурм»:
Создание
функций

15.

Работа с функциями
Вспомните определение функции.
«Мозговой
штурм»
Приведите примеры известных вам функций.

16.

Функция —
это алгоритм, составленный на языке
программирования и имеющий уникальное имя
Примеры известных вам функций:
Назначение
print()
Печать аргументов, указанных в скобках
input()
Считывание данных
int()
Преобразование к целочисленному типу
len()
Определение длины строки
«Мозговой
штурм»
Функция

17.

Функция —
это именованный набор команд программы,
который может быть вызван из другой части
программы
Формальное определение и устройство функции:
Функции могут
явно возвращать
результат работы в
программу.
Уникальное имя
функции.
Передаваемые в
функцию данные.
«Мозговой
штурм»
значение = имя_функции(аргумент1, аргумент2, …)

18.

Работа с функциями
Аргументы
Результат работы
Любое количество чисел,
строк, логических величин
None — служебная величина
input()
Одна строка или ничего
Строка
int()
Одно число или строка
Целое число
len()
Одна строка
Целое число
print()
(будем говорить: «функция не возвращает
значение»)
«Мозговой
штурм»
Имя

19.

Работа с функциями
Аргументы
Результат работы
Любое количество чисел,
строк, логических величин
None — служебная величина
input()
Одна строка или ничего
Строка
int()
Одно число или строка
Целое число
len()
Одна строка
Целое число
print()
print(print('Hello!'))
print(len('qwerty123'))
(будем говорить: «функция не возвращает
значение»)
print() печатает результат
работы print(), который не
определён
print() печатает результат
работы len() — целое число
«Мозговой
штурм»
Имя

20.

Объявление функции
Процесс создания функции называется объявлением функции.
Чтобы объявить функцию, нужно:
❏ Указать оператор def.
❏ Написать имя функции, перечислить параметры и поставить двоеточие.
❏ Программно описать работу функции.
Параметр2
):
Действие 1
print('Раствор',
mixture)
Действие 2
print('Дата
выпуска: ____')
Действие 3
print('Назначение: ______')
Действие 4
Тело функции
«Мозговой
штурм»
имя_функции
Параметр1
def print_label(mixture
,

21.

Объявление функции
Обратите внимание!
При объявлении функции перечисляются переменные-параметры. Значения
присваиваются им позже в момент вызова функции.
При вызове функции в неё передаются аргументы, т. е. конкретные значения (даже
если они скрываются за переменными).
Параметр2
Действие 1
print('Раствор',
mixture)
Действие 2
print('Дата
выпуска: ____')
):
Объявление
функции
Действие 3
print('Назначение: ______')
имя_функции(аргумент1, аргумент2)
Вызов функции
«Мозговой
штурм»
имя_функции
Параметр1
def print_label(mixture
,

22.

Работа с функциями
«Мозговой
штурм»
Задача. Напиши программу, печатающую универсальную этикетку для раствора.
Даны названия растворов: «Люголя», «Молочко Видаля», «Борная кислота».
Каким будет оптимальное решение этой задачи?

23.

Работа с функциями
Задача. Напиши программу, печатающую универсальную этикетку для раствора.
Даны названия растворов: «Люголя», «Молочко Видаля», «Борная кислота».
print('Раствор Люголя')
print('Дата выпуска: ____')
print('Назначение: ______')
print('Раствор Молочко Видаля')
print('Назначение: ______')
print('Раствор Борная кислота')
print('Дата выпуска: ____')
print('Назначение: ______')
Такое решение не оптимально. Что, если растворов будет не 3, а 10?
Как оптимизировать?
«Мозговой
штурм»
print('Дата выпуска: ____')

24.

Работа с функциями
Задача. Напиши программу, печатающую универсальную этикетку для раствора.
Даны названия растворов: «Люголя», «Молочко Видаля», «Борная кислота».
def print_label(mixture):
print('Раствор', mixture)
print('Дата выпуска: ____')
print('Назначение: ______')
print_label('Молочко Видаля')
print_label('Борная кислота')
Оптимальное решение с использованием функций.
«Мозговой
штурм»
print_label('Люголя')

25.

Вспомним и решим задачу
«Мозговой
штурм»
Задача. Написать программу, рассчитывающую массы ингредиентов для солевых растворов
трёх видов. Общая масса каждого раствора — 200 г.
● Раствор от обезвоживания имеет 1% соли (остальное — вода).
● Выводящий жидкость раствор — 10% соли.
● Консервирующий раствор — 15% соли.
Масса соли = Масса раствора*процент/100
Масса воды = Масса раствора - Масса соли

26.

Вспомним и решим задачу
Функция «Печать ингредиентов» :
Получает массу раствора и
процент соли.
Считает массы ингредиентов.
Печатает состав раствора.
Мы уже обсуждали
оптимальный вид этой
программы.
Какой код соответствует этой
схеме?
Вызов функции с аргументами: 200, 10
(выводящий жидкость раствор)
Вызов функции с аргументами: 200, 15
(раствор-консервант)
«Мозговой
штурм»
Вызов функции с аргументами: 200, 1
(раствор от обезвоживания)

27.

Решение задачи:
def print_ingredients(total_mass, percent):
ingredient = total_mass*percent/100
water = total_mass - ingredient
print('На', water, 'г воды добавить', ingredient, 'г соли')
print('Раствор от обезвоживания (200 г):')
print_ingredients(200, 1)
print_ingredients(200, 10)
print('Раствор-консервант (200 г):')
print_ingredients(200, 15)
«Мозговой
штурм»
print('Выводящий жидкость раствор (200 г):')

28.

Перед тем, как продолжить:
1. Возвращает ли функция print_ingredients() значение явным
образом? Если да, то какое?
2. Что напечатает программа, если запросить вывод
ингредиентов для раствора-консерванта массой 100 г?
«Мозговой
штурм»
3. Вернитесь к предыдущему слайду и покажите аргументы
функции print_ingredients() и её параметры.

29.

Модуль 3. Урок 1. Функции
Платформа:
Институт: автоматизация

30.

Выполните задания на платформе
«Институт: автоматизация»
Работаем на
платформе
learn.algoritmika.org

31.

Перерыв

32.

Модуль 3. Урок 1. Функции
«Мозговой штурм»:
Возврат
значения

33.

Рассмотрим задачу
Задача. Этанол используется для изготовления антисептиков. Работники института исследуют
эффективность антисептика с содержанием этанола 83%.
«Мозговой
штурм»
На складе имеется 1000 г этанола. Напишите программу, запрашивающую массу готового
антисептика и выводящую остаток этанола на складе после его приготовления.
Каким будет оптимальное решение этой задачи?

34.

Возможное решение
Задача. Этанол используется для изготовления антисептиков. Работники института исследуют
эффективность антисептика с содержанием этанола 83%.
На складе имеется 1000 г этанола. Напишите программу, запрашивающую массу готового
антисептика и выводящую остаток этанола на складе после его приготовления.
def rest_ethanol(total_mass, warehouse):
ethanol = total_mass*83/100
warehouse -= ethanol
warehouse = 1000
mass = int(input('Масса готового антисептика (г):'))
rest_ethanol(mass, warehouse)
«Мозговой
штурм»
print('Остаток этанола на складе:', warehouse)

35.

Возможное решение
Задача. Этанол используется для изготовления антисептиков. Работники института исследуют
эффективность антисептика с содержанием этанола 83%.
На складе имеется 1000 г этанола. Напишите программу, запрашивающую массу готового
антисептика и выводящую остаток этанола на складе после его приготовления.
def rest_ethanol(total_mass, warehouse):
ethanol = total_mass*83/100
А если нужно изготовить две
партии раствора разной
массы?
warehouse -= ethanol
warehouse = 1000
mass = int(input('Масса готового антисептика (г):'))
rest_ethanol(mass, warehouse)
«Мозговой
штурм»
print('Остаток этанола на складе:', warehouse)

36.

Возможное решение
Задача. Этанол используется для изготовления антисептиков. Работники института исследуют
эффективность антисептика с содержанием этанола 83%.
На складе имеется 1000 г этанола. Напишите программу, запрашивающую массу готового
антисептика и выводящую остаток этанола на складе после его приготовления.
def rest_ethanol(total_mass, warehouse):
ethanol = total_mass*83/100
warehouse -= ethanol
warehouse = 1000
mass = int(input('Масса готового антисептика (г):'))
rest_ethanol(mass, warehouse)
mass = int(input('Масса готового антисептика (г):'))
rest_ethanol(mass, warehouse)
Остаток этанола увеличился!
Ошибка!
«Мозговой
штурм»
print('Остаток этанола на складе:', warehouse)

37.

Локальная область видимости
Интерпретатор Python связывает переменную с местом, в котором она используется.
По сути объявленные программистом функции являются самостоятельными
блоками программы с собственными переменными.
def rest_ethanol(total_mass, warehouse):
ethanol = total_mass*83/100
warehouse -= ethanol
warehouse = 1000
mass = int(input('Масса готового антисептика (г):'))
rest_ethanol(mass, warehouse)
mass = int(input('Масса готового антисептика (г):'))
rest_ethanol(mass, warehouse)
«Мозговой
штурм»
print('Остаток этанола на складе:', warehouse)

38.

Локальная область видимости
Интерпретатор Python связывает переменную с местом, в котором она используется.
По сути объявленные программистом функции являются самостоятельными
блоками программы с собственными переменными.
def rest_ethanol(total_mass, warehouse):
ethanol = total_mass*83/100
warehouse -= ethanol
Функция выполняет действия
локально. Переменные с такими
же именами в других частях
программы не меняются.
warehouse = 1000
mass = int(input('Масса готового антисептика (г):'))
rest_ethanol(mass, warehouse)
mass = int(input('Масса готового антисептика (г):'))
rest_ethanol(mass, warehouse)
warehouse в функции и warehouse
в оставшейся части программы —
две независимые переменные.
Каждая меняется в своей области
видимости.
«Мозговой
штурм»
print('Остаток этанола на складе:', warehouse)

39.

Оператор return
Чтобы получить (вернуть) из функции значение, нужно использовать оператор return.
Это значение можно присвоить переменной в основной части программы.
def rest_ethanol(total_mass, warehouse):
ethanol = total_mass*83/100
warehouse -= ethanol
print('Остаток этанола на складе:', warehouse)
warehouse = 1000
mass = int(input('Масса готового антисептика (г):'))
warehouse = rest_ethanol(mass, warehouse)
mass = int(input('Масса готового антисептика (г):'))
warehouse = rest_ethanol(mass, warehouse)
«Мозговой
штурм»
return warehouse

40.

Рассмотрим задачу
Задача. Раствор коры дуба обладает противовоспалительными свойствами. Химикам
привезли для исследования 400 г сырья. Эффективным считается раствор с содержанием
коры 15%.
«Мозговой
штурм»
Напишите программу, запрашивающую массу готового раствора и выводящую остаток коры на
складе. Найдите остаток коры после приготовления двух растворов.
Каким будет оптимальное решение этой задачи?

41.

Возможное решение
def get_bark(total_mass):
bark = total_mass*15/100
Функция вычисляет количество
коры, необходимой для раствора
return bark
warehouse = 400
mass = int(input('Масса готового раствора (г):'))
oak_bark = get_bark(mass)
Переменная, которой присваивается
возвращаемое значение, может иметь
любое имя.
print('Коры на складе:', warehouse)
mass = int(input('Масса готового раствора (г):'))
oak_bark = get_bark(mass)
warehouse -= oak_bark
print('Коры на складе:', warehouse)
«Мозговой
штурм»
warehouse -= oak_bark

42.

Перед тем, как продолжить:
1. Какие ещё команды программы можно было бы добавить в
функцию get_bark()?
2. Что напечатает программа, если вывести значение переменной
warehouse в функции get_bark()?
«Мозговой
штурм»
3. Что напечатает программа, если вывести значение переменной
bark в последней строчке программы?

43.

Модуль 3. Урок 1. Функции
Платформа:
Институт: автоматизация 2

44.

Выполните задания на платформе
«Институт: автоматизация 2»
Работаем на
платформе
learn.algoritmika.org

45.

Модуль 3. Урок 1. Функции
Завершение
рабочего дня

46.

Для завершения работы
пройдите техническое интервью
1. Что такое функция? Всегда ли функция возвращает
значение? Приведите примеры известных функций.
Подведение итогов
рабочего дня
2. За что отвечает оператор def? Оператор return?
3. Меняются ли значения переменных в программе, если
менять их в функции? Почему?
Костя,
Алёна,
старший разработчик
менеджер проектов

47.

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

48.

«Институт:
доп задания»
Подведение итогов
рабочего дня
Дополнительные задания для
повышения эффективности
English     Русский Правила