Similar presentations:
Функции. Продолжение
1.
Модуль 3. Урок 2.Функции. Продолжение
Ссылка на методичку
2.
Модуль 3. Урок 2. Функции. ПродолжениеОбсуждение:
Продолжаем
автоматизировать
3.
Отличная работа!Руководство Института прикладной химии осталось довольно
выполненным заказом. Чтобы учёные и дальше сосредотачивались
на творческих проектах, специалистам ProTeam был выслан новый
блок задач для автоматизации.
Обсуждение
рабочих задач
Кажется, некоторые расчёты стали сложнее.
Готовы снова помочь институту?
Алёна,
менеджер проектов
4.
Рассмотрим задачуОбсуждение
рабочих задач
Задача. Институт проводит испытание нового препарата. Общее число испытуемых и число тех
из них, у кого наблюдались побочные эффекты, вводятся с клавиатуры.
● Если побочные эффекты наблюдались у менее 5% испытуемых, то нужно вывести:
«Побочные эффекты в пределах нормы».
● Если побочные эффекты наблюдались у 5% и более, то нужно вывести: «Высокий риск
побочных эффектов».
Процент_побочн = Испытуемые_с_побочн / Все_испытуемые * 100
5.
Возможное решениеdef analyse_result(people, selected_people):
percent = selected_people/people*100
if percent >= 5:
print('Высокий риск побочных эффектов!')
else:
people = int(input('Число испытуемых:'))
selected_people = int(input('Имели побочные эффекты:'))
analyse_result(people, selected_people)
Обсуждение
рабочих задач
print('Побочные эффекты в пределах нормы')
6.
Возможное решениеdef analyse_result(people, selected_people):
percent = selected_people/people*100
if percent >= 5:
Подсчёт процента части от
целого так часто
используется в других
программах!
print('Высокий риск побочных эффектов!')
print('Побочные эффекты в пределах нормы')
people = int(input('Число испытуемых:'))
selected_people = int(input('Имели побочные эффекты:'))
analyse_result(people, selected_people)
Хорошо бы вынести в
отдельную функцию...
Обсуждение
рабочих задач
else:
7.
Оптимальное решениеdef calc_percent(total, selected):
return selected/total*100
Как изменится функция анализа
результатов эксперимента?
people = int(input('Число испытуемых:'))
selected_people = int(input('Имели побочные эффекты:'))
analyse_result(people, selected_people)
Обсуждение
рабочих задач
Подсчёт процента вынесен
в отдельную функцию.
8.
Оптимальное решениеdef calc_percent(total, selected):
return selected/total*100
def analyse_result(people, selected_people):
percent = calc_percent(people, selected_people)
if percent >= 5:
else:
print('Побочные эффекты в пределах нормы')
people = int(input('Число испытуемых:'))
selected_people = int(input('Имели побочные эффекты:'))
analyse_result(people, selected_people)
Обсуждение
рабочих задач
print('Высокий риск побочных эффектов!')
9.
Вложенные функцииМногие программы требуют объявления нескольких функций и даже
вызов одной функции внутри другой.
Разбиение кода на небольшие функции делает код более читаемым
и коммуникацию между разработчиками эффективной.
Обсуждение
рабочих задач
Работа нескольких разработчиков над большим проектом и вовсе
немыслима без вложенных функций!
10.
Цель рабочего дня —автоматизировать новый блок задач для научного
института.
Новые задачи требуют объявления нескольких функций и
программирования вложенных функций.
● узнаете, как создать несколько собственных функций
и использовать их в программе;
● напишете программы с вызовом одной функции из
другой;
● автоматизируете расчёты учёных института.
Обсуждение
рабочих задач
Сегодня вы:
11.
Модуль 3. Урок 2. Функции. ПродолжениеПодтверждение
квалификации
12.
Чтобы приступить к рабочим задачам,продемонстрируйте уровень своих
знаний.
Подтверждение
квалификации
Покажите, что вы готовы к «мозговому
штурму»!
13.
Подтверждениеквалификации
Что такое функция?
Какие стандартные функции
вы знаете?
14.
Функция —это именованный набор команд программы,
который может быть вызван из другой части
программы
Аргументы
Результат работы
Любое количество чисел,
строк, логических величин
None — служебная величина
input()
Одна строка или ничего
Строка
int()
Одно число или строка
Целое число
len()
Одна строка
Целое число
print()
(будем говорить: «функция ничего не
возвращает»)
Подтверждение
квалификации
Имя
15.
Подтверждениеквалификации
Всегда ли из функции возвращается
значение?
16.
Да, но иногда результат работыне определён.
print() печатает
результат работы
print(), который не
определён.
print(len('qwerty123'))
print() печатает
результат работы
len() — целое
число.
Подтверждение
квалификации
print(print('Hello!'))
Использовать
вложенность
разумнее с
функциями,
возвращающими
значения явным
образом.
17.
Подтверждениеквалификации
Как объявить собственную функцию?
18.
Объявление функцииПроцесс создания функции называется объявлением функции.
Чтобы объявить функцию, нужно:
имя_функции
Параметр1
def print_label(mixture
,
Параметр2
):
Действие 1
print('Раствор',
mixture)
Действие 2
print('Дата
выпуска: ____')
Действие 3
print('Назначение: ______')
Действие 4
Тело функции
Подтверждение
квалификации
❏ Указать оператор def.
❏ Написать имя функции, перечислить параметры и поставить двоеточие.
❏ Программно описать работу функции.
19.
Подтверждениеквалификации
Как использовать объявленную функцию
в программе?
20.
Вызов собственной функцииОбратите внимание!
При объявлении функции перечисляются переменные-параметры. Значения
присваиваются им позже в момент вызова функции.
имя_функции
Параметр1
def print_label(mixture
,
Параметр2
Действие 1
print('Раствор',
mixture)
Действие 2
print('Дата
выпуска: ____')
):
Объявление
функции
Действие 3
print('Назначение: ______')
имя_функции(аргумент1, аргумент2)
Вызов функции
Подтверждение
квалификации
При вызове функции в неё передаются аргументы, т. е. конкретные значения (даже
если они скрываются за переменными).
21.
Что такое локальная область видимости?Подтверждение
квалификации
Как она влияет на работу функции и
основной программы?
22.
Локальная область видимостиИнтерпретатор Python связывает переменную с местом, в котором она используется.
def rest_ethanol(total_mass, warehouse):
ethanol = total_mass*83/100
warehouse -= ethanol
Функция выполняет действия
локально. Переменные с такими
же именами в других частях
программы не меняются.
print('Остаток этанола на складе:', warehouse)
warehouse = 1000
mass = int(input('Масса готового антисептика (г):'))
rest_ethanol(mass, warehouse)
mass = int(input('Масса готового антисептика (г):'))
rest_ethanol(mass, warehouse)
warehouse в функции и warehouse
в оставшейся части программы —
две независимые переменные.
Каждая меняется в своей области
видимости
Подтверждение
квалификации
По сути объявленные программистом функции являются самостоятельными
блоками программы с собственными переменными.
23.
Подтверждениеквалификации
Как вернуть значение переменной из
собственной функции?
24.
Оператор returnЧтобы получить (вернуть) из функции значение, нужно использовать оператор return.
Это значение можно присвоить переменной в основной части программы.
def rest_ethanol(total_mass, warehouse):
ethanol = total_mass*83/100
print('Остаток этанола на складе:', warehouse)
return warehouse
warehouse = 1000
mass = int(input('Масса готового антисептика (г):'))
warehouse = rest_ethanol(mass, warehouse)
mass = int(input('Масса готового антисептика (г):'))
warehouse = rest_ethanol(mass, warehouse)
Подтверждение
квалификации
warehouse -= ethanol
25.
Квалификация подтверждена!Подтверждение
квалификации
Отлично, вы готовы к «мозговому штурму» и
реализации рабочей задачи!
26.
Модуль 3. Урок 2. Функции. Продолжение«Мозговой штурм»:
Вложенные
функции
27.
Важное замечаниеМы рассмотрим задачи, оптимальное решение которых требует
объявление собственных функций и вызов одной функции из
другой.
«Мозговой
штурм»
Перед этим выделим важную рекомендацию.
28.
Одна функция — одно назначениеВместо объявления одной громоздкой функции лучше запрограммировать
несколько ёмких функций.
def get_result():
❏ Чтение данных с
клавиатуры.
Сейчас это просто основная часть
программы, переписанная в функцию.
Как оптимизировать?
❏ Анализ результата.
❏ Вывод сообщения
пользователю.
Вызов get_result()
«Мозговой
штурм»
❏ Расчёт по данным.
29.
Одна функция — одно назначениеВместо объявления одной громоздкой функции лучше запрограммировать
несколько ёмких функций.
def get_result():
❏ Чтение данных с
клавиатуры.
Сформируем функцию get_data()
❏ Анализ результата.
❏ Вывод сообщения
пользователю.
Вызов get_result()
Сформируем функцию print_result()
«Мозговой
штурм»
❏ Расчёт по данным.
30.
Одна функция — одно назначениеВместо объявления одной громоздкой функции лучше запрограммировать
несколько ёмких функций.
def get_data():
Чтение данных и необходимые вычисления
return parameter
Анализ результата и печать сообщения
result = get_data()
print_result(result)
Оптимизировать можно по-разному.
Всё зависит от мастерства разработчика.
«Мозговой
штурм»
def print_result(parameter):
31.
Рассмотрим задачу«Мозговой
штурм»
Задача. Научный институт должен приготовить колбы с растворами лимонной кислоты для научнопрактической конференции. Процент вещества в каждом растворе вводится с клавиатуры. На
складе есть 1000 г кислоты. Программа должна печатать остаток вещества после приготовления
всех растворов.
Каким будет оптимальное решение этой задачи?
32.
Возможное решение 1Задача. Научный институт должен приготовить колбы с растворами лимонной кислоты для научнопрактической конференции. Процент вещества в каждом растворе вводится с клавиатуры. На
складе есть 1000 г кислоты. Программа должна печатать остаток вещества после приготовления
всех растворов.
def calc_substance(mass, percent):
substance = mass*percent/100
return substance
def calc_rest(total, mass, percent):
substance = calc_substance(mass, percent)
return total
warehouse_amount = 1000
while input('Приготовить раствор (да / нет):') != 'нет':
mixture = int(input('Ожидаемая масса раствора:'))
percent = int(input('Процент сухого вещества:'))
warehouse_amount = calc_rest(warehouse_amount, mixture, percent)
print('Остаток на складе:', warehouse_amount)
«Мозговой
штурм»
total -= substance
33.
Возможное решение 1Задача. Научный институт должен приготовить колбы с растворами лимонной кислоты для научнопрактической конференции. Процент вещества в каждом растворе вводится с клавиатуры. На
складе есть 1000 г кислоты. Программа должна печатать остаток вещества после приготовления
всех растворов.
def calc_substance(mass, percent):
substance = mass*percent/100
return substance
def calc_rest(total, mass, percent):
substance = calc_substance(mass, percent)
return total
warehouse_amount = 1000
while input('Приготовить раствор (да / нет):') != 'нет':
mixture = int(input('Ожидаемая масса раствора:'))
percent = int(input('Процент сухого вещества:'))
warehouse_amount = calc_rest(warehouse_amount, mixture, percent)
print('Остаток на складе:', warehouse_amount)
«Мозговой
штурм»
total -= substance
34.
Возможное решение 2Задача. Научный институт должен приготовить колбы с растворами лимонной кислоты для научнопрактической конференции. Процент вещества в каждом растворе вводится с клавиатуры. На
складе есть 1000 г кислоты. Программа должна печатать остаток вещества после приготовления
всех растворов.
def get_rest(total):
mass = int(input('Ожидаемая масса раствора:'))
percent = int(input('Процент сухого вещества:'))
substance = mass*percent/100
total -= substance
def calc_total_rest(total):
while input('Приготовить раствор (да / нет):') != 'нет':
total = get_rest(total)
return total
print('Останется на складе:', calc_total_rest(1000))
«Мозговой
штурм»
return total
35.
Возможное решение 2Задача. Научный институт должен приготовить колбы с растворами лимонной кислоты для научнопрактической конференции. Процент вещества в каждом растворе вводится с клавиатуры. На
складе есть 1000 г кислоты. Программа должна печатать остаток вещества после приготовления
всех растворов.
def get_rest(total):
mass = int(input('Ожидаемая масса раствора:'))
percent = int(input('Процент сухого вещества:'))
substance = mass*percent/100
total -= substance
def calc_total_rest(total):
while input('Приготовить раствор (да / нет):') != 'нет':
rest = get_rest(total)
return rest
print('Останется на складе:', calc_total_rest(1000))
«Мозговой
штурм»
return total
36.
Перед тем, как продолжить:1. Что напечатает программа, если запросить подсчёт остатка
для одного раствора массой 150 г с содержанием кислоты
10%?
2. Вернитесь к предыдущему слайду и покажите все вложенные
функции. Какие из них возвращают значение явным образом?
«Мозговой
штурм»
3. Сколько раз вызывается функция get_rest()?
А calc_total_rest()?
37.
Рассмотрим задачуЗадача. Щелочные растворы одни из самых популярных растворов в химии. Количество щёлочи на
складе постоянно меняется, поэтому сотрудники института должны сами оставлять заявки на
закупку вещества. Напиши программу для работы с хранилищем.
При закупке запрашивается количество щёлочи и
выводится сообщение: «Заявка оставлена!»
❏
Если щёлочь берётся со склада, то вводится нужное
количество и печатается остаток.
«Мозговой
штурм»
❏
Каким будет оптимальное решение этой задачи?
38.
Возможное решениеdef order_substance():
amount = int(input('Сколько заказать:'))
print('Заявка оставлена!')
def get_substance(total):
amount = int(input('Сколько взять:'))
rest = total - amount
return rest
print('1-закупить щёлочь\n2-взять щёлочь\n3-завершить работу')
total = 1000
while answer != '3':
if answer == '1':
order_substance()
else:
total = get_substance(total)
print('Остаток на складе:', total)
answer = input('Ваше действие:')
«Мозговой
штурм»
answer = input('Ваше действие:')
39.
Возможное решениеdef order_substance():
amount = int(input('Сколько заказать:'))
print('Заявка оставлена!')
def get_substance(total):
Упрощать можно не только
вложенностью, но и
разбиением программы на
функциональные блоки!
amount = int(input('Сколько взять:'))
rest = total - amount
return rest
print('1-закупить щёлочь\n2-взять щёлочь\n3-завершить работу')
total = 1000
while answer != '3':
if answer == '1':
order_substance()
else:
total = get_substance(total)
print('Остаток на складе:', total)
answer = input('Ваше действие:')
«Мозговой
штурм»
answer = input('Ваше действие:')
40.
Перед тем, как продолжить:1. Сотрудники института попросили изменить функцию order_substance()
так, чтобы она сразу увеличивала количество щёлочи на складе. Как
это сделать?
2. Сколько раз вызывается функция order_substance()?
А get_substance()?
«Мозговой
штурм»
1. Пусть изменения п. 1 вступили в силу. Химик приготовил два раствора
массой 200 г и 130 г и заказал покупку 500 г щёлочи. Сколько щёлочи
окажется на складе?
41.
Модуль 3. Урок 2. Функции. ПродолжениеПлатформа:
Институт: оптимизация
42.
Выполните задания на платформе«Институт: оптимизация»
Работаем на
платформе
learn.algoritmika.org
43.
Перерыв44.
Модуль 3. Урок 2. Функции. Продолжение«Мозговой штурм»:
Отладка
программы
45.
Инструменты разработчикаВ больших программах не всегда легко определить значение
переменной в конкретный момент времени.
Для этого у разработчиков особый инструмент — отладчик.
С его помощью можно:
❏ Проследить изменения значений при исполнении каждой
строчки кода программы.
«Мозговой
штурм»
❏ Увидеть значения переменных в конкретный момент (строчке)
программы.
46.
ОтладчикРассмотрим программу прошлого «мозгового штурма»
«Мозговой
штурм»
Включить отладку
47.
Проследим значения переменных«Мозговой
штурм»
Глобальные переменные — значения основной части программы.
Локальные переменные объявляются в функциях.
Окно отладки
48.
Проследим значения переменных«Мозговой
штурм»
Пусть в программе есть ошибка: при заказе количество щёлочи не
увеличивается, а уменьшается. Найдём ошибку через отладчик.
49.
Проследим значения переменныхПусть в программе есть ошибка: при заказе количество щёлочи не
увеличивается, а уменьшается. Найдём ошибку через отладчик.
Поставим мышкой
напротив строки
точку остановки.
Затем запустим
программу
«Мозговой
штурм»
«Подозрительная»
команда в строке 4.
50.
Проследим значения переменныхТекущие значения
переменных. Пока
всё в порядке.
Перейдём на
следующую
строку.
«Мозговой
штурм»
Программа запрашивает данные, необходимые для запуска функции. Затем
исполнение останавливается на отмеченной строке.
51.
Проследим значения переменныхВот и след ошибки!
Действительно, в
строке стоит минус
вместо плюса.
«Мозговой
штурм»
Программа запрашивает данные, необходимые для запуска функции. Затем
исполнение останавливается на отмеченной строке.
52.
Проследим значения переменныхЗавершаем
работу
отладчика.
«Мозговой
штурм»
Программа запрашивает данные, необходимые для запуска функции. Затем
исполнение останавливается на отмеченной строке.
53.
Проследим значения переменных«Мозговой
штурм»
Также можно просмотреть значения переменных на всех строках.
Для этого нужное число раз нажимаем на кнопку «Шаг с обходом».
54.
Инструменты разработчикаОтладчик — это полезный и профессиональный инструмент. Им
владеют все разработчики.
В следующий раз, когда программа не пройдёт автопроверку,
попробуй самостоятельно найти ошибку через отладчик.
«Мозговой
штурм»
Это особенно актуально для дополнительных заданий.
55.
Модуль 3. Урок 2. Функции. ПродолжениеПлатформа:
Институт: оптимизация 2
56.
Выполните задания на платформе«Институт: оптимизация 2»
Работаем на
платформе
learn.algoritmika.org
57.
Модуль 3. Урок 2. Функции. ПродолжениеЗавершение
рабочего дня
58.
Для завершения работыпройдите техническое интервью
1. Какие вы знаете способы оптимизации кода программы с
помощью функций?
Подведение итогов
рабочего дня
2. Что такое отладчик? Как его используют программисты?
Костя,
Алёна,
старший разработчик
менеджер проектов
59.
Оценка эффективности проделаннойработы
Поделитесь с коллегами:
2. Что получилось не так, как хотелось?
3. Что нужно сделать, чтобы в следующий раз избежать
неудачи?
Подведение итогов
рабочего дня
1. Что у вас получилось лучше всего?
60.
Дополнительные задания дляповышения эффективности
Подведение итогов
рабочего дня
«Институт:
доп задания 2»
programming