0% нашли этот документ полезным (0 голосов)
18 просмотров139 страниц

Python 1-Dars

Документ представляет собой учебный материал по программированию на языке Python для 9 класса, охватывающий основные темы, такие как обработка данных, циклы, функции и условные операторы. Включает примеры кода и задачи для практики, а также объясняет основные концепции программирования. Автором документа является К.Ю. Поляков, и он доступен на сайте http://kpolyakov.spb.ru.

Загружено:

nurlankyzyaijamal01
Авторское право
© © All Rights Reserved
Мы серьезно относимся к защите прав на контент. Если вы подозреваете, что это ваш контент, заявите об этом здесь.
Доступные форматы
Скачать в формате PPTX, PDF, TXT или читать онлайн в Scribd
0% нашли этот документ полезным (0 голосов)
18 просмотров139 страниц

Python 1-Dars

Документ представляет собой учебный материал по программированию на языке Python для 9 класса, охватывающий основные темы, такие как обработка данных, циклы, функции и условные операторы. Включает примеры кода и задачи для практики, а также объясняет основные концепции программирования. Автором документа является К.Ю. Поляков, и он доступен на сайте http://kpolyakov.spb.ru.

Загружено:

nurlankyzyaijamal01
Авторское право
© © All Rights Reserved
Мы серьезно относимся к защите прав на контент. Если вы подозреваете, что это ваш контент, заявите об этом здесь.
Доступные форматы
Скачать в формате PPTX, PDF, TXT или читать онлайн в Scribd
Вы находитесь на странице: 1/ 139

1

Программирование на
языке Python
9 класс
1. Повторение
2. Обработка потока данных
3. Обработка потока данных (цикл for)
4. Обработка массивов
5. Как разрабатывают программы
6. Процедуры
7. Функции

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


2

Программирование
на языке Python

1. Повторение

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 3

Вывод на экран
Текст:
print ( "a", "b" )
Значения переменных из памяти:
print ( a, b )
Арифметические выражения:
print ( a + 2*b )
Все вместе:
print ( a, "+", b, "=", a+b )
Подключение русского языка:
# coding: utf-8

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 4

Вывод на экран
С пробелами:
print ( a, b )
Без пробелов:
print ( a, b, sep
sep = "" )
Без перехода на новую строку:
print ( a, b, end = "" )

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 5

Ввод данных с клавиатуры


Символьная строка:
print( 'Введите имя:' )
s = input()
или так:
s = input('Введите имя:')

Целое число:
print( 'Введите целое число:' )
n = int
int (input())
или так:
n = int
int (input('Введите целое число:'))

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 6

Ввод данных с клавиатуры


Вещественное число:
print( 'Введите число:' )
x = float
float (input())
или так:
x = float
float (input('Введите число:'))

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 7

Ввод данных с клавиатуры


Два целых числа (каждое в отдельной строке):
print( 'Введите два числа:' )
a = int (input())
b = int (input())
в одной строке:
print( 'Введите два числа:' )
a, b = map(int, input().split())

input() # "21 35"


input().split() # ["21", "35"]
a = int("21")
b = int("35") символьные
строки
 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru
Python, 9 класс 8

Присваивание
а = 6
b = 4
а = 2*а + 3*b # a=2*6+3*4=24
b = a / 2 * b # b=(24/2)*4=48

Сокращённая запись операций:


а += 1 # a = a + 1
b += a # b = b + a
а *= 2 + 3*b # a = a*(2 + 3*b)
b /= 2 * a # b = b / (2*a)

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 9

Остаток от деления – %
a = 1234
d = a % 10; print( d ) 4
a = a // 10 # 123
d = a % 10; print( d ) 3
a = a // 10 # 12
d = a % 10; print( d ) 2
a = a // 10 # 1
d = a % 10; print( d ) 1
a = a // 10 # 0

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 10

Задания
«3»: Ввести три числа: цену пирожка (два числа: рубли, потом –
копейки) и количество пирожков. Найти сумму, которую
нужно заплатить (рубли и копейки)
Пример:
Стоимость пирожка:
12 50
Сколько пирожков:
5
К оплате: 62 руб. 50 коп.
«4»: Ввести число, обозначающее количество секунд. Вывести
то же самое время в часах, минутах и секундах.
Пример:
Число секунд:
8325
2 ч. 18 мин. 45 с

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 11

Задания
«5»: Занятия в школе начинаются в 8-30. Урок длится
45 минут, перерывы между уроками – 10 минут.
Ввести номер урока и вывести время его
окончания.
Пример:
Введите номер урока:
6
13-50

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 12

Условный оператор
if a > b:
# что делать, если a > b
else:
# что делать, если a <= b

отступы! a = 12
a = 12 if a > 2: # истина
if a > 20:# ложь a = 15
a = 15 else:
print ( a ) # 12 a = 8
print ( a ) # 15
 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru
Python, 9 класс 13

Цепочка условий
cost = 1500
if cost < 1000:
print ( "Скидок нет." )
elif cost < 2000: первое
сработавшее
print ( "Скидка 2%." ) условие
elif cost < 5000:
print ( "Скидка 5%." )
else:
print ( "Скидка 10%." )

? Что выведет? Скидка 2%.

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 14

Сложные условия
Задача: набор сотрудников в возрасте 25-40 лет
(включительно). сложное условие

if v >= 25 and v <= 40 :


print("подходит")
else:
print("не подходит")

and «И»: одновременное выполнение


всех условий!

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 15

Сложные условия
Задача: набор сотрудников в возрасте 25-40 лет
(включительно). сложное условие

if v < 25 or v > 40 :
print("не подходит")
else:
print("подходит")

or «ИЛИ»: выполнение хотя бы одного


из двух условий!

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 16

Задачи
«3»: Напишите программу, которая получает три числа -
рост трёх спортсменов, и выводит сообщение «По
росту.», если они стоят по возрастанию роста, или
сообщение «Не по росту!», если они стоят не по
росту.
Пример:
Введите рост трёх спортсменов:
165 170 172
По росту.
Пример:
Введите рост трёх спортсменов:
175 170 172
Не по росту!

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 17

Задачи
«4»: Напишите программу, которая получает номер
месяца и выводит соответствующее ему время года
или сообщение об ошибке.
Пример:
Введите номер месяца:
5
Весна.
Пример:
Введите номер месяца:
15
Неверный номер месяца.

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 18

Задачи
«5»: Напишите программу, которая получает возраст
человека (целое число, не превышающее 120) и
выводит этот возраст со словом «год», «года» или
«лет». Например, «21 год», «22 года», «25 лет».
Пример:
Введите возраст: 18
Вам 18 лет.
Пример:
Введите возраст: 21
Вам 21 год.
Пример:
Введите возраст: 22
Вам 22 года.

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 19

Цикл с условием
k=0
while k < 10:
print ( "Привет" ) ? При каком условии
заканчивает работу?
k += 1
k >= 10

k = 10
while k > 0:
print ( "Привет" ) ? При каком условии
заканчивает работу?
k -= 1
k <= 0

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 20

Цикл по переменной
for i in range(N): сделай
N раз
...

! range(N) = [0, 1, 2, …, N-2, N-1 ]

[0,1,2,3] N раз
[0,1,2,3,4]
for i in range(4): s = 0
print(i) for i in range(5):
0 s += i
1 ? Что выведет? print(s)
2 10
3
 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru
Python, 9 класс 21

Цикл по переменной
от до (не включая!)
s = 0
for i in range(2,5): s=2+3+4=9
s += i 9
print(s) [2,3,4]
Кумир: Паскаль:
s := 0 s := 0;
нц для i от 2 до 4 for i:=2 to 4 do
s := s + i s := s + i;
кц writeln(s);
вывод s

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 22

Цикл по переменной
[2,3,
s = 8 …,14] ? Сколько раз?

for i in range(2,15): N=15-2=13


s += 5 s=8+5*13=73
print(s) 73
Кумир: Паскаль:
N=14-2+1
s := 8 s := 8;
нц для i от 2 до 14 for i:=2 to 14 do
s := s + 5 s = s + 5;
кц writeln(s);
вывод s

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 23

Что выведет программа?


s = 3
for i in range(5,25):
s += 10
print(s) 203
Кумир: Паскаль:
s := 3 s := 3;
нц для i от 5 до 24 for i:=5 to 24 do
s := s + 10 s = s + 10;
кц writeln(s);
вывод s

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 24

Что выведет программа?


s = 1
for i in range(3,8):
s *= 2
print(s) 32
Кумир: Паскаль:
s := 1 s := 1;
нц для i от 3 до 7 for i:=3 to 7 do
s := s * 2 s = s * 2;
кц writeln(s);
вывод s

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 25

Что выведет программа?


k = 3 k = 3
for i in range(4,8): 2*3+4=10
k = 2*k + i 2*10+5=25
print(k) 2*25+6=56
2*56+7= 119
Кумир: Паскаль:
k := 3 k := 3;
нц для i от 4 до 7 for i:=4 to 7 do
k := 2*k + i k = 2*k + i;
кц writeln(k);
вывод k

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 26

Задачи
«3»: Ввести число N и вывести на экран все
степени числа 2 от 21 до 2N.
Пример:
Введите N:
3
2 4 8

«4»: Найдите все пятизначные числа, которые


при делении на 133 дают в остатке 125, а при
делении на 134 дают в остатке 111.

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 27

Задачи
«5»: Натуральное число называется числом
Армстронга, если сумма цифр числа,
возведенных в N-ную степень (где N –
количество цифр в числе) равна самому
числу. Например, 153 = 13 + 53 + 33. Найдите
все трёхзначные числа Армстронга.

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 28

Задачи
«6»: Простое число – это число, которое делится
только само на себя и на 1. Ввести
натуральное число N и вывести все простые
числа в диапазоне от 2 до N.

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


29

Программирование
на языке Python

2. Обработка потока
данных

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 30

Обработка потока данных (подсчёт)


Задача: с клавиатуры вводятся числа, ввод
завершается числом 0. Определить, сколько
было введено положительных чисел.
1) нужен счётчик ? счётчик?
Когда увеличивать
2) счётчик увеличивается если число > 0
3) нужен цикл
4) ? шагов
это цикл с условием (число Какой цикл?
неизвестно)
счётчик = 0
пока не введён 0:
если введено число > 0:
счётчик += 1
 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru
Python, 9 класс 31

Обработка потока данных (подсчёт)


k=0
x = int(input())
while x != 0: откуда взять x?
if x > 0:
k += 1
x = int(input()) ? Что плохо?
print( k )

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 32

Найди ошибку!
k = 0
x = int(input())
while x != 0:
if x > 0:
k += 1 x = int(input())
print( k )

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 33

Найди ошибку!
k=0 x = int(input())
while x !=
== 0:
if x > 0:
k += 1
x = int(input())
print(k)

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 34

Задачи
«3»: с клавиатуры вводятся числа, ввод завершается
числом 0. Определить, сколько было введено
положительных и сколько отрицательных чисел.
Пример:
5
3
-1
0
Положительных: 2
Отрицательных: 1

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 35

Задачи
«4»: с клавиатуры вводятся числа, ввод завершается
числом 0. Определить, сколько было введено
двузначных натуральных чисел, и сколько других.
Пример:
15
7
13
-12
1
0
Двузначных: 2
Других: 3

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 36

Задачи
«5»: с клавиатуры вводятся числа, ввод завершается
числом 0. Определить, сколько было введено
двузначных натуральных чисел, которые
оканчиваются на «5», и сколько других.
Пример:
15
7
13
-12
0
Двузначные, оканчиваются на 5: 1
Другие: 3

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 37

Задачи
«6»: с клавиатуры вводятся числа, ввод завершается
числом 0. Определить, сколько было введено
простых натуральных чисел (которые делятся только
сами на себя и на 1), и сколько составных.
Пример:
15
7
13
-12
6
0
Простых: 2
Составных: 3

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 38

Обработка потока данных (сумма)


Задача: с клавиатуры вводятся числа, ввод
завершается числом 0. Найти сумму
введённых чисел, оканчивающихся на "5".
1) нужна переменная для суммы
2) число добавляется к сумме, если оно
заканчивается на "5"
3) нужен цикл с условием

сумма = 0
пока не введён 0:
если x оканчивается на "5":
сумма += x

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 39

Обработка потока данных (сумма)


s=0
x = int(input())
while x != 0:
if x % ???
10 == 5 :
s += x
x = int(input()) ? Что плохо?
print( "Ответ:", s )

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 40

"Бесконечный" цикл
s=0
while True:
x = int(input()) выйти из
if x == 0: break
break цикла
if x % 10 == 5:
s += x ? Что плохо?
print( s )

! Выход из цикла while True возможен только через


оператор break!

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 41

Условия отбора
Положительные числа:
if x > 0: ...
Числа, делящиеся на 3:
if x % 3 == 0: ...
Числа, оканчивающиеся на 6:
if x % 10 == 6: ...
Числа, делящиеся на 3 и оканчивающиеся на 6:
if x % 3 == 0 and x % 10 == 6: ...
Двузначные числа:
if 10 <= x and x <= 99: ...
? Как иначе?

if 9 < x and x < 100: ...


 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru
Python, 9 класс 42

Если ни одного числа не нашли…


Задача: с клавиатуры вводятся числа, ввод
завершается числом 0. Найти сумму
введённых чисел, оканчивающихся на "5".
Вывести "нет", если таких чисел нет.

? Как определить, что таких чисел нет?

сумма = 0
счётчик = 0
? Как вывести результат?

пока не введён 0:
если x оканчивается на "5":
сумма += x
счётчик += 1

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 43

Если ни одного числа не нашли…


сумма = 0
счётчик = 0
пока не введён 0:
если x оканчивается на "5":
сумма += x
счётчик += 1
if счётчик == 0:
print("Ответ: нет")
else:
print("Ответ:", s)

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 44

Найди ошибку!
s=0 k=0
x = int(input())
while x != 0: s += x
if x % 10 == 5:
k += 1
if k == 01: x = int(input())
print("Ответ: нет")
else:
print("Ответ:", sk)

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 45

Задачи
«3»: с клавиатуры вводятся числа, ввод завершается
числом 0. Определить сумму тех введённых чисел,
которые делятся на 5.
Пример:
5
3
34
15
0
Ответ: 20

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 46

Задачи
«4»: с клавиатуры вводятся числа, ввод завершается
числом 0. Определить сумму тех введённых чисел,
которые делятся на 3 и заканчиваются на 1. Вывести
"нет", если таких чисел нет.
Пример: Пример:
5 5
31 31
18 18
21 41
15 15
0 0
Ответ: 21 Ответ: нет

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 47

Задачи
«5»: с клавиатуры вводятся числа, ввод завершается
числом 0. Определить, среднее арифметическое тех
введённых двузначных чисел, которые делятся на 5.
Вывести "нет", если таких чисел нет.
Пример: Пример:
5 5
3 3
35 315
185 185
34 34
15 17
0 0
Ответ: 25 Ответ: нет

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 48

Задачи
«6»: с клавиатуры вводятся числа, ввод завершается
числом 0. Определить, среднее арифметическое тех
введённых чисел, которые являются степенями
числа 2. Вывести "нет", если таких чисел нет.
Пример: Пример:
5 5
8 18
185 185
4 44
16 116
0 0
Ответ: 9.333 Ответ: нет

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 49

Поиск максимума (минимума)

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 50

Поиск максимума (минимума)


1) нужна переменная для хранения максимума
2) как только прочитали первое число,
сохранили максимум («из одного»):
x = int(input())
M = x
3) читаем следующее значение:
x = int(input())
4) цикл: если новое число больше максимума,
заменяем M:
while x != 0:
if x > M: M = x
5) выводим результат M
 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru
Python, 9 класс 51

Поиск максимума (минимума)


x = int(input())
M = x
while x != 0:
if x > M: M = x
print(M)
x = int(input())
? Что плохо?

print(M)

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 52

Поиск максимума (минимума) – II


x = int(input())
M = x
while True:
x = int(input())
if x == 0: break
? Что плохо?

if x > M: M = x
print(M)
print(M)

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 53

Максимум не из всех
Задача: с клавиатуры вводятся числа в
диапазоне [-100;100], ввод завершается
числом 0. Найти наибольшее среди чётных
чисел. Вывести "нет", если таких чисел нет.
x = int(input()) Может быть, что
M = x x нечётное!
while x != 0:
if x % 2 == ???
0 and x > M:
M = x
x = int(input())
print(M)
? Что плохо?

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 54

Минимум не из всех
По условию: x  [-100;100]

x = int(input()) Любое x больше


M = -1000 этого числа!
while x != 0:
if x % 2 == 0 and x > M:
M = x
x = int(input())
? Как определить, что
ни одного числа не
if M == -1000: нашли?
print("Нет таких чисел")
else:
print(M)
? Как искать минимум?

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 55

Если диапазон неизвестен…


x = int(input())
count
count == 00
while x != 0:
if x % 2 == 0:
count
count +=+= 11 первое
if count
count ==== 00 :
M = x
else: новый
if x > M: M = x максимум
x = int(input())
if count
count ==== 00 :
print("Нет таких чисел")
else:
print(M)
 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru
Python, 9 класс 56

Задачи
«3»: с клавиатуры вводятся числа, ввод завершается
числом 0. Определить минимальное и
максимальное из введённых чисел.
Пример:
5
13
34
15
0
Минимум: 5
Максимум: 34

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 57

Задачи
«4»: с клавиатуры вводятся числа, ввод завершается
числом 0. Определить минимальное и
максимальное из тех введённых чисел, которые
делятся на 3. Вывести "нет", если таких чисел нет.
Пример: Пример:
5 5
31 34
18 17
21 41
15 11
0 0
Минимум: 15 Ответ: нет
Максимум: 21

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 58

Задачи
«5»: с клавиатуры вводятся числа, ввод завершается
числом 0. Определить минимальное и
максимальное из тех введённых двузначных
натуральных чисел, которые оканчиваются на 6.
Вывести "нет", если таких чисел нет.
Пример: Пример:
6 6
36 32
18 176
26 41
15 11
0 0
Минимум: 26 Ответ: нет
Максимум: 36

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 59

Задачи
«6»: с клавиатуры вводятся числа, ввод завершается
числом 0. Определить минимальное из введённых
чисел Фибоначчи. Вывести "нет", если чисел
Фибоначчи в последовательности нет.
Числа Фибоначчи – это последовательность чисел, которая начинается
с двух единиц и каждое следующее число равно сумме двух
предыдущих: 1, 1, 2, 3, 5, 8, 13, …
Пример: Пример:
5 6
36 32
12 176
26 41
13 11
0 0
Ответ: 5 Ответ: нет
 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru
60

Программирование
на языке Python

3. Обработка потока
данных (цикл for)

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 61

Обработка потока данных (N чисел)


Задача: с клавиатуры вводится число N, а
затем – N целых чисел. Определить, сколько
было введено положительных чисел.

? В чём отличие? задано количество!

ввести N в Python нет


счётчик = 0 такого!
сделай N раз:
ввести число ! Есть цикл for!

если введено число > 0:


счётчик += 1
вывести счётчик

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 62

Обработка потока данных (N чисел)


сделай N раз: for i in range(N):
... ...

! range(N) = [0, 1, 2, …, N-2, N-1 ]

N раз
for i in range(4): s = 0
print(i) for i in range(4):
0 s += i
1 ? Что выведет? print(s)
2 6
3
 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru
Python, 9 класс 63

Обработка потока данных (N чисел)


N = int(input())
k = 0 сделай N
for i in range(N): раз!
x = int(input())
if x > 0: k += 1
print(k)
Числа, делящиеся на 3:
if x % 3 == 0: k += 1
Числа, оканчивающиеся на 6:
if x % 10 == 6: k += 1
Числа, делящиеся на 3 и оканчивающиеся на 6:
if x % 3 == 0 and x % 10 == 6: k += 1
 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru
Python, 9 класс 64

Задачи
«3»: с клавиатуры вводится число N, а затем – N целых
чисел. Определить, сколько было введено
положительных и сколько отрицательных чисел
(нули не считать!).
Пример:
5
1
3
-34
15
0
Положительных: 3
Отрицательных: 1

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 65

Задачи
«4»: с клавиатуры вводится число N, а затем – N целых
чисел. Определить сумму двузначных чисел (как
положительных, так и отрицательных). Если
двузначных чисел не было, вывести "нет".

Пример: Пример:
5 5
1 1
13 213
-34 -134
5 5
31 3
Ответ: 10 Ответ: нет

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 66

Задачи
«5»: с клавиатуры вводится число N, а затем – N целых
чисел. Определить минимальное и максимальное
среди двузначных чисел, которые делятся на 3. Если
таких чисел не было, вывести "нет".
Пример: Пример: Пример:
5 5 5
18 1 1
33 -18 23
98 -6 132
513 -21 6
31 32 32
Минимум: 18 Минимум: -21 Ответ: нет
Максимум: 33 Максимум: -18

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 67

Задачи
«6»: с клавиатуры вводится число N, а затем – N
натуральных чисел. Определить минимальное и
максимальное среди простых чисел (которые
делятся на сами не себя и на 1). Если таких чисел не
было, вывести "нет".
Пример: Пример:
5 5
41 12
15 25
198 132
163 6
39 39
Минимум: 5 Ответ: нет
Максимум: 163

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


68

Программирование
на языке Python

4. Обработка массивов

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 69

Массивы (списки) в Python


Создание массива:
A = [1, 5, 0, -1, 12] print(A[1])
A[0] A[2] A[4] 5
A[1] A[3]
print(2*A[0]+A[3])
1
A = 5*[0] A = [0,0,0,0,0]

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 70

Вывод массива на экран


Как список:
print ( A ) [1, 2, 3, 4, 5]
В строчку через пробел:
for i in range(N):
print ( A[i], end = " " ) 1 2 3 4 5
пробел после
или так: вывода очередного
for x in A: числа
1 2 3 4 5
print ( x, end = "
или "так:
)
print ( *A ) print (1, 2, 3, 4, 5)
разбить список
на элементы
 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru
Python, 9 класс 71

Заполнение случайными числами


from random import randint
A = [] наращиваем с
for i in range(5): каждым шагом
A.append(randint(1,6))
print(A)
Или так: ? В чём отличие?

from random import randint


A = 5*[0] сначала выделили
for i in range(5): память, потом
A[i] = randint(1,6) меняем
print(A)

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 72

Подсчёт элементов
A = [1, 2, 3, 4, 5, 6, 7]
k = 0
for i in range(7): ? Что выведет?

if A[i] > 3: k += 1
print(k) 4
Кумир: Паскаль:
k := 0 k := 0;
нц для i от 1 до 7 for i:=1 to 7 do
если A[i] > 3 то if A[i] > 3 then
k := k + 1 k = k + 1;
все writeln(k);
кц
вывод k !
Элементы массива нумеруются с 1!

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 73

Подсчёт элементов
A = [1, 21, 3, 46, 53, 6, 17]
k = 0
for i in range(7): ? Что выведет?

if A[i] % 3 == 0: k += 1
print(k) 3
Варианты условий:
if A[i] % 10 == 6: k += 1 2
if(A[i] % 10 == 6 and
A[i] % 3 == 0): k += 1 1
if(A[i] >= 10 and
A[i] < 100): k += 1 4
 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru
Python, 9 класс 74

Суммирование элементов
A = [1, 21, 3, 46, 53, 6, 118]
s = 0
for i in range(7): ? Что выведет?

if A[i] % 3 == 0: s += A[i]
print(s) 30
Варианты условий:
if A[i] % 10 == 6: s += A[i] 52
if(A[i] % 10 == 6 and
A[i] % 3 == 0): s += A[i] 6
if(A[i] >= 10 and
A[i] < 100): s += A[i] 120
 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru
Python, 9 класс 75

Задачи
«3»: Напишите программу, которая находит в массиве
количество элементов, делящихся на 5.

«4»: Напишите программу, которая находит среднее


арифметическое всех элементов массива, которые
делятся на 3 и заканчиваются на 1.

«5»: Напишите программу, которая находит среднее


арифметическое всех элементов массива, двоичная
запись которых содержит ровно 4 цифры.

«6»: Напишите программу, которая находит элемент


массива, двоичная запись которого содержит
больше всего единиц.

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 76

Максимум
A = [1, 21, 3, 46, 53, 6, 117]
m = 0 меньше всех
for i in range(7): ? Что выведет?

if A[i] > m: m = A[i]


print(m) 117
Кумир: Паскаль:
m := 0 m := 0;
нц для i от 1 до 7 for i:=1 to 7 do
если A[i] > m то if A[i] > m then
m := A[i] m = A[i];
все writeln(m);
кц
вывод m
 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru
Python, 9 класс 77

Минимум
A = [1, 21, 3, 46, 53, 6, 117]
m = 999 больше всех
for i in range(7): ? Что выведет?

if A[i] < m: m = A[i]


print(m) 1
Кумир: Паскаль:
m := 999 m := 999;
нц для i от 1 до 7 for i:=1 to 7 do
если A[i] < m то if A[i] < m then
m := A[i] m = A[i];
все writeln(m);
кц
вывод m
 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru
Python, 9 класс 78

Если значения в массиве неизвестны…


A = [...как-то получили...]
N = len(A) # длина массива
A[0]
m = ???
for i in range(N): ? Что записать в m?

if A[i] < m: m = A[i]


print(m)
? Как сэкономить один шаг цикла?

for i in range (1,N)


(1,N):
...
пропустить
A[0]
Python: m = min(A)
 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru
Python, 9 класс 79

Задачи
«3»: Напишите программу, которая находит
минимальный и максимальный из чётных элементов
массива. Гарантируется, что все элементы массива
находятся в диапазоне [-100;100] и среди них есть
хотя бы один чётный элемент.

«4»: Напишите программу, которая находит


минимальный и максимальный из элементов
массива, заканчивающихся на "5". Если в массиве
нет таких элементов, нужно вывести слово "нет".

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 80

Задачи
«5»: Напишите программу, которая находит
минимальный из чётных элементов массива и его
номер. Если в массиве нет таких элементов, нужно
вывести слово "нет".
Пример:
Массив: [1, 12, 3, 4, 5, 18, 24]
Минимум: A[3] = 4
Пример:
Массив: [1, 13, 3, 19, 5, 71, 241]
Минимум: нет

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 81

Сортировка
Сортировка – это расстановка элементов массива в
заданном порядке (возрастания, убывания, …).
Было:
9 6 2 7 3 1 5 4 8 0
Стало:
0 1 2 3 4 5 6 7 8 9

! Основная операция –
перестановка элементов!

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 82

Перестановка элементов

Задача: поменять местами 2


содержимое двух чашек. 1

3
Задача: поменять местами
содержимое двух ячеек памяти. x y
c = x 4
6 2 6
4
x = y
x = y
y = x
y = c

3
? Можно ли обойтись без c? ?
4

Python: x, y = y, x
 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru
Python, 9 класс 83

Метод выбора (минимального элемента)


4 1 1 1
3 3 2 2
1 4 4 3
2 2 3 4

Идея:
• найти минимальный элемент и поставить на первое
место (поменять местами с A[0])
• из оставшихся найти минимальный элемент и
поставить на второе место (поменять местами с
A[1]), и т.д.
N-1
? Сколько раз сделать цикл?

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 84

Как найти номер минимального элемента?


A = [1, 21, 3, -46, 53, -6, 117]
N = len(A) # длина массива
m = A[0] # считаем A[0] = min
nM = 0 # номер минимального
for i in range(N):
if A[i] < m:
m = A[i]
nM = i # новый номер
print(nM)

? Нельзя ли обойтись без переменной m?

m = A[nM]
 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru
Python, 9 класс 85

Как найти номер минимального элемента?


A = [1, 21, 3, -46, 53, -6, 117]
N = len(A) # длина массива
nM = 0 # номер минимального
for i in range(N):
if A[i] < A[nM]
A[nM]:
nM = i # новый номер
print(nM)
часть
алгоритма
сортировки

Python: m = min(A)
nM = A.index(m)
 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru
Python, 9 класс 86

Сортировка выбором
A = [1, 21, 3, -46, 53, -6, 117]
N = len(A) # длина массива
for k in range(N-1): поиск
nM = k
0 минимального
(k,N):
for i in range(N):
if A[i] < A[nM]: перестановка
nM = i
A[k],A[nM] = A[nM],A[k]
print(A)

? Почему эта программа не работает?


Python:
искать минимальный, A.sort()
начиная с номера k!
 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru
Python, 9 класс 87

Задания
«3»: Заполнить массив из 10 элементов случайными
числами в интервале [0..99] и отсортировать его по
убыванию последней цифры.
Пример:
Исходный массив:
14 25 13 12 76 58 21 87 10 98
Результат:
98 58 87 76 25 14 13 12 21 10

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 88

Задания
«4»: Заполнить массив из 10 элементов случайными
числами в интервале [0..99] и отсортировать его по
возрастанию суммы цифр (подсказка: их всего две).
Пример:
Исходный массив:
14 25 13 12 76 58 21 87 10 98
Результат:
10 21 12 13 14 25 76 58 87 98

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 89

Задания
«5»: Заполнить массив из 10 элементов случайными
числами в интервале [0..100] и отсортировать
первую половину по возрастанию, а вторую – по
убыванию.
Пример:
Исходный массив:
14 25 13 30 76 58 32 11 41 97
Результат:
13 14 25 30 76 97 58 41 32 11

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


90

Программирование
(Python)
Как разрабатывают
программы?

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 91

Этапы разработки программ


I. Постановка задачи
Документ: техническое задание.
II. Построение модели
исходные данные результаты
модель

Формализация: запись модели в виде формул (на


формальном языке).
III. Разработка алгоритма и способа
хранения данных
«Алгоритмы + структуры данных = программы»
(Н. Вирт)

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 92

Этапы разработки программ


IV. Кодирование
Запись алгоритма на языке программирования.
алгоритм программный
кодирование код

V. Отладка
Поиск и исправление ошибок в программах:
• синтаксические – нарушение правил языка
программирования
• логические – ошибки в алгоритме
могут приводить к отказам – аварийным ситуациям
во время выполнения (run-time error)

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 93

Этапы разработки программ


VI. Тестирование
Тщательная проверка программы во всех режимах:
• альфа-тестирование – внутри компании
(тестировщики)
• бета-тестирование – (доверенные) пользователи
VII. Документирование
Технические писатели
VIII. Внедрение и сопровождение
• обучение пользователей
• исправление найденных ошибок
• техподдержка

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 94

Методы проектирования программ


«Сверху вниз» (последовательное уточнение)
Задача

Подзадача 1 Подзадача 2 Подзадача 3

1.1 1.2 2.1 2.2 2.3 3.1 3.2

30-40 строк каждая

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 95

Методы проектирования программ


«Сверху вниз» (последовательное уточнение)
 сначала задача решается «в целом»
 легко распределить работу
 легче отлаживать программу (всегда есть
полный работающий вариант)
 в нескольких подзадачах может потребоваться
решение одинаковых подзадач нижнего уровня
 быстродействие не известно до последнего
этапа (определяется нижним уровнем)

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 96

Методы проектирования программ


«Снизу вверх» (восходящее)
Задача

Подзадача 1 Подзадача 2 Подзадача 3

1.1 1.2 2.1 2.2 2.3 3.1 3.2

библиотека функций

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 97

Методы проектирования программ


«Снизу вверх» (восходящее)
 нет дублирования
 сразу видно быстродействие
 сложно распределять работу
 сложнее отлаживать (увеличение числа связей)
 плохо видна задача «в целом», может быть
нестыковка на последнем этапе

! Почти всегда используют оба подхода!

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 98

Отладка программы
Программа решения квадратного уравнения
2
ax  bx  c 0
from math import sqrt
print("Введите a, b, c: ")
a = float(input()) float – преобразовать в
b = float(input()) вещественное число
c = float(input())
D = b*b - 4*a*a
x1 = (-b+sqrt(D))/2*a
x2 = (-b-sqrt(D))/2*a
print("x1=", x1, " x2=", x2, sep="")

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 99

Тестирование
Тест 1. a = 1, b = 2, c = 1.
Ожидание: Реальность:
x1=-1.0 x2=-1.0 x1=-1.0 x2=-1.0

Тест 2. a = 1, b = – 5, c = 6.
x1=3.0 x2=2.0 x1=4.791 x2=0.209

Найден вариант, когда программа работает неверно.


Ошибка воспроизводится!
Возможные причины:
• неверный ввод данных D b 2  4ac
• неверное вычисление дискриминанта
 b D
• неверное вычисление корней x1, 2 
• неверный вывод результатов 2a

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 100

Отладочная печать
Идея: выводить все промежуточные результаты.
a = float(input())
b = float(input())
c = float(input())
print(a, b, c)
D = b*b - 4*a*a
print("D=", D)
...

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 101

Отладочная печать
Идея: выводить все промежуточные результаты.
Результат:
Введите a, b, c:
1
-5
6
1.0 -5.0 6.0
D= 21.0
D b 2  4ac 25  4 1 6 1
D = b*b - 4*a* с ;
! Одна ошибка найдена!

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 102

Отладка программы
Тест 1. a = 1, b = 2, c = 1.
Ожидание: Реальность:
x1=-1.0 x2=-1.0 x1=-1.0 x2=-1.0

Тест 2. a = 1, b = – 5, c = 6.
x1=3.0 x2=2.0 x1=3.0 x2=2.0

? Программа работает верно?

Тест 3. a = 8, b = – 6, c = 1.
x1=0.5 x2=0.25 x1=32.0 x2=16.0

(2*a)
x1 = (-b+sqrt(D))/2*a
x2 = (-b-sqrt(D))/2*a
(2*a)
? Что неверно?

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 103

Документирование программы
• назначение программы
• формат входных данных
• формат выходных данных
• примеры использования программы
Назначение:
программа для решения уравнения
2
ax  bx  c 0
Формат входных данных:
значения коэффициентов a, b и c вводятся с
клавиатуры через пробел в одной строке

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 104

Документирование программы
Формат выходных данных:
значения вещественных корней уравнения;
если вещественных корней нет, выводится
слово «нет»
Примеры использования программы:
2
1. Решение уравнения x  5 x  6 0
Введите a, b, c: 1 -5 6
x1=4.791288 x2=0.208712
2
2. Решение уравнения x  x  6 0
Введите a, b, c: 1 1 6
Нет.

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


105

Программирование
(Python)
Процедуры

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 106

Два типа подпрограмм


Подпрограммы

Процедуры Функции
выполняют действия + возвращают некоторый
результат
? Процедура или функция?
а) рисует окружность на экране
б) определяет площадь круга
в) вычисляет значение синуса угла
г) изменяет режим работы программы
д) возводит число x в степень y
е) включает двигатель автомобиля
ж) проверяет оставшееся количество бензина в баке
з) измеряет высоту полёта самолёта
 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru
Python, 9 класс 107

Простая процедура
define – определить

def printLine():
print("----------") ? Что делает?
... вызов
printLine() процедуры
...
какие-то
операторы

 можно вызывать сколько угодно раз


 нет дублирования кода
 изменять – в одном месте

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 108

Линии разной длины


def printLine5():
print("-----") ? Как улучшить?

def printLine10():
print("----------")

параметр
def printLine10(): процедуры
print("-"*10)

def printLine( n ):
print("-"*n)

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 109

Процедура с параметром
Параметр – величина, от
которой зависит
работа процедуры.
def printLine( n ):
...
... ? Что делает?
printLine(10)
...
printLine(7) Аргумент – значение
printLine(5) параметра при
printLine(3) конкретном вызове.

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 110

Несколько параметров
символьная строка
def printLine(c, n):
? Что изменилось?

print(c*n)

? Как вызывать?

printLine( "+", 5 )
printLine( "+-+", 5 )
printLine( 5, "+" )

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 111

В других языках программирования


Паскаль:
procedure printLine(c: string; n: integer);
var i: integer;
begin
for i:=1 to n do
write(c);
writeln
end;

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 112

В других языках программирования


С:
void printLine(int n)
{
int i;
for (i=1; i<=n; i++)
putchar("-");
putchar("\n");
}

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 113

Задачи
«3»: Напишите процедуру, которая принимает параметр –
натуральное число N – и выводит на экран две линии из
N символов "–".
Пример:
Длина цепочки: 7
-------
-------
«4»: Напишите процедуру, которая принимает один
параметр – натуральное число N, – и выводит на
экран прямоугольник длиной N и высотой 3
символа.
Пример:
Длина прямоугольника: 7
ooooooo
o o
ooooooo
 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru
Python, 9 класс 114

Задачи
«5»: Напишите процедуру, которая выводит на экран
квадрат со стороной N символов. При запуске
программы N нужно ввести с клавиатуры.
Пример:
Сторона квадрата: 5
ooooo
o o
o o
o o
ooooo

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 115

Задачи
«6»: Напишите процедуру, которая выводит на экран
треугольник со стороной N символов. При запуске
программы N нужно ввести с клавиатуры.
Пример:
Сторона: 5
o
oo
ooo
oooo
ooooo

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 116

Рекурсия
Задача. Вывести на экран двоичный код натурального
числа.
def printBin( n ):
...
Алгоритм перевода через остатки:
while n!=0:
print(n % 2, end="") ? Что получится
при n = 6?
n = n // 2

011 в обратном порядке!

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 117

Рекурсия
Чтобы вывести двоичную запись числа n, нужно сначала
вывести двоичную запись числа (n // 2), а за-
тем — его последнюю двоичную цифру, равную
(n % 2).
двоичная запись числа 6

110 6 % 2 ! Чтобы решить задачу,


нужно решить ту же
задачу
двоичная запись числа 3 для меньшего числа!

Это и есть рекурсия!

! Чтобы понять рекурсию, нужно понять рекурсию! 

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 118

Рекурсивная процедура
def printBin( n ): вызывает сама себя!
printBin(n % 2)
print(n % 2, end = "")

Рекурсивная процедура — это процедура, которая


вызывает сама себя.

printBin(6) ? Что получится? printBin(6)

printBin(3)
бесконечные вызовы
printBin(1)
printBin(0)
printBin(0) ? Как исправить?

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 119

Рекурсивная процедура
def printBin( n ):
if n = 0: return ? Что получится?
printBin(6)
printBin(n // 2)
print(n % 2)

printBin(6)
printBin(3) рекурсия
заканчивается!
printBin(1)
printBin(0) 110
print(1 % 2)
print(3 % 2)
print(6 % 2)

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 120

Задачи
«A»: Напишите рекурсивную процедуру, которая
переводит число в восьмеричную систему.
Пример:
Введите число: 66
В восьмеричной: 102
«B»: Напишите рекурсивную процедуру, которая
переводит число в любую систему счисления с
основанием от 2 до 9.
Пример:
Введите число: 75
Основание: 6
В системе с основанием 6: 203

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 121

Задачи
«С»: Напишите рекурсивную процедуру, которая
переводит число в шестнадцатеричную систему.
Пример:
Введите число: 123
В шестнадцатеричной: 7B
«D»: Напишите рекурсивную процедуру, которая
переводит число в любую систему счисления с
основанием от 2 до 36.
Пример:
Введите число: 350
Основание: 20
В системе с основанием 20: HA

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


122

Программирование
(Python)
Функции

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 123

Что такое функция?


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

цел a, b вещ r
исходные данные
Avg результат
целые
? Тип результата?
def Avg(a, b):
return (a+b)/2 результат
функции
return – вернуть

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 124

Как вызывать функцию?


Запись результата в переменную:
sr = Avg(5, 8) 6.5
? Чему равно?

x = 2; y = 5
sr = Avg(x, 2*y+8) 10
Вывод на экран:
x = 2; y = 5
sr = Avg(x, y+3) 5
print( Avg(12,7) ) 9.5
print( sr + Avg(x,12) ) 12

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 125

Как вызывать функцию?


Использование в условных операторах:
a = int(input())
b = int(input())
if Avg(a,b) > 5:
print("Да!")
else: ? Когда печатает «Да»?
print("Нет!");

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 126

Как вызывать функцию?


Использование в циклах:
a = int(input())
b = int(input())
while Avg(a,b) > 0: ввод двух чисел в
одной строчке
print("Нет!")
a,b = map(int, input().split())
print("Угадал!");

? Когда напечатает «Угадал»?

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 127

В других языках программирования


Паскаль:
function Avg(a, b: integer): real;
begin
Avg:=(a+b)/2
Avg
end.
специальная переменная для
записи результата функции
С:
float Avg(int a, int b)
{
return (a+b)/2.0;
}

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 128

Максимум из двух (трёх) чисел


Задача. Составить функцию, которая определяет
наибольшее из двух целых чисел.
цел a, b цел r
исходные данные
Max результат

def Max(a,
if a > b
b):
then
? Как с её помощью найти
максимум из трёх?
return a
else:
return b
def Max3(a, b, c):
return Max( Max(a,b), c )

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 129

Сумма цифр числа


Задача. Составить функцию, которая вычисляет сумму
значений цифр натурального числа.
def sumDigits( N ):
sum = 0 # накапливаем сумму с 0
while N!=0:
d = N % 10 # выделим последнюю цифру
sum += d # добавим к сумме
N = N // 10 # удалим последнюю цифру
return sum
Вызов процедуры:
m = int(input())
s = sumDigits( m )
print( s )

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 130

Задачи
«A»: Напишите функцию, которая вычисляет среднее
арифметическое пяти целых чисел.
Пример:
Введите 5 чисел: 1 2 3 4 6
Среднее: 3.2
«B»: Напишите функцию, которая находит количество
цифр в десятичной записи числа.
Пример:
Введите число: 751
Количество цифр: 3

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 131

Задачи
«С»: Напишите функцию, которая находит количество
нулей в двоичной записи числа.
Пример:
Введите число: 75
Количество нулей: 3

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 132

Логические функции
Логическая функция — это функция, возвращающая
логическое значения (да или нет).
• можно ли применять операцию?
• успешно ли выполнена операция?
• обладают ли данные каким-то свойством?

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 133

Логические функции
Задача. Составить функцию, которая возвращает
«True», если она получила чётное число и «False»,
если нечётное.
def Even( N ):
if N % 2 == 0:
def Even( N ):
return True
return (N % 2 == 0)
else:
return False

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 134

Рекурсивные функции
Рекурсивная функция — это функция, которая
вызывает сама себя.
Задача. Составить рекурсивную функцию, которая
вычисляет сумму цифр числа.

? Как сформулировать решение рекурсивно?


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

sumDig(12345) = 5 + sumDig(1234)

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 135

Рекурсивная функция
Сумма цифр числа N
Вход: натуральное число N. последняя цифра
Шаг 1: d = N % 10
Шаг 2: M = N // 10 число без
последней цифры
Шаг 3: s = сумма цифр числа M
Шаг 4: sum = s + d
Результат: sum.

? Что забыли? ? Когда остановить?

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 136

Сумма цифр числа (рекурсия)


def sumDigRec( N ):
if N == 0: return 0
else:
? Зачем это?

d = N % 10
sum = sumDigRec(N // 10)
return sum + d

? Где рекурсивный вызов?

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 137

Задачи
«A»: Напишите логическую функцию, которая
возвращает значение «истина», если десятичная
запись числа заканчивается на цифру 0 или 1.
Пример:
Введите число: 1230
Ответ: Да
«B»: Напишите логическую функцию, которая
возвращает значение «истина», если переданное ей
число помещается в 8-битную ячейку памяти.
Пример:
Введите число: 751
Ответ: Нет

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 138

Задачи
«C»: Напишите логическую функцию, которая
возвращает значение «истина», если переданное ей
число простое (делится только на само себя и на
единицу).
Пример:
Введите число: 17
Число простое!
Пример:
Введите число: 18
Число составное!

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru


Python, 9 класс 139

Конец фильма

ПОЛЯКОВ Константин Юрьевич


д.т.н., учитель информатики
ГБОУ СОШ № 163, г. Санкт-Петербург
[email protected]

 К.Ю. Поляков, 2017 http://kpolyakov.spb.ru

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