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

Программирование. Повторение. Много повторения!

1.

Повторение
Много повторения!

2.

Что такое функция?
Какие стандартные функции
вы знаете?

3.

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

4.

Всегда ли из функции
возвращается значение?

5.

Да, но иногда результат работы
не определён
print(print('Hello!'))
print() печатает
результат работы
print(), который не
определён.
print(len('qwerty123'))
print() печатает
результат
работы len() —
целое число.
В таком случае
программисты
часто говорят, что
функция не
возвращает
значение.

6.

Как объявить собственную
функцию?

7.

Объявление функции
Процесс создания функции называется объявлением функции.
Чтобы объявить функцию, нужно:
➔ указать оператор def;
➔ написать имя функции, перечислить параметры и поставить двоеточие;
➔ программно описать работу функции.
имя_функции
Параметр1
Параметр2
Действие 1
Действие 2
Действие 3
Действие 4
Тело функции

8.

Как использовать объявленную
функцию в программе?

9.

Вызов собственной функции
Обратите внимание!
При объявлении функции перечисляются переменные-параметры.
Значения присваиваются им позже в момент вызова функции.
При вызове функции в неё передаются аргументы, т. е. конкретные
значения (даже если они скрываются за переменными).
имя_функции
Параметр1
Действие 1
Действие 2
Параметр2
Объявление
функции
Действие 3
имя_функции(аргумент1, аргумент2)
Вызов
функции

10.

Что такое локальная область
видимости?
Как она влияет на работу функции
и основной программы?

11.

Локальная область видимости
Интерпретатор Python связывает переменную с местом, в котором она
используется. Объявленные программистом функции являются
самостоятельными блоками программы с собственными переменными.
def average_grade(name):
grade = input('Оценка (off-остановить ввод):')
summa = 0
total = 0
while grade != 'off':
summa += int(grade)
total += 1
grade = input('Оценка (off-остановить ввод):')
average = summa/total
name = input('Имя ученика:')
average_grade(name)
print(average)
Переменная average была определена только в
функции. В основной программе такая переменная
не вводилась и её значение неизвестно!

12.

Как вернуть значение переменной
из собственной функции?

13.

Оператор return
Чтобы получить (вернуть) из функции значение, нужно использовать
оператор return. Это значение можно присвоить переменной в основной
части программы.
def average_grade(name):
grade = input('Оценка (off-остановить ввод):')
summa = 0
total = 0
while grade != 'off':
summa += int(grade)
total += 1
grade = input('Оценка (off-остановить ввод):')
average = summa/total
return average
name = input('Имя ученика:')
average = average_grade(name)
print(average)
Обновлённая функция
average_grade() принимает на вход
один аргумент (имя) и возвращает
значение average.

14.

Функции. Продолжение
Вложенные функции

15.

16.

17.

18.

19.

20.

21.

22.

23.

24.

25.

Повторение:
Вложенные управляющие
конструкции

26.

Что такое условный оператор?
Какие виды условных операторов
вы знаете?

27.

Условный оператор
— это команда, выполняющая или не выполняющая
действие в зависимости от значения логического
выражения.
if
Выражение истинно
:
Блок действий
начинается с
двоеточия
if
Выражение_1 истинно
Выполнить действие 1
Выполнить действие 1
Выполнить действие 2
elif
Выполнить действие 3
4 пробела
:
Выражение_2 истинно
Выполнить действие 2
else :
Выполнить действие 3
:

28.

Что такое цикл?
Какие операторы цикла вы знаете?

29.

Цикл
— это команда, выполняющая указанные действия до тех
пор, пока остаётся истинным логическое выражение.
while
Выражение истинно
Выполнить действие 1
Выполнить действие 2
Выполнить действие 3
Выполнить действие 4
:
Пока истинно логическое выражение.
Выполнить...

30.

Цикл
— это команда, выполняющая указанные действия до тех
пор, пока остаётся истинным логическое выражение.
Последовательность –– это упорядоченный набор элементов.
for элемент
in
последовательность
Выполнить действие 1
Выполнить действие 2
Выполнить действие 3
Выполнить действие 4
:
Для элемента в
последовательности.
Выполнить...

31.

Что такое счётчик?
Какие данные он может хранить?

32.

Счётчик
— это переменная, хранящая число шагов цикла.
Пример:
Счётчик, хранящий все шаги цикла, на которых выполнялось условие.
Счётчик = 0
Логическое выражение 1
истинно?
Нет
Да
Да
Выполнить действие 1
Увеличить счётчик на 1
Логическое выражение 2
истинно?
Нет
Выполнить действие 2

33.

Как запрограммировать
цикл while со счётчиком?
А цикл for со счётчиком?

34.

while со счётчиком
Счётчик для повтора тела
цикла n-раз.
Счётчик для подсчёта шагов цикла с
выполнением дополнительного условия.
i = 0
i = 0
while i < n:
while Выражение_1 истинно
Выполнить действие 1
if
:
Выражение_2 истинно
Выполнить действие 2
Выполнить действие 1
i = i + 1
i = i + 1
Выполнить действие 3
Выполнить действие 2
:

35.

for со счётчиком
range(n) — создаёт последовательность чисел 0, 1, 2… n-1.
range(a, b) — создаёт последовательность чисел a, a+1, a+2… b-1.
Счётчик для повтора тела
цикла n-раз.
Повтор тела цикла n-раз с подсчётом
выполнения дополнительного условия.
for i in range(n):
k = 0
Выполнить действие 1
for i in range(n):
Выполнить действие 2
Если истинно условие
Выполнить действие 3
k = k + 1
Выполнить действие 4
Выполнить действие 2

36.

Рассмотрим задачу
Задача 1. Запрограммировать текстового бота, поддерживающего беседу. Бот должен
отвечать на вопросы:
❏ «Что ты умеешь?» — «Могу поговорить с тобой, если тебе грустно».
❏ «Расскажи шутку» — «Первые пять дней после выходных — самые трудные!»
В остальных случаях — «Извини, не понимаю тебя». При вводе «off» бот завершает
работу.
Какие управляющие конструкции нам потребуются?

37.

Ввод question
question != ‘off’?
Нет
Да
Да
Вывод (1)
question == (1)?
Да
Вывод (2)
Ввод question
Конец
Нет
question == (2)?
Нет
Вывод (3)

38.

Возможное решение
Задача 1. Запрограммировать текстового бота, поддерживающего беседу. Бот должен
отвечать на вопросы:
❏ «Что ты умеешь?» — «Могу поговорить с тобой, если тебе грустно».
❏ «Расскажи шутку» — «Первые пять дней после выходных — самые трудные!»
В остальных случаях — «Извини, не понимаю тебя». При вводе «off» бот завершает
работу.
question = input('Спроси меня о чём угодно (off - завершить):')
while question != 'off':
if question == 'Что ты умеешь?':
print('Могу поговорить с тобой, если тебе грустно')
elif question == 'Расскажи шутку':
print('Первые пять дней после выходных - самые трудные!')
else:
print('Извини, не понимаю тебя')
question = input('Спроси меня о чём угодно (off завершить):')

39.

Решаем задачу
Задача 2. Раз в день бот загадывает два числа. Тот, кто за 3 попытки угадает оба, получает
бесплатную годовую подписку на музыку. Пользователь по очереди вводит два числа.
❏ Если угаданы оба, то печатается: «Вы выиграли!».
❏ Если угадано только первое, то печатается: «Вы угадали первое число».
❏ Если угадано только второе, то печатается: «Вы угадали второе число».
❏ В остальных случаях — «Получится в другой раз!».
Какие конструкции нам потребуются?

40.

Начало
Возможная блок-схема:
i = 0, num1 = 36, num2 = 49
Нет
i < 3?
Да
Ввод user_num1, user_num2
Да
Да
Нет
num2 ==
user_num2?
Да
Вы угадали
1-е число!
Вы
выиграли!
Нет
num1 ==
user_num1?
Вы угадали
2-е число!
i=i+1
Оператор break
(больше попытки не нужны!)
Конец
num2 ==
user_num2?
Нет
Повезёт в
другой раз!

41.

num1 = '36'
num2 = '49'
for i in range(3):
user_num1 = input('Первое число:')
user_num2 = input('Второе число:')
if user_num1 == num1:
if user_num2 == num2:
print('Вы выиграли!')
break
else:
print('Вы угадали первое число!')
else:
if user_num2 == num2:
print('Вы угадали второе число!')
else:
print('Получится в другой раз!')

42.

Повторение:
Вложенные
структуры данных

43.

Какие типы данных вы знаете?

44.

Какие типы данных вы знаете?
Типы данных
Целые числа (int)
Примеры
1, -10, 100, (-5 + 4)
Десятичные дроби
(float)
3.14, -164.3, 700.0, (100 * 0.95)
Логические величины
(bool)
True, False, (10 >= 99),
(‘ok’ == pass and 5 != count)

45.

Какие типы данных вы знаете?
Типы данных
Списки (list)
Примеры
names = list(), results = [81.2, 67.0],
students = ['Воробьёва', 'Куликов']
Кортежи (tuple)
names = tuple(), results = (81.2, 67.0),
students = ('Воробьёва', 'Куликов')
Словари (dict)
data = dict(),
reader_card = {'num': 421, 'surname': 'Игнатов'}
Множества (set)
symbols = set(), symbols = {'h', 'e', 'l', 'o'}

46.

Что такое неизменяемый тип
данных?
Какие типы данных являются
неизменяемыми, а какие –– нет?

47.

Виды типов данных:
Типы данных
Неизменяемые
типы
Нельзя изменить
программно:
➔ целые числа,
➔ десятичные дроби,
➔ логическая
переменная,
➔ строки,
➔ кортежи.
Изменяемые
типы
Можно изменить
программно:
➔ списки,
➔ словари,
➔ множества.

48.

Что такое словарь?
Какие данные хранятся в словаре?

49.

Словарь — это упорядоченный набор пар вида «ключ–
значение».
Объявление словаря:
books = dict() #пустой словарь
books = {'поэма': 'Руслан и Людмила', 'сказка': 'Волшебное кольцо'}
Ключ
Значение
Пара
Получение элемента по ключу:
genre = input('Введите жанр:')
print('Рекомендация:', books[genre])
Ключ
Значение
Пара

50.

Какие действия вы умеете
выполнять со словарями?

51.

Какие команды соответствуют
этим действиям?
Определять длину словаря
?
Получать из словаря элемент по
ключу
?
Искать ключ в словаре
?
Добавлять в словарь пару
«ключ-значение»
?
Удалять ключ и его значение
из словаря
?

52.

Какие команды соответствуют
этим действиям?
Определять длину словаря
len(readers)
Получать из словаря элемент по
ключу
readers['Иванов']
Искать ключ в словаре
'Иванов' in readers
Добавлять в словарь пару
«ключ-значение»
readers['Иванов'] = 'Галкина'
Удалять ключ и его значение
из словаря
del readers['Иванов']

53.

Списки
Правило: элементом списка может быть объект любого типа.
Примеры:
staff = ['Воробьёва', 'Калинин']
staff = ['Воробёева', ['ProTeam', 'PlayForever']]
staff = [
{'Воробьёва': 'программист'},
{'Калинин': 'тестировщик'}
]
staff = [
{'Воробёева': ['ProTeam', 'PlayForever']},
{'Калинин': ['ProTeam']}
]
Элементами списка могут
быть:
списки,
списки списков,
словари,
словари со
значениями-списками
и др.

54.

Словари
Правило:
➔ Ключом может быть только объект неизменяемого типа.
➔ Значением может быть объект любого типа.
Примеры:
staff = {
staff = {
'Воробьёва': {
'Воробьёва': 'программист',
'опыт': '3',
'Калинин': 'тестировщик'
}
'должность': 'программист'
staff = {
},
'Калинин': {
'Воробьёва': ['ProTeam', 'PlayForever'],
'опыт': '2',
'Калинин': ['ProTeam']
'должность': 'менеджер'
}
}
}

55.

Словари
Правило:
● Ключом может быть только объект неизменяемого типа.
● Значением может быть объект любого типа.
Примеры:
staff = {
'Воробьёва': 'программист',
-
'Калинин': 'тестировщик'
Значением словаря могут быть:
}
staff = {
'Воробьёва': ['ProTeam', 'PlayForever'],
'Калинин': ['ProTeam']
}
Ключом словаря могут быть:
-
числа,
строки.
числа,
строки,
списки,
словари,
списки списков,
списки словарей и др.

56.

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

57.

Рассмотрим задачу
Задача. Запрограммируйте структуру для хранения данных для отдела
дизайна. При запуске программы запрашивается ввод фамилии.
Если фамилия найдена, печатается информация:
профиль,
портфолио.
designers = {
Фамилия :{
'Иванов'
...
'Должность':
'младший разработчик',
Профиль
...
'портфолио':
['Сайт Долголетие’,
Портфолио
...
'Сайт PlayForever']
}
}
Фамилия
designers['Иванов'
]
Получение информации по фамилии

58.

Рассмотрим задачу
Задача. Запрограммируйте структуру для хранения данных для отдела
дизайна. При запуске программы запрашивается ввод фамилии.
Если фамилия найдена, печатается информация:
профиль,
портфолио.
designers = {
'Воробьёва': {
'профиль': '3D-дизайнер',
'портфолио': ['Танки World of Tanks']
},
'Калинин': {
'профиль': 'Моушен-дизайнер',
'портфолио': ['NFS', 'Minecraft']
}
}
Как получить профиль
конкретного дизайнера?
Портфолио?

59.

designers = {
'Воробьёва': {
Что выведет предыдущая программа,
если запросить данные?
'профиль': '3D-дизайнер',
➔ designers['Калинин']['портфолио'][1],
➔ designers['Калинин']?
'портфолио': ['Танки World of Tanks']
},
'Калинин': {
'профиль': 'Моушен-дизайнер',
'портфолио': ['NFS', 'Minecraft']
}
}
surname = input('Введите фамилию:')
for info in designers[surname]:
print(info, '-', designers[surname][info])
1.
Что выведет программа, если
запросить фамилию не из базы,
например, «Воронина»?
2. Как улучшить программу, чтобы
реакция на действия п. 2 была
корректной?

60.

Программа запрашивает набор оценок студента через пробел и считает количество
«пятёрок». Зная число «пятёрок» и число всех оценок, программа может посчитать
процент полученных «пятёрок».
Пример. Пусть всего 10 оценок, из них 4 «пятёрки». Тогда: 4/10*100 = 40 (%). После
подсчёта должно печататься: «Получено пятёрок (%) -» и процент.
Ответ округли до целого числа. Программа должна работать как на картинке.

61.

В библиотеке можно анализировать тексты. Напиши программу, которая ищет и выводит на
экран слово, которое чаще остальных встречается в тексте. Словом считается
последовательность непробельных символов, идущих подряд. Слова разделены пробелом.
Гарантируется, что в тексте есть слово, которое встречается чаще остальных. Программа
должна работать как на картинке.

62.

souvenirs = {
'футболки': ['I love Pushkin!', 'Это время — трудновато для пера', 'Здоровы и
нормальны только заурядные люди'],
'браслеты': ['Читайте, завидуйте, я - гражданин!', 'Гой ты, Русь моя родная!'],
'сумки': ['С портретом Чехова', 'С цитатой Гоголя', 'С пером']
}
Для книжного фестиваля был открыт киоск
с сувенирами. Напиши программу,
выводящую полный ассортимент товаров
как на картинке.
Затем программа должна запрашивать вид
желаемого товара и печатать его цену:
- футболка 1500 рублей,
- браслет 300 рублей,
- сумка 600 рублей.
Оформи всё как на картинке. Если введён
несуществующий номер, то напечатай:
«Некорректный номер».

63.

Выводы:
1. Внутрь одной структуры данных может быть
вложена другая структура. Ограничений на
степень вложенности нет.
2. Важное ограничение для словарей:
➔ список не может быть ключом словаря,
но может быть значением.
English     Русский Правила