Similar presentations:
8-3py_Основы программирования (Python)
1. Программирование (Python)
1Программирование
(Python)
§ 17. Введение
§ 18. Линейные программы
§ 19. Ветвления
§ 20. Программирование циклических
алгоритмов
§ 21. Массивы
§ 22. Алгоритмы обработки массивов
§ 23. Символьные строки
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
2. Программирование (Python)
2Программирование
(Python)
§ 17. Введение
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
3. Что такое программирование?
Программирование (Python), 8 класс3
Что такое программирование?
Программирование — это создание программ для
компьютеров. Этим занимаются программисты.
Чем занимаются программисты:
анализ задачи (выделение
исходных данных, связей
между ними, этапов решения
задачи)
системные аналитики
разработка алгоритмов
алгоритмисты
написание и отладка программ
кодировщики
тестирование программ
тестировщики
написание документации
технические писатели
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
4. Направления в программировании
Программирование (Python), 8 класс4
Направления в программировании
системный программист
операционные системы,
утилиты, драйверы
прикладной программист
прикладные программы, в
т.ч. для мобильных
устройств
веб-программист
веб-сайты
программист баз данных
системы управления
базами данных
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
5. Простейшая программа
Программирование (Python), 8 класс5
Простейшая программа
# Это пустая программа
? Что делает эта программа?
комментарии после #
не обрабатываются
кодировка utf-8
по умолчанию)
# coding: utf-8
# Это пустая программа
"""
Это тоже комментарий
"""
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
6. Вывод на экран
Программирование (Python), 8 класс6
Вывод на экран
оператор
вывода
Оператор — это команда
языка программирования.
print( "Привет!" )
print( "Привет", Вася! )
? Что плохо?
print( "Привет, Вася!" )
вся строка в
кавычках
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
7. Переход на новую строку
Программирование (Python), 8 класс7
Переход на новую строку
print( "Привет, Вася!" )
print( "Привет, Петя!" )
Результат:
Привет, Вася!
Привет, Петя!
переход на новую
строку автоматически
Нужно в одной строке:
Привет, Вася!Привет, Петя!
Решение:
print( "Привет, Вася!", end="" )
print( "Привет, Петя!" )
после вывода данных
ничего не выводить
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
8. Системы программирования
Программирование (Python), 8 класс8
Системы программирования
Системы программирования — это средства для
создания новых программ.
Транслятор — это программа, которая переводит
тексты программ, написанных программистом, в
машинные коды (команды процессора).
• компилятор — переводит всю программу в
машинные коды, строит исполняемый файл (.exe)
program Hello;
begin
write('Привет!')
end.
1010010100
privet.exe
• интерпретатор — сам выполняет программу по
частям (по одному оператору).
! Python – интерпретатор!
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
9. Системы программирования
Программирование (Python), 8 класс9
Системы программирования
Отладчик — это программа для поиска ошибок в других
программах.
• пошаговый режим — выполнение программы по
шагам (по одному оператору)
• просмотр значений переменных во время
выполнения программы
• точки останова – операторы в программе, перед
выполнением которых нужно остановиться.
Среда программирования (IDE):
• редактор текста программ
• транслятор
• отладчик
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
10. Задачи
Программирование (Python), 8 класс10
Задачи
«B»: Вывести на экран текст «лесенкой»
Вася
пошел
гулять
«C»: Вывести на экран рисунок из букв
Ж
ЖЖЖ
ЖЖЖЖЖ
ЖЖЖЖЖЖЖ
HH HH
ZZZZZ
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
11. Программирование (Python)
11Программирование
(Python)
§ 18. Линейные программы
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
12. Пример задачи
Программирование (Python), 8 класс12
Пример задачи
Задача. Ввести два числа и вычислить их сумму.
# ввести два числа
# вычислить их сумму
# вывести сумму на экран
? Выполнится?
Псевдокод – алгоритм на
русском языке с элементами
языка программирования.
! Компьютер не может исполнить псевдокод!
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
13. Зачем нужны переменные?
Программирование (Python), 8 класс13
Зачем нужны переменные?
# ввести два числа
Где запомнить?
# вычислить их сумму
# вывести сумму на экран
Переменная — это величина, которая имеет имя, тип и
значение. Значение переменной может изменяться во
время выполнения программы.
a
b
c
ячейки памяти
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
14. Имена переменных
Программирование (Python), 8 класс14
Имена переменных
Идентификатор — это имя программы или переменной.
a
b
c
заглавные и строчные
буквы различаются
МОЖНО использовать
• латинские буквы (A-Z, a-z)
• цифры
!
Имя не может начинаться с цифры!
• знак подчеркивания _
НЕЛЬЗЯ использовать скобки, знаки ", &, |, *, +, =, !, ? и др.
Какие имена правильные?
AXby R&B 4Wheel Вася “PesBarbos”
TU154 [QuQu] _ABBA A+B
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
15. Работа с переменными
Программирование (Python), 8 класс15
Работа с переменными
Присваивание (запись значения)
a = 5
a = 5
a = 18
оператор
присваивания
a ←5
? Что будет храниться в a?
Вывод на экран
print(a) ? В чём разница?
с = 14
print(c)
с = 14
print("с")
14
c
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
16. Работа с переменными
Программирование (Python), 8 класс16
Работа с переменными
Изменение значения
i = i + 1
a = 4
b = 7
a = a + 1
b = b + 1
a = a + b
b = b + a
a = a + 2
b = b + a
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
увеличить на 1
a
4
b
i ← i + 1
Python:
a, b = 4, 7
7
5
8
13
21
15
36
a += 1
b += 1
a += b
b += a
a += 2
b += a
http://kpolyakov.spb.ru
17. Ввод с клавиатуры
Программирование (Python), 8 класс17
Ввод с клавиатуры
Цель – изменить исходные данные, не меняя программу.
5
a = input()
! 1. Программа ждет, пока пользователь введет
значение и нажмет Enter.
2. Введенное значение записывается в
переменную a.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
18. Ввод с клавиатуры
Программирование (Python), 8 класс18
Ввод с клавиатуры
ввести строку с клавиатуры
и связать с переменной a
a = input()
b = input()
Протокол:
21
33
2133
с = a + b
print ( c )
? Почему?
! Результат функции input – строка символов!
преобразовать в
целое число
a = int( input() )
b = int( input() )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
19. Ввод с подсказкой
Программирование (Python), 8 класс19
Ввод с подсказкой
Введите число: 26
a = input( "Введите число: " )
?
подсказка
Что не так?
a = int( input("Введите число: ") )
? Что будет?
преобразовать
в целое число
Введите число: Qu-Qu
ValueError: invalid literal for int() with base 10: 'Qu-Qu'
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
20. Ввод вещественных чисел
Программирование (Python), 8 класс20
Ввод вещественных чисел
print( "Введите число:" )
x = float (input())
или так:
x = float (input("Введите число:"))
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
21. Программа сложения чисел
Программирование (Python), 8 класс21
Программа сложения чисел
? Что плохо?
a = int ( input() )
b = int ( input() )
c=a+b
print ( c )
ожидание:
реальность:
Введите два числа:
5
7
5+7=12
5
7
12
? Как улучшить диалог?
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
22. Вывод данных с текстом
Программирование (Python), 8 класс22
Вывод данных с текстом
значение b
значение a
значение с
5+7=12
текст
print(a, "+", b, "=", c)
ожидание:
реальность:
5+7=12
5 + 7 = 12
это пробелы не заказывали!
print(a, "+", b, "=", c, sep="" )
separator
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
пустой
http://kpolyakov.spb.ru
23. Вывод данных с текстом (f-строки)
Программирование (Python), 8 класс23
Вывод данных с текстом (f-строки)
значение b
значение a
значение с
5+7=12
текст
имена переменных в
фигурных скобках
print( f "{a}+{b}={c}" )
форматная
строка
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
24. Программа сложения чисел
Программирование (Python), 8 класс24
Программа сложения чисел
print ( "Введите два числа: " )
a = int ( input() )
b = int ( input() )
c=a+b
print ( f"{a}+{b}={c}" )
? Как переделать для 3-х чисел?
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
25. Ввод двух чисел в одной строке
Программирование (Python), 8 класс25
Ввод двух чисел в одной строке
a, b = map ( int, input().split() )
21 33 input()
ввести строку с клавиатуры
21 33 input().split()
целые
применить
разделить строку на
части по пробелам
21 33 map ( int, input().split() )
эту
операцию
к каждой части
a, b = map ( int, input().split() )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
26. Задачи
Программирование (Python), 8 класс26
Задачи
«A»: Ввести три числа, найти их сумму.
Пример:
Введите три числа:
4
5
7
4+5+7=16
«B»: Ввести три числа, найти их сумму и
произведение.
Пример:
Введите три числа:
4
5
7
4+5+7=16
4*5*7=140
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
27. Задачи
Программирование (Python), 8 класс27
Задачи
«C»: Ввести три числа, найти их сумму, произведение
и среднее арифметическое.
Пример:
Введите три числа:
4
5
7
4+5+7=16
4*5*7=140
(4+5+7)/3=5.333333
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
28. Арифметические выражения
Программирование (Python), 8 класс28
Арифметические выражения
c b 1
a
d
2
Линейная запись (в одну строку):
a = (c + b - 1) / 2 * d
Операции: + –
* – умножение
/ – деление
** – возведение в степень (x2 x**2)
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
29. Порядок выполнения операций
Программирование (Python), 8 класс29
Порядок выполнения операций
3
1
2
4
5
6
a = (c + b**5*3 - 1) / 2 * d
Приоритет (старшинство):
1) скобки
2) возведение в степень **
3) умножение и деление
4) сложение и вычитание
a = (c + b**5*3 - 1) \
/2*d
a = (c + b**5*3
- 1) / 2 * d
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
c b5 3 1
a
d
2
перенос на
следующую строку
перенос внутри
скобок разрешён
http://kpolyakov.spb.ru
30. Деление
Программирование (Python), 8 класс30
Деление
Классическое деление:
a = 9; b = 6
x = 3 / 4
# = 0.75
x = a / b
# = 1.5
x = -3 / 4 # = -0.75
x = -a / b # = -1.5
Целочисленное деление (округление «вниз»!):
a = 9; b = 6
x = 3 // 4
# = 0
x = a // b
# = 1
x = -3 // 4 # = -1
x = -a // b # = -2
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
31. Частное и остаток
Программирование (Python), 8 класс31
Частное и остаток
// – деление нацело (остаток отбрасывается)
% – остаток от деления
175 сек = 2 мин 55 сек ? Как получить 2 и 55?
t = 175
m = t // 60 # 2
s = t % 60 # 55
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
32. Частное и остаток
Программирование (Python), 8 класс32
Частное и остаток
? Что получится?
n = 123
d = n // 10 # 12
k = n % 10 # 3
При делении на 10 нацело отбрасывается последняя
цифра числа.
Остаток от деления на 10 – это последняя цифра числа.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
33. Операторы // и %
Программирование (Python), 8 класс33
Операторы // и %
a = 1234
d = a % 10; print( d )
a = a // 10 # 123
d = a % 10; print( d )
a = a // 10 # 12
d = a % 10; print( d )
a = a // 10 # 1
d = a % 10; print( d )
a = a // 10 # 0
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
4
3
2
1
http://kpolyakov.spb.ru
34. Сокращенная запись операций
Программирование (Python), 8 класс34
Сокращенная запись операций
a += b # a = a + b
a -= b # a = a - b
a *= b # a = a * b
a /= b # a = a / b
a //= b # a = a // b
a %= b # a = a % b
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
a += 1
увеличение на 1
http://kpolyakov.spb.ru
35. Форматный вывод
Программирование (Python), 8 класс35
Форматный вывод
a, b = 1, 2
print( f"{a}+{b}={a+b}" )
1+2=3
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
36. Форматный вывод
Программирование (Python), 8 класс36
Форматный вывод
a = 1; b = 2; c = 3
print( a, b, c )
1 2 3
форматная строка
123
print( f"{a}{b}{c}" )
print( f"{a}{b:3}{c:5}" )
количество знаков
на вывод числа
? Сколько знаков для вывода a?
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
1
2
3
3
5
http://kpolyakov.spb.ru
37. Задачи
Программирование (Python), 8 класс37
Задачи
«A»: Ввести число, обозначающее количество секунд.
Вывести то же самое время в минутах и секундах.
Пример:
Введите число секунд: 175
2 мин. 55 с.
«B»: Ввести число, обозначающее количество секунд.
Вывести то же самое время в часах, минутах и
секундах.
Пример:
Введите число секунд: 8325
2 ч. 18 мин. 45 с
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
38. Задачи
Программирование (Python), 8 класс38
Задачи
«С»: Занятия в школе начинаются в 8-30. Урок длится 45
минут, перерывы между уроками – 10 минут. Ввести
номер урока и вывести время его окончания.
Пример:
Введите номер урока: 6
13-50
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
39. Задачи (Повторение)
Программирование (Python), 8 класс39
Задачи (Повторение)
«A»: Ввести трёхзначное целое число и вывести в
столбик все его цифры, начиная с последней.
Пример:
Введите число: 175
5
7
1
«B»: Ввести трёхзначное целое число и вывести его
цифры, начиная с первой.
Пример:
Введите число: 175
1
7
5
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
40. Задачи
Программирование (Python), 8 класс40
Задачи
«С»: Ввести четырёхзначное целое число и найти сумму
его цифр.
Пример:
Введите целое число: 1234
Сумма цифр 10
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
41. Вещественные числа (сложение)
Программирование (Python), 8 класс41
Вещественные числа (сложение)
print ( "Введите два числа: " )
a = float ( input() )
b = float ( input() )
c=a+b
print ( f"{a}+{b}={c}" )
Введите два числа:
1.25
2.3
1.25+2.3=3.55
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
42. Форматный вывод
Программирование (Python), 8 класс42
Форматный вывод
x=12.345678
print( f"x={x}" )
всего на
число
x=12.345678
в дробной
части
print( f"x={x:10.3f}" )
x=
12.346
3
10
print( f"x={x:8.2f}" )
x=
12.34
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
43. Форматный вывод
Программирование (Python), 8 класс43
Форматный вывод
print( f"x={x:2.2f}" )
x=12.34
print( f"x={x:.2f}" )
x=12.34
минимально
возможное
print( f"x={x:0.1f}" )
x=12.3
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
44. Научный формат чисел
Программирование (Python), 8 класс44
Научный формат чисел
x=123456789
print( f"x={x:e}" )
x=1.234568e+008
1,234568 108
x=0.0000123456789
print( f"x={x:e}" )
x=1.234568e-005
1,234568 10–5
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
45. Операции с вещественными числами
Программирование (Python), 8 класс45
Операции с вещественными числами
int – целая часть числа
x=1.6
print( int(x) )
1
round – ближайшее целое число
x=-1.2
-1
print( round(x) )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
46. Математические функции
Программирование (Python), 8 класс46
Математические функции
загрузить
модуль math
= подключить математические
функции
import math
# квадратный корень
print( math.sqrt(25) )
r = 50 # радиус окружности
print( 2*math.pi*r )
Что считаем?
?
print( math.pi*r**2 )
число
округление
вверх
print( math.ceil(2.123) ) # 3
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
47. Операции с вещественными числами
Программирование (Python), 8 класс47
Операции с вещественными числами
1/3 = 0,33333…
бесконечно много знаков
! Большинство вещественных чисел хранятся в
памяти компьютера с ошибкой!
x = 1/2
y = 1/3
z = 5/6 # 5/6=1/2+1/3
print(x+y-z)
-1.110223e-016
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
48. Задачи
Программирование (Python), 8 класс48
Задачи
«A»: Ввести число, обозначающее размер одной
фотографии в Мбайтах. Определить, сколько
фотографий поместится на флэш-карту объёмом
2 Гбайта.
Пример:
Размер фотографии в Мбайтах: 6.3
Поместится фотографий: 325.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
49. Задачи
Программирование (Python), 8 класс49
Задачи
«B»: Оцифровка звука выполняется в режиме стерео с
частотой дискретизации 44,1 кГц и глубиной
кодирования 24 бита. Ввести время записи в
минутах и определить, сколько Мбайт нужно
выделить для хранения полученного файла
(округлить результат в большую сторону).
Пример:
Введите время записи в минутах: 10
Размер файла 152 Мбайт
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
50. Задачи
Программирование (Python), 8 класс50
Задачи
«С»: Разведчики-математики для того, чтобы опознать
своих, используют числовые пароли. Услышав
число-пароль, разведчик должен возвести его в
квадрат и сказать в ответ первую цифры дробной
части полученного числа. Напишите программу,
которая по полученному паролю (вещественному
числу) вычисляет число-ответ.
Пример:
Введите пароль: 1.92
Ответ: 6
потому что 1,922 = 3,6864…, первая цифра
дробной части – 6
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
51. Случайные и псевдослучайные числа
Программирование (Python), 8 класс51
Случайные и псевдослучайные числа
Случайные явления
• встретил слона – не встретил слона
• жеребьёвка на соревнованиях
• лотерея
• случайная скорость (направление выстрела ) в игре
• …
Случайные числа — это последовательность чисел, в
которой невозможно предсказать следующее число,
даже зная все предыдущие.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
52. Случайные и псевдослучайные числа
Программирование (Python), 8 класс52
Случайные и псевдослучайные числа
! Компьютер неслучаен!
Псевдослучайные числа — похожи на случайные, но
строятся по формуле.
следующее
предыдущее
Xn+1= (a*Xn+b) % c # от 0 до c-1
Xn+1= (Xn+3) % 10
#
от 0 до 9
X = 0 3 6 9 2 5 8
зерно
8 1 4 7 0
зацикливание
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
53. Датчик случайных чисел
Программирование (Python), 8 класс53
Датчик случайных чисел
Целые числа на отрезке:
подключить функцию randint
из модуля random
from random import randint
K = randint(1, 6) # отрезок [1,6]
L = randint(1, 6) # это уже другое число!
англ. integer – целый
random – случайный
! Не нужно имя модуля!
K = random.randint(1, 6)
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
54. Датчик случайных чисел
Программирование (Python), 8 класс54
Датчик случайных чисел
Вещественные числа:
from random import random, uniform
x = random()
# полуинтервал [0,1)
y = 7*random()
# полуинтервал [0,7)
z = 7*random()+5 # полуинтервал [5,12)
Вещественные числа на отрезке [a, b]:
from random import uniform
x = uniform(1.5, 2.8)
# [1,5; 2,8]
y = uniform(5.25, 12.75) # [5,25; 12,75]
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
55. Задачи
Программирование (Python), 8 класс55
Задачи
«A»: В игре «Русское лото» из мешка случайным
образом выбираются бочонки, на каждом из которых
написано число от 1 до 90. Напишите программу,
которая выводит наугад первые 5 выигрышных
номеров.
«B»: + Доработайте программу «Русское лото» так,
чтобы все 5 значений гарантированно были бы
разными (используйте разные диапазоны).
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
56. Задачи
Программирование (Python), 8 класс56
Задачи
«С»: + Игральный кубик бросается три раза (выпадает
три случайных значения). Из этих чисел
составляется целое число, программа должна найти
его квадрат.
Пример:
Выпало очков:
1 2 3
Число 123
Его квадрат 15129
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
57. Задачи
Программирование (Python), 8 класс57
Задачи
«D»: + Получить случайное трёхзначное число и вывести
в столбик его отдельные цифры.
Пример:
Получено число 123
сотни: 1
десятки: 2
единицы: 3
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
58. Программирование (Python)
58Программирование
(Python)
§ 19. Ветвления
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
59. Выбор наибольшего из двух чисел
Программирование (Python), 8 класс59
Выбор наибольшего из двух чисел
Задача: изменить порядок действий в зависимости от
выполнения некоторого условия.
полная
форма
да
нет
ветвления
a > b?
M=a
M=b
вывод M
отступы
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
? Если a = b?
if a > b:
M = a
else:
M = b
http://kpolyakov.spb.ru
60. Вариант 1. Программа
Программирование (Python), 8 класс60
Вариант 1. Программа
print("Введите два целых числа")
a = int(input())
b = int(input())
if a > b:
полная форма
условного
M = a
оператора
else:
M = b
print("Наибольшее число", M)
Решение в стиле Python:
M = max(a, b)
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
M = a if a > b else b
http://kpolyakov.spb.ru
61. Выбор наибольшего из двух чисел-2
Программирование (Python), 8 класс61
Выбор наибольшего из двух чисел-2
начало
ввод a,b
M =a
да
b > a?
нет
неполная
форма
ветвления
M =b
вывод M
конец
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
62. Вариант 2. Программа
Программирование (Python), 8 класс62
Вариант 2. Программа
print("Введите два целых числа")
a = int(input())
b = int(input())
M = a
неполная форма
условного
if b > a:
оператора
M = b
print("Наибольшее число", M)
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
63. Примеры
Программирование (Python), 8 класс63
Примеры
Поиск минимального:
if a < b:
M = a
if b < a:
M = b
? Что плохо?
? Когда работает неверно?
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
64. Примеры
Программирование (Python), 8 класс64
Примеры
? Что делает эта программа?
? В чём отличие?
if a < b:
c = a
a = b
b = c
b
a
4
6
2
6
4
?
4
c
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
if a < b:
c = a
a = b
b = c
Решение в стиле Python:
a, b = b, a
http://kpolyakov.spb.ru
65. В других языках программирования
Программирование (Python), 8 класс65
В других языках программирования
Паскаль:
С:
if a < b then begin
c:= a;
a:= b;
b:= c;
end;
if (a < b) {
c = a;
a = b;
b = c;
}
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
66. Знаки отношений
Программирование (Python), 8 класс66
Знаки отношений
> <
больше, меньше
>=
больше или равно
<=
меньше или равно
==
равно
!=
не равно
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
67. Вложенные условные операторы
Программирование (Python), 8 класс67
Вложенные условные операторы
Задача: в переменных a и b записаны возрасты Андрея и
Бориса. Кто из них старше?
Сколько вариантов?
if a > b:
print("Андрей старше")
else:
if a == b:
print("Одного возраста")
else:
print("Борис старше")
?
? Зачем нужен?
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
вложенный
условный оператор
http://kpolyakov.spb.ru
68. Каскадное ветвление
Программирование (Python), 8 класс68
Каскадное ветвление
if a > b:
print("Андрей старше")
elif a == b:
print("Одного возраста")
else:
print("Борис старше")
! elif = else if
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
69. Каскадное ветвление
Программирование (Python), 8 класс69
Каскадное ветвление
cost = 1500
if cost < 1000:
print ( "Скидок нет." )
elif cost < 2000:
первое сработавшее
условие
print ( "Скидка 2%." )
elif cost < 5000:
print ( "Скидка 5%." )
else:
print ( "Скидка 10%." )
? Что выведет?
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
Скидка 2%.
http://kpolyakov.spb.ru
70. Задачи (без функций min и max!)
Программирование (Python), 8 класс70
Задачи (без функций min и max!)
«A»: Ввести два целых числа, найти наибольшее и
наименьшее из них.
Пример:
Введите два целых числа:
1 5
Наибольшее число 5
Наименьшее число 1
«B»: Ввести четыре целых числа, найти наибольшее из
них.
Пример:
Введите четыре целых числа:
1 5 4 3
Наибольшее число 5
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
71. Задачи
Программирование (Python), 8 класс71
Задачи
«C»: Ввести последовательно возраст Антона, Бориса и
Виктора. Определить, кто из них старше.
Пример:
Возраст Антона: 15
Возраст Бориса: 17
Возраст Виктора: 16
Ответ: Борис старше всех.
Пример:
Возраст Антона: 17
Возраст Бориса: 17
Возраст Виктора: 16
Ответ: Антон и Борис старше Виктора.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
72. Сложные условия
Программирование (Python), 8 класс72
Сложные условия
Задача. Фирма набирает сотрудников от 25 до 40 лет
включительно. Ввести возраст человека и определить,
подходит ли он фирме (вывести ответ "подходит" или
"не подходит").
Особенность: надо проверить, выполняются ли два
условия одновременно:
возраст 25
возраст 40
? Можно ли решить известными методами?
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
73. Плохое решение
Программирование (Python), 8 класс73
Плохое решение
print("Введите ваш возраст")
v = int(input())
if v >= 25:
вложенный
условный
if v <= 40:
оператор
print("Подходит!")
else:
print("Не подходит.")
else:
print("Не подходит.")
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
74. Хорошее решение (операция «И»)
Программирование (Python), 8 класс74
Хорошее решение (операция «И»)
Задача: набор сотрудников в возрасте 25-40 лет
(включительно).
сложное условие
if v >= 25 and v <= 40 :
print("подходит")
else:
print("не подходит")
and «И»: одновременное выполнение
всех условий!
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
75. Примеры
Программирование (Python), 8 класс75
Примеры
Задача. Вывести "Да", если число в переменной a –
двузначное.
if 10 <= a and a <= 99:
print("Да")
Задача. Вывести "Да", если число в переменной a –
двузначное и делится на 7.
if 10 <= a and a <= 99 and (a % 7)==0:
print("Да")
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
76. Сложные условия: «ИЛИ»
Программирование (Python), 8 класс76
Сложные условия: «ИЛИ»
Задача. Самолёт летает по понедельникам и четвергам.
Ввести номер дня недели и определить, летает ли в
этот день самолёт.
Особенность: надо проверить, выполняется ли одно из
двух условий:
день = 1
день = 4
if d == 1 or d == 4 :
print("Летает")
else:
print("Не летает")
сложное
условие
or «ИЛИ»: выполнение хотя бы одного
из двух условий!
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
77. Ещё пример
Программирование (Python), 8 класс77
Ещё пример
Задача. Фирма набирает сотрудников от 25 до 40 лет
включительно. Ввести возраст человека и определить,
подходит ли он фирме (вывести ответ "подходит" или
"не подходит"). Использовать «ИЛИ».
if v < 25 or v > 40 :
print("не подходит")
else:
print("подходит")
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
78. Сложные условия: «НЕ»
Программирование (Python), 8 класс78
Сложные условия: «НЕ»
if not(a < b):
print("Cтарт!")
? Как без «НЕ»?
not «НЕ»: если выполняется обратное условие
if a >= b:
print("Cтарт!")
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
79. Простые и сложные условия
Программирование (Python), 8 класс79
Простые и сложные условия
Простые условия (отношения)
<
<=
>
>=
==
равно
!=
не равно
Сложное условие – это условие, состоящее из
нескольких простых условий (отношений),
связанных с помощью логических операций:
• and – одновременное выполнение условий
x >= 25 and x <= 40
• or – выполнение хотя бы одного из условий
x <= 25 or x >= 40
• not – отрицание, обратное условие
x <=
not (x > 25)
???25
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
80. Порядок выполнения операций
Программирование (Python), 8 класс80
Порядок выполнения операций
• выражения в скобках
• <, <=, >, >=, =, !=
• not
• and
• or
4
1
6
2
5
3
if not a > 2 or c != 5 and b < a:
...
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
81. Сложные условия
Программирование (Python), 8 класс81
Сложные условия
Истинно или ложно
not (a > b)
Да
a < b and b < c
Да
2
b
3
c
4
Нет
a > c or b > c
a < b and b > c
Нет
a > c and b > d
Нет
Да
not (a >= b) or c == d
a >= b or not (c < b)
a > c or b > c or b > a
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
a
Да
Да
http://kpolyakov.spb.ru
82. Задачи
Программирование (Python), 8 класс82
Задачи
«A»: Напишите программу, которая получает три числа рост трёх спортсменов, и выводит сообщение «По
росту.», если они стоят по возрастанию роста, или
сообщение «Не по росту!», если они стоят не по
росту.
Пример:
Введите рост трёх спортсменов:
165 170 172
По росту.
Пример:
Введите рост трёх спортсменов:
175 170 172
Не по росту!
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
83. Задачи
Программирование (Python), 8 класс83
Задачи
«B»: Напишите программу, которая получает номер
месяца и выводит соответствующее ему время года
или сообщение об ошибке.
Пример:
Введите номер месяца:
5
Весна.
Пример:
Введите номер месяца:
15
Неверный номер месяца.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
84. Задачи
Программирование (Python), 8 класс84
Задачи
«C»: Напишите программу, которая получает возраст
человека (целое число, не превышающее 120) и
выводит этот возраст со словом «год», «года» или
«лет». Например, «21 год», «22 года», «25 лет».
Пример:
Введите возраст: 18
Вам 18 лет.
Пример:
Введите возраст: 21
Вам 21 год.
Пример:
Введите возраст: 22
Вам 22 года.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
85. Логические переменные
Программирование (Python), 8 класс85
Логические переменные
b = True
b = False
type(b)
только два
возможных
значения
<class 'bool'>
логическая (булевская)
переменная
Джордж Буль
Пример:
freeDay = (d==6 or d==7)
...
if not freeDay:
print("Рабочий день.")
else:
print("Выходной!")
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
86. Задачи
Программирование (Python), 8 класс86
Задачи
«A»: Напишите программу, которая получает с
клавиатуры целое число и записывает в логическую
переменную значение «да» (True), если это число
трёхзначное. После этого на экран выводится ответ
на вопрос: «Верно ли, что было получено
трёхзначное число?».
Пример:
Введите число: 165
Ответ: да.
Пример:
Введите число: 1651
Ответ: нет.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
87. Задачи
Программирование (Python), 8 класс87
Задачи
«B»: Напишите программу, которая получает с
клавиатуры трёхзначное число и записывает в
логическую переменную значение «да» (True), если
это число – палиндром, то есть читается одинаково
слева направо и справа налево. После этого на
экран выводится ответ на вопрос: «Верно ли, что
введённое число – палиндром?».
Пример:
Введите число: 165
Ответ: нет.
Пример:
Введите число: 656
Ответ: да.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
88. Задачи
Программирование (Python), 8 класс88
Задачи
«С»: Напишите программу, которая получает с
клавиатуры трёхзначное число и записывает в
логическую переменную значение «да» (True), если
это все его цифры одинаковы. После этого на экран
выводится ответ на вопрос: «Верно ли, что все
цифры введённого числа одинаковы?»
Пример:
Введите число: 161
Ответ: нет.
Пример:
Введите число: 555
Ответ: да.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
89. Экспертная система
Программирование (Python), 8 класс89
Экспертная система
Экспертная система — это компьютерная программа,
задача которой — заменить человека-эксперта при
принятии решений в сложной ситуации.
База знаний = факты + правила вывода:
• если у животного есть перья, то это птица;
• если животное кормит детенышей молоком, то это —
млекопитающее;
• если животное — млекопитающее и ест мясо, то
это — хищник.
Диалог:
Это животное кормит детей молоком? Нет
Это животное имеет перья? Да
Это птица.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
90. Дерево решений
Программирование (Python), 8 класс90
Дерево решений
Кормит детей молоком?
да
нет
Имеет перья?
млекопитающее
Ест мясо?
нет
да
нет
да
?
птица
?
хищник
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
91. Программирование экспертной системы
Программирование (Python), 8 класс91
Программирование экспертной системы
Ответы пользователя: да и нет – символьные строки.
ans = input("Кормит детей молоком? ")
if ans == "да":
... # вариант 1
else:
# вариант
... # вариант
2 1
print("Млекопитающее.")
ans = input("Ест мясо? ")
if ans == "да":
print("Хищник.")
else:
print("Не знаю.")
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
92. Заглавные и строчные буквы
Программирование (Python), 8 класс92
Заглавные и строчные буквы
if ans == "да":
...
не сработает
на "Да"
? Как исправить?
if ans == "да" or ans == "Да":
...
Ещё лучше:
if ans.lower() == "да":
...
преобразовать все
заглавные в строчные
if ans.upper() == "ДА":
...
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
93. Программирование (Python)
93Программирование
(Python)
§ 23. Отладка программ
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
94. Виды ошибок
Программирование (Python), 8 класс94
Виды ошибок
Синтаксические ошибки – нарушение правил записи
операторов языка программирования.
Обнаруживаются транслятором.
Логические ошибки – неверно составленный алгоритм.
Отказ (ошибка времени выполнения) – аварийная
ситуация во время выполнения программы.
Отладка – поиск и исправление ошибок в программе.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
95. Пример отладки программы
Программирование (Python), 8 класс95
Пример отладки программы
Программа решения квадратного уравнения
ax 2 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="")
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
96. Тестирование
Программирование (Python), 8 класс96
Тестирование
Тест 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
Найден вариант, когда программа работает неверно.
Ошибка воспроизводится!
Возможные причины:
• неверный ввод данных
• неверное вычисление дискриминанта
• неверное вычисление корней
• неверный вывод результатов
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
D b 2 4ac
b D
x1, 2
2a
http://kpolyakov.spb.ru
97. Отладочная печать
Программирование (Python), 8 класс97
Отладочная печать
Идея: выводить все промежуточные результаты.
a = float(input())
b = float(input())
c = float(input())
print(a, b, c)
D = b*b - 4*a*a
print("D=", D)
...
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
98. Отладочная печать
Программирование (Python), 8 класс98
Отладочная печать
Идея: выводить все промежуточные результаты.
Результат:
Введите 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* с ;
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
! Одна ошибка найдена!
http://kpolyakov.spb.ru
99. Отладка программы
Программирование (Python), 8 класс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=3.0 x2=2.0
? Программа работает верно?
Тест 3. a = 8, b = – 6, c = 1.
x1=0.5 x2=0.25
x1=32.0 x2=16.0
x1 = (-b+sqrt(D))/2*a
(2*a)
x2 = (-b-sqrt(D))/2*a
(2*a)
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
? Что неверно?
http://kpolyakov.spb.ru
100. Задачи
Программирование (Python), 8 класс100
Задачи
«A»: Загрузите программу, которая должна вычислять
сумму цифр трёхзначного числа:
N = input(int("N = "))
d0 = N % 10
d1 = N % 100
d2 = N // 100
d0 + d2 = s
print(s)
Выполните отладку программы:
• исправьте синтаксические ошибки
• определите ситуации, когда она работает неверно
• исправьте логические ошибки.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
101. Задачи
Программирование (Python), 8 класс101
Задачи
«B»: Доработайте программу из п. А так, чтобы она
правильно работала с отрицательными
трёхзначными числами: при вводе числа «–123»
программа должна выдавать ответ 6.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
102. Задачи
Программирование (Python), 8 класс102
Задачи
«С»: Загрузите программу, которая должна вычислять
наибольшее из трёх чисел:
a = input("a = ")
b = int("b = ")
c = input("c = ")
if a > b: M = a
else
M = b
if c > b
M = b
else:
M = c
input(M)
Выполните отладку программы:
• исправьте синтаксические ошибки
• определите ситуации, когда она работает неверно
• исправьте логические ошибки.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
103. Программирование (Python)
103Программирование
(Python)
§ 20. Программирование
циклических алгоритмов
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
104. Зачем нужен цикл?
Программирование (Python), 8 класс104
Зачем нужен цикл?
Задача. Вывести 5 раз «Привет!».
print("Привет")
print("Привет")
print("Привет")
print("Привет")
print("Привет")
Цикл «N раз»:
сделай 5 раз
print("Привет")
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
? А если 5000?
такого оператора нет
в Python!
http://kpolyakov.spb.ru
105. Как работает цикл?
Программирование (Python), 8 класс105
Как работает цикл?
! Нужно запоминать, сколько раз цикл уже выполнен!
переменная-счётчик
ещё не делали
счётчик = 0
пока счётчик < 5
print("Привет")
счётчик +=
= счётчик
+ 1
счётчик
1
сделали ещё раз
c = 0
while c < 5:
print("Привет")
c += 1
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
106. Ещё один вариант
Программирование (Python), 8 класс106
Ещё один вариант
Идея: запоминать, сколько шагов осталось.
счётчик = 5
пока счётчик > ???
0
print("Привет")
счётчик -=
= счётчик
???
1
1
c = 5
while c > 0:
print("Привет")
c -= 1
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
? Как записать иначе
последнюю строку?
http://kpolyakov.spb.ru
107. Цикл с предусловием
Программирование (Python), 8 класс107
Цикл с предусловием
• условие проверяется при входе в цикл
• как только условие становится ложным, работа цикла
заканчивается
• если условие ложно в самом начале, цикл не
выполняется ни разу
while условие:
...
тело цикла
? Если условие никогда не станет ложно?
while True:
...
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
бесконечный цикл
(зацикливание)
http://kpolyakov.spb.ru
108. Сколько раз выполняется цикл?
Программирование (Python), 8 класс108
Сколько раз выполняется цикл?
a = 4; b = 6
while a < b: a += 1
2 раза
a=6
a = 4; b = 6
while a < b: a += b
1 раз
a = 10
a = 4; b = 6
while a > b: a += 1
0 раз
a=4
a = 4; b = 6
while a < b: b = a - b
1 раз
b = -2
a = 4; b = 6
while a < b: a -= 1
зацикливание
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
109. Подбор числа битов
Программирование (Python), 8 класс109
Подбор числа битов
Задача. Ввести целое число – мощность алфавита M.
Найти количество битов i, необходимое для
равномерного кодирования символов из этого
алфавита.
?
Как найти i?
2i ≥ M
Начинаем с i = 1, увеличиваем i, пока i < M.
M = int(input("Мощность алфавита:"))
i = 1
while 2**i > 0:
i += 1
print(f"i={i}")
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
110. Задачи
Программирование (Python), 8 класс110
Задачи
«A»: Напишите программу, которая получает с
клавиатуры количество повторений и выводит
столько же раз какое-нибудь сообщение.
Пример:
Сколько раз повторить? 3
Привет!
Привет!
Привет!
«B»: Напишите программу, которая получает с
клавиатуры натуральное число N и подбирает
наибольшее натуральное число, квадрат которого
меньше, чем N.
Пример:
Введите число: 311
Ответ: 17
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
111. Задачи
Программирование (Python), 8 класс111
Задачи
«С»: Напишите программу, которая получает с
клавиатуры натуральное число N и подбирает
наибольшее число Фибоначчи, которое не больше,
чем N. Числа Фибоначчи – это последовательность
чисел, в которой первые два числа равны 1, а
каждое следующее равно сумме двух предыдущих:
1, 1, 2, 3, 5, 8, 13, 21, …
Пример 1:
Введите число: 311
Ответ: 233
Пример 2:
Введите число: 377
Ответ: 377
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
112. Разбиение числа на отдельные цифры
Программирование (Python), 8 класс112
Разбиение числа на отдельные цифры
Задача. Ввести натуральное число и вывести в столбик
все его цифры, начиная с последней.
123 3
2
1
Выделить последнюю цифру числа в переменной N:
d = N % 10
123 3
Отбросить последнюю цифру числа в переменной N:
N = N // 10
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
123 12
http://kpolyakov.spb.ru
113. Разбиение числа на отдельные цифры
Программирование (Python), 8 класс113
Разбиение числа на отдельные цифры
• выделяем последнюю цифру числа (%)
• выводим эту цифру на экран
• отсекаем последнюю цифру числа (//)
N
d
начальное значение
123
12
3
1
2
0
1
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
? Когда остановиться?
while N != 0:
...
http://kpolyakov.spb.ru
114. Разбиение числа на отдельные цифры
Программирование (Python), 8 класс114
Разбиение числа на отдельные цифры
N = int(input("Введите число:"))
while N != 0:
d = N % 10
print( d )
N = N // 10
? Если вместо 10 написать 8 ?
? Если вместо 10 написать 2?
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
12 4
1
12 0
0
1
1
http://kpolyakov.spb.ru
115. Сумма цифр числа
Программирование (Python), 8 класс115
Сумма цифр числа
Задача. Вычислить сумму цифр введённого числа.
123 1 + 2 + 3 = 6
Выделить последнюю цифру числа в переменной N:
d = N % 10
123 3
Отбросить последнюю цифру числа в переменной N:
N = N // 10
123 12
Добавить к переменной s значение переменной d:
s +=
= sd+ d
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
s = 6 6 + 4 = 10
d=4
http://kpolyakov.spb.ru
116. Сумма цифр числа
Программирование (Python), 8 класс116
Сумма цифр числа
• выделяем последнюю цифру числа (%)
• увеличиваем сумму на значение цифры (s+=d)
• отсекаем последнюю цифру числа (//)
N
d
123
s
0
начальные значения
? Когда остановиться?
12
3
3
1
2
5
0
1
6
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
while N != 0:
...
http://kpolyakov.spb.ru
117. Сумма цифр числа
Программирование (Python), 8 класс117
Сумма цифр числа
начало
обнулить
сумму
ввод N
s= 0
N != 0?
да
d = N % 10
s += d
N = N // 10
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
выполнять
"пока N != 0"
нет
вывод s
конец
http://kpolyakov.spb.ru
118. Сумма цифр числа
Программирование (Python), 8 класс118
Сумма цифр числа
N = int(input("Введите целое число")); N1= N
s = 0
while N != 0:
d = N % 10
s += d
N = N // 10
print("Сумма цифр числа", N1,
N, " равна", s)
? Что плохо?
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
119. Задачи
Программирование (Python), 8 класс119
Задачи
«A»: Напишите программу, которая вводит с клавиатуры
натуральное число и выводит цифры его записи в
троичной системе счисления (начиная с последней).
Пример:
Введите число: 12
0
1
1
«B»: Напишите программу, которая получает с
клавиатуры натуральное число и определяет,
сколько раз в его двоичной записи встречается
цифра 1.
30 = 111102
Пример:
Введите число? 30
Единиц: 4
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
120. Задачи
Программирование (Python), 8 класс120
Задачи
«C»: Напишите программу, которая получает с
клавиатуры натуральное число и находит
наибольшую цифру в его десятичной записи.
Пример:
Введите число: 311
Наибольшая цифра: 3
«D»: Напишите программу, которая получает с
клавиатуры натуральное число и определяет, есть
ли в его десятичной записи одинаковые цифры,
стоящие рядом.
Пример:
Введите число: 553
Введите число: 535
Ответ: да.
Ответ: нет.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
121. Разложение числа на простые сомножители
Программирование (Python), 8 класс121
Разложение числа на простые сомножители
1260 = 2 · 2 · 3 · 3 · 5 · 7
простые числа
Основная теорема арифметики: такое
разложение единственно.
Введите число: 1260
2
2
3
3
5
7
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
122. Разложение числа на простые сомножители
Программирование (Python), 8 класс122
Разложение числа на простые сомножители
1260 = 2 · 2 · 3 · 3 · 5 · 7
d = 2
пока N > 1:
если N делится на d:
print( d )
N //= d
иначе:
d += 1
N
d
экран
1260
2
2
630
315
2
3
105
3
3
35
4
35
5
7
6
7
7
5
7
1
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
123. Разложение числа на простые сомножители
Программирование (Python), 8 класс123
Разложение числа на простые сомножители
N = int(input("Введите целое число"))
d = 2
while N > 1:
if N % d == 0:
print( d )
N //= d
else:
# делится на d
# следующий делитель d
d += 1
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
124. Задачи
Программирование (Python), 8 класс124
Задачи
«A»: Напишите программу, которая получает с
клавиатуры натуральное число и выводит все его
простые сомножители в одну строчку.
Пример:
Введите число: 1260
1*2*2*3*3*5*7
«B»: Напишите программу, которая получает с
клавиатуры натуральное число и определяет,
сколько у него различных простых делителей.
Пример:
Введите число? 1260
Ответ: 4
1260 = 22·32·5·7
2, 3, 5, 7
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
125. Задачи
Программирование (Python), 8 класс125
Задачи
«C»: Напишите программу, которая получает с
клавиатуры натуральное число и находит сумму
всех его различных простых делителей.
Пример:
1260 = 22·32·5·7
Введите число: 1260
Ответ: 17
2+3+5+7
«D»: Напишите программу, которая получает с
клавиатуры натуральное число и определяет, есть
ли в его разложении одинаковые делители.
Пример:
Введите число: 1260
Введите число: 210
Ответ: да.
Ответ: нет.
210 = 2·3·5·7
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
126. Алгоритм Евклида
Программирование (Python), 8 класс126
Алгоритм Евклида
Задача. Найти наибольший общий делитель (НОД) двух
натуральных чисел.
Заменяем большее из двух чисел разностью
большего и меньшего до тех пор, пока они не
станут равны. Это и есть НОД.
НОД(a,b)= НОД(a-b, b)
= НОД(a, b-a)
Евклид
(365-300 до. н. э.)
Пример:
НОД (14, 21) = НОД (14, 21-14) = НОД (14, 7)
= НОД (7, 7) = 7
много шагов при большой разнице чисел:
НОД (1998, 2) = НОД (1996, 2) = … = 2
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
127. Алгоритм Евклида
Программирование (Python), 8 класс127
Алгоритм Евклида
начало
a = b?
да
конец
нет
нет
b=b-a
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
a > b?
да
a=a-b
http://kpolyakov.spb.ru
128. Алгоритм Евклида
Программирование (Python), 8 класс128
Алгоритм Евклида
while a != b:
if a > b:
a -=
= ab- b
else:
b -=
= ba- a
как заменить?
? Где будет НОД? Как его вывести?
? Как вывести НОД в формате НОД(14,21) = 7?
? А без дополнительных переменных?
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
129. Модифицированный алгоритм Евклида
Программирование (Python), 8 класс129
Модифицированный алгоритм Евклида
Заменяем большее из двух чисел остатком от деления
большего на меньшее до тех пор, пока меньшее не
станет равно нулю. Тогда большее — это НОД.
НОД(a,b)= НОД(a % b, b)
= НОД(a, b % a)
Пример:
НОД (14, 21) = НОД (14, 7) = НОД (0, 7) = 7
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
130. Модифицированный алгоритм
Программирование (Python), 8 класс130
Модифицированный алгоритм
while a != 0 and b != 0:
if a > b:
a = a % b
else:
b = b % a
? Где будет НОД? Как его вывести?
if a != 0:
print(a)
else:
print(b)
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
print( a+b
??? )
http://kpolyakov.spb.ru
131. В стиле Python
Программирование (Python), 8 класс131
В стиле Python
while b!=0:
a, b = b, a % b
Почему работает?
print(a)
заменить a на b и b на
(a % b)
?
a
b
a
b
21
14
14
21
14
7
21
14
7
0
14
7
! a > b!
7
0
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
132. В других языках программирования
Программирование (Python), 8 класс132
В других языках программирования
Паскаль:
while (a<>0) and
(b<>0) do
if a>b then
a:= a mod b
else
b:= b mod a;
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
С++:
while (a!=0 && b!=0)
{
if (a > b)
a = a % b;
else
b = b % a;
}
http://kpolyakov.spb.ru
133. Задачи
Программирование (Python), 8 класс133
Задачи
«A»: Ввести с клавиатуры два натуральных числа и найти их
НОД с помощью алгоритма Евклида.
Пример:
Введите два числа:
21 14
НОД(21,14)=7
«B»: Ввести с клавиатуры два натуральных числа и найти их
НОД с помощью модифицированного алгоритма
Евклида. Заполните таблицу:
a
64168
358853
6365133
17905514
549868978
b
82678
691042
11494962
23108855
298294835
НОД(a,b)
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
134. Задачи
Программирование (Python), 8 класс134
Задачи
«C»: Ввести с клавиатуры два натуральных числа и сравнить
количество шагов цикла для вычисления их НОД с
помощью обычного и модифицированного алгоритмов
Евклида.
Пример:
Введите два числа:
1998 2
НОД(1998,2)=2
Обычный алгоритм: 998
Модифицированный: 1
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
135. Сколько раз выполняется цикл?
Программирование (Python), 8 класс135
Сколько раз выполняется цикл?
a = 4; b = 6
while a < b: a += 1
2 раза
a=6
a = 4; b = 6
while a < b: a += b
1 раз
a = 10
a = 4; b = 6
while a > b: a += 1
0 раз
a=4
a = 4; b = 6
while a < b: b = a - b
1 раз
b = -2
a = 4; b = 6
while a < b: a -= 1
зацикливание
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
136. Обработка потока данных
Программирование (Python), 8 класс136
Обработка потока данных
Задача. На вход программы поступает поток данных —
последовательность целых чисел, которая
заканчивается нулём. Требуется найти сумму
элементов этой последовательности.
while x!=0:
# добавить x к сумме
# x = следующее число
? Откуда возьмётся x в первый раз?
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
137. Обработка потока данных
Программирование (Python), 8 класс137
Обработка потока данных
s = 0
x = int(input()) # первое число
while x!=0:
s += x
x = int(input()) # ввести следующее
print("Сумма ", s)
? Как найти количество чисел?
? Как найти сумму положительных?
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
138. Задачи
Программирование (Python), 8 класс138
Задачи
«A»: На вход программы поступает неизвестное
количество чисел целых, ввод заканчивается нулём.
Определить, сколько получено чисел, которые
делятся на 3.
«B»: На вход программы поступает неизвестное
количество чисел целых, ввод заканчивается нулём.
Определить, сколько получено двузначных чисел,
которые заканчиваются на 3.
«C»: На вход программы поступает неизвестное
количество чисел целых, ввод заканчивается нулём.
Найти максимальное из введённых чётных чисел.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
139. Задачи на циклы (дополнительные)
Программирование (Python), 8 класс139
Задачи на циклы (дополнительные)
«A»: Напишите программу, которая предлагает ввести
число-пароль и не переходит к выполнению
основной части, пока не введён правильный пароль.
Основная часть – вывод на экран «секретных
сведений».
«B»: Напишите программу, которая получает с
клавиатуры натуральное число, которое больше 1, и
определяет, простое оно или нет. Для этого нужно
делить число на все натуральные числа, начиная с
2, пока не получится деление без остатка.
«C»: Напишите программу, которая получает с
клавиатуры два целых числа и вычисляет их
произведение, используя только операции
сложения.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
140. Задачи
Программирование (Python), 8 класс140
Задачи
«D»: Напишите программу, которая получает с
клавиатуры натуральное число и вычисляет целый
квадратный корень из него – наибольшее число,
квадрат которого не больше данного числа.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
141. Цикл по переменной
Программирование (Python), 8 класс141
Цикл по переменной
Задача. Вывести на экран степени числа 2 от 20 до 210.
k = 0
! Работа с k в трёх местах!
N = 1
Идея: собрать всё вместе.
while k <= 10 :
print(N)
N = N*2
не включая 11!
с нуля!
k = k + 1
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
N = 1
for k in range(11)
range(11):
print(N)
N = N*2
сделать 11 раз
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
142. Цикл по переменной
Программирование (Python), 8 класс142
Цикл по переменной
for k in range(11):
print(k)
? Что выведет?
for k in [0,1,2,3,4,5,6,7,8,9,10]:
print(k)
0
1
2
…
10
Начать на с 0, а с 1:
for k in [1,2,3,4,5,6,7,8,9,10]:
print(k)
начальное
значение
for k in range( 1 ,11):
print(k)
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
143. Цикл по переменной
Программирование (Python), 8 класс143
Цикл по переменной
Задача. Найти сумму чисел от 1 до 1000.
S = 0
for i in range(1,1001):
S += i
Задача. Вывести квадраты чисел от 10 до 1 по убыванию.
for k in [10,9,8,7,6,5,4,3,2,1]:
print(k*k)
не включая 0
шаг
for k in range(10,0,–1):
print(k*k)
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
144. Цикл по переменной
Программирование (Python), 8 класс144
Цикл по переменной
Задача. Найти сумму чётных чисел от 2 до 1000.
S = 0
for i in range(2,1001):
if i % 2 == 0:
S += i
? Что плохо?
шаг
S = 0
for i in range(2,1001, 2 ):
S += i
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
145. В других языках программирования
Программирование (Python), 8 класс145
В других языках программирования
Паскаль:
С:
S:= 0;
for i=1 to 1000 do
S:= S + i;
int S, i;
S = 0;
for (i=1; i<=1000; i++)
S += i;
i=i+1;
шаг только 1 или
–1 (downto)
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
S=S+i;
http://kpolyakov.spb.ru
146. Задачи
Программирование (Python), 8 класс146
Задачи
«A»: Напишите программу, которая находит количество
четырёхзначных чисел, которые делятся на 7.
«B»: Ипполит задумал трёхзначное число, которое при
делении на 15 даёт в остатке 11, а при делении на
11 даёт в остатке 9. Напишите программу, которая
находит все такие числа.
«C»: С клавиатуры вводится натуральное число N.
Программа должна найти факториал этого числа
(обозначается как N!) – произведение всех
натуральных чисел от 1 до N. Например,
5! = 1 • 2 • 3 • 4 • 5 = 120.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
147. Задачи
Программирование (Python), 8 класс147
Задачи
«D»: Натуральное число называется числом
Армстронга, если сумма цифр числа, возведенных
в N-ную степень (где N – количество цифр в числе)
равна самому числу. Например, 153 = 13 + 53 + 33.
Найдите все трёхзначные Армстронга.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
148. Проверка числа на простоту
Программирование (Python), 8 класс148
Проверка числа на простоту
Задача. Ввести натуральное число N и проверить,
является ли оно простым.
? Что такое простое число?
проверять все
? Как проверить?
от 2 до N-1
26: делится на 2? да составное
27: делится на 2? нет
делится на 3? да составное
29: делится на 2? нет
делится на 3? нет
простое
…
делится на 28? нет
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
149. Проверка числа на простоту
Программирование (Python), 8 класс149
Проверка числа на простоту
N = int(input("Введите число:"))
count = 0
от 2 до N-1
for i in range(2,N):
if N % i == 0:
? Как определить,
count += 1
что простое?
if count == 0:
print( f"{N} – простое" )
else:
print( f"{N} – составное" )
? Как ускорить?
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
150. Проверка числа на простоту
Программирование (Python), 8 класс150
Проверка числа на простоту
N = int(input("Введите число:"))
count = 0
от 2 до N-1
for i in range(2,N):
if N % i == 0:
count += 1
break
выход из цикла
if count == 0:
print( f"{N} – простое" )
else:
print( f"{N} – составное" )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
151. Если искать все делители…
Программирование (Python), 8 класс151
Если искать все делители…
N = int(input("Введите число:"))
count = 0
от 1 до N
for i in range (1,N+1)
(1,N+1):
if N % i == 0:
count += 1
2
if count == ???:
print( f"{N} – простое" )
else:
print( f"{N} – составное" )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
152. Задачи
Программирование (Python), 8 класс152
Задачи
«A»: Напишите программу, которая получает
натуральное число и определяет, простое ли это
число. Если число составное, программа должна
вывести количество его делителей.
Пример 1:
Введите число: 19
19 – простое число
Пример 2:
Введите число: 28
28 – составное число
делителей: 6
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
153. Задачи
Программирование (Python), 8 класс153
Задачи
«B»: Напишите программу, которая получает
натуральное число и определяет, простое ли это
число. Если число составное, программа должна
вывести количество его чётных делителей.
Подсказка: нужен ещё один счётчик.
Пример 1:
Введите число: 19
19 – простое число
Пример 3:
Введите число: 1260
Пример 2:
Введите число: 28
1260 – составное число
28 – составное число
четных делителей: 24
четных делителей: 4
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
154. Задачи
Программирование (Python), 8 класс154
Задачи
«С»: Напишите программу, которая получает
натуральные числа a и b и определяет, сколько
простых чисел есть на отрезке [a, b].
Пример 1:
Введите a и b: 5 23
Простых чисел: 7
Пример 2:
Введите a и b: 5 5
Простых чисел: 1
Пример 3:
Введите a и b: 1234 5678
Простых чисел: 545
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
155. Программирование (Python)
155Программирование
(Python)
§ 21. Массивы
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
156. Что такое массив?
Программирование (Python), 8 класс156
Что такое массив?
? Как ввести 10000 переменных?
Массив – это группа переменных одного типа,
расположенных в памяти рядом (в соседних ячейках) и
имеющих общее имя.
Надо:
• выделять память
• записывать данные в нужную ячейку
• читать данные из ячейки
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
157. Обращение к элементу массива
Программирование (Python), 8 класс157
Обращение к элементу массива
НОМЕР
A
элемента массива
(ИНДЕКС)
массив
0
1
5
10
A[0]
A[1]
22
15
15
3
4
20
25
ЗНАЧЕНИЕ
A[2]
A[3]
A[4]
элемента массива
Индекс элемента — это значение, которое указывает на
конкретный элемент массива.
! Нумерация с нуля!
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
158. Обращение к элементу массива
Программирование (Python), 8 класс158
Обращение к элементу массива
ИНДЕКС элемента массива: 2
A[2]
ЗНАЧЕНИЕ элемента массива
0
1
2
3
4
23
12
7
43
51
i = 1
A[2] = A[i] + 2*A[i-1] + A[2*i+1]
print( A[2]+A[4] )
? Что получится?
A[2] = A[1] + 2*A[0] + A[3]
print( A[2]+A[4] )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
101
152
http://kpolyakov.spb.ru
159. Создание массива
Программирование (Python), 8 класс159
Создание массива
A = [11, 22, 35, 41, 53]
11
22
35
41
53
A = [11, 22] + [35, 41] + [53]
A = [11]*5
11
11
11
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
11
11
http://kpolyakov.spb.ru
160. Что неверно?
Программирование (Python), 8 класс160
Что неверно?
A = [1, 2, 3, 4, 5]
x = 1
? Что плохо?
print( A[x-8] )
A[x+4] = A[x-1] + A[2*x]
print( A[-7] )
A[5] = A[0] + A[2]
Выход за границы массива — это обращение к
элементу с индексом, который не существует в
массиве.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
161. Перебор элементов массива
Программирование (Python), 8 класс161
Перебор элементов массива
N = 10
A = [0]*N
# память уже выделена
Перебор элементов: просматриваем все элементы
массива и, если нужно, выполняем с каждым из них
некоторую операцию.
for i in range(N):
# здесь работаем с A[i]
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
162. Заполнение массива
Программирование (Python), 8 класс162
Заполнение массива
[0, 2, 3, …, N-1]
for i in range(N):
A[i] = i
? Что произойдёт?
В развёрнутом виде
A[0] = 0
A[1] = 1
A[2] = 2
...
A[N-1] = N-1
0
1
2
...
N-1
В стиле Python:
A = [ i for i in range(N) ]
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
163. Заполнение массива в обратном порядке
Программирование (Python), 8 класс163
Заполнение массива в обратном порядке
N
…
3
2
A[0] = N
A[1] = N-1
A[2] = N-2
...
A[N-1] = 1
1
X=N
for i in range(N):
A[i] = X
X=X-1
? Как меняется X?
X = N, N-1, …, 2, 1
начальное
значение
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
уменьшение
на 1
http://kpolyakov.spb.ru
164. Заполнение массива в обратном порядке
Программирование (Python), 8 класс164
Заполнение массива в обратном порядке
N
…
3
2
A[i] = X
1
? Как связаны i и X?
+1
i
0
1
2
...
N-1
X
N
N-1
N-2
...
1
–1
for i in range(N):
A[i] = N – i
В стиле Python:
A = [ N-i
for i in range(N) ]
! Сумма i и X не меняется!
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
i + X = N
X = N - i
http://kpolyakov.spb.ru
165. Вывод массива на экран
Программирование (Python), 8 класс165
Вывод массива на экран
Весь массив сразу:
print( A )
[1,2,3,4,5]
По одному элементу:
for i in range(N):
print( A[i] )
или так:
for x in A:
print( x )
? Как вывести
в строчку?
в столбик
для всех элементов в
массиве A
for x in A:
print( x, end=" " )
пробел между
элементами
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
166. Вывод массива на экран (Python)
Программирование (Python), 8 класс166
Вывод массива на экран (Python)
[1,2,3,4,5]
print ( *A )
print (1, 2, 3, 4, 5)
разбить список
на элементы
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
1 2 3 4 5
http://kpolyakov.spb.ru
167. Ввод с клавиатуры
Программирование (Python), 8 класс167
Ввод с клавиатуры
for i in range(N):
A[i] = int(input())
? Что плохо?
или так:
A = [int(input())
for i in range(N)]
С подсказкой для ввода:
for i in range(N):
s = "A[" + str(i) + "]="
A[i] = int(input(s))
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
A[0] = 5
A[1] = 12
A[2] = 34
A[3] = 56
A[4] = 13
http://kpolyakov.spb.ru
168. Ввод с клавиатуры (Python)
Программирование (Python), 8 класс169
В других языках программирования
Паскаль:
объявление массива
const N = 10;
var A: array[0..N-1] of integer;
...
for i:=0 to N-1 do
A[i] = i;
for i:=0 to N-1 do
write(A[i], ' ');
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
169. В других языках программирования
Программирование (Python), 8 класс170
В других языках программирования
С++:
int A[N], i;
for (i = 0; i < N; i++)
A[i] = i;
for (i = 0; i < N; i++)
cout << A[i] << " ";
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
! Нумерация элементов
всегда с нуля!
http://kpolyakov.spb.ru
170. В других языках программирования
Программирование (Python), 8 класс171
Задачи
«A»: 1) Заполните все элементы массива из 10
элементов значением X , введённым с клавиатуры.
2) Заполните массив из 10 элементов
последовательными натуральными числами,
начиная с X (значение X введите с клавиатуры).
«B»: 1) Заполните массив из 10 элементов
натуральными числами в порядке убывания. С
клавиатуры вводится значение X. Последний
элемент должен быть равен X, предпоследний равен
X+1 и т.д.
2) Заполните массив из 10 элементов степенями
числа 2 (от 21 до 2N), так чтобы первый элемент был
равен 2, следующий – 4, следующий – 8 и т.д.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
171. Задачи
Программирование (Python), 8 класс172
Задачи
«C»: 1) Заполните массив из 10 элементов степенями
числа 2, начиная с конца, так чтобы последний
элемент массива был равен 1, а каждый
предыдущий был в 2 раза больше следующего.
2) С клавиатуры вводится целое число X. Заполните
массив из 11 элементов целыми числами, так чтобы
средний элемент массива был равен X, слева от
него элементы стояли по возрастанию, а справа – по
убыванию. Соседние элементы отличаются на
единицу. Например,
при X = 3 массив из 5 элементов заполняется так: 1
2 3 2 1.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
172. Задачи
Программирование (Python), 8 класс173
Заполнение случайными числами
из библиотеки
(модуля) random
взять функцию randint
from random import randint
N = 10
# размер массива
A = [0]*N # выделить память
for i in range(N):
A[i] = randint(20,100)
В краткой форме:
from random import randint
N = 10
A = [ randint(20,100)
for i in range(N) ]
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
173. Заполнение случайными числами
Программирование (Python), 8 класс174
Обработка элементов массива
N = 10
A = [0]*N
# память уже выделена
for i in range(N):
# здесь работаем с A[i]
Вывести на экран в столбик:
for i in range(N):
print( A[i] )
???
! Что вместо «???»?
Вывести на экран в строчку:
for i in range(N):
print( A[i], end = " " )
???
print( *A )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
174. Обработка элементов массива
Программирование (Python), 8 класс175
Обработка элементов массива
Вывести числа, на 1 большие, чем A[i]:
for i in range(N):
print( A[i]+1 )
???
! Что вместо «???»?
Вывести последние цифры:
for i in range(N):
print( A[i]%10 )
???
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
175. Обработка элементов массива
Программирование (Python), 8 класс176
Обработка элементов массива
Заполнить нулями:
for i in range(N):
A[i] = 0
???
! Что вместо «???»?
Увеличить на 1:
for i in range(N):
A[i] += 1
???
Умножить на 2:
for i in range(N):
A[i] *= 2
???
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
176. Обработка элементов массива
Программирование (Python), 8 класс177
Задачи-2
«A»: Напишите программу, которая заполняет массив из
10 элементов случайными числами в диапазоне
[0,10], выводит его на экран, а затем выводит на
экран квадраты всех элементов массива.
Пример:
Массив: 5 6 2 3 1 4 8 7
Квадраты: 25 36 4 9 1 16 64 49
«B»: Напишите программу, которая заполняет массив из
10 элементов случайными числами в диапазоне
[100,300] и выводит его на экран. После этого на экран
выводятся средние цифры (число десятков) всех
чисел, записанных в массив.
Пример:
Массив: 142 224 135 257 167 295 126 223 138 270
Число десятков: 4 2 3 5 6 9 2 2 3 7
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
177. Задачи-2
Программирование (Python), 8 класс178
Задачи-2
«C»: Напишите программу, которая заполняет массив из
10 элементов случайными числами в диапазоне
[100,500] и выводит его на экран. После этого на экран
выводятся суммы цифр всех чисел, записанных в
массив.
Пример:
Массив: 162 425 340 128 278 195 326 414 312 177
Суммы цифр: 9 11 7 11 17 15 11 9 6 15
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
178. Задачи-2
179Программирование
(Python)
§ 22. Алгоритмы обработки
массивов
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
179. Программирование (Python)
Программирование (Python), 8 класс180
Сумма элементов массива
Задача. Найти сумму элементов массива из N
элементов.
? Какие переменные
нужны?
5
2
8
3
i
s = 0
for i in range(N):
s =
+ A[i]
+=sA[i]
print( s )
s
0
0
1
2
5
7
15
В стиле Python:
3
4
18
19
1
print( sum(A) )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
180. Сумма элементов массива
Программирование (Python), 8 класс181
Сумма элементов массива (Python)
Задача. Найти сумму элементов массива A.
s = 0
for x in A:
s += x
print( s )
для всех
элементов из A
! Не нужно знать размер!
или так:
print( sum(A) )
встроенная
функция
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
181. Сумма элементов массива (Python)
Программирование (Python), 8 класс182
Сумма не всех элементов массива
Задача. Найти сумму чётных элементов массива.
? Что делаем с нечётными?
s = 0
for i in range(N):
s
A[i]
if+=
A[i]
% 2 == 0:
print(
s A[i]
)
s +=
print( s )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
182. Сумма не всех элементов массива
Программирование (Python), 8 класс183
Сумма не всех элементов массива
Задача. Найти сумму чётных элементов массива.
s = 0
for x in A:
if
x %
s +=
x 2 == 0:
s +=
print(
s x
)
print( s )
s
A
4
x
1
8
6
3
4
18
10
4
0
3
6
8
отбираем
в новый
1
массив все нужные
значения
В стиле Python:
B = [x for x in A
if x % 2 == 0]
print ( sum(B) )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
183. Сумма не всех элементов массива
Программирование (Python), 8 класс184
Задачи
«A»: Напишите программу, которая заполняет массив из
10 элементов случайными числами на отрезке [–5; 5]
и находит сумму положительных элементов.
«B»: Напишите программу, которая заполняет массив из
10 элементов случайными числами на отрезке [–2; 2]
и находит произведение ненулевых элементов.
«C»: Напишите программу, которая заполняет массив из
20 элементов случайными числами на отрезке
[100; 1000] и находит отдельно сумму элементов в
первой и во второй половинах массива.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
184. Задачи
Программирование (Python), 8 класс185
Подсчёт элементов по условию
Задача. Найти количество чётных элементов массива.
? Какие переменные нужны?
count = 0
for i in range(N):
if A[i] % 2 == 0:
count += 1
print( count )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
переменнаясчётчик
? Что тут делаем?
http://kpolyakov.spb.ru
185. Подсчёт элементов по условию
Программирование (Python), 8 класс186
Подсчёт элементов по условию (Python)
Задача. Найти количество чётных элементов массива.
count = 0
for x in A:
if x % 2 == 0:
count += 1
print( count )
В стиле Python:
B = [x for x in A
if x % 2 == 0]
print ( len(B) )
размер массива
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
186. Подсчёт элементов по условию (Python)
Программирование (Python), 8 класс187
Среднее арифметическое
Задача. Найти среднее арифметическое элементов
массива, которые больше 180 (рост в см).
s = 0
for x in A:
if x > 180:
s += x
print( s/N )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
? Что плохо?
http://kpolyakov.spb.ru
187. Среднее арифметическое
Программирование (Python), 8 класс188
Среднее арифметическое
Задача. Найти среднее арифметическое элементов
массива, которые больше 180 (рост в см).
? Какие переменные нужны?
s = 0
count = 0
for x in A:
if x > 180:
count += 1
s += x
print( s/count )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
? Что тут делаем?
http://kpolyakov.spb.ru
188. Среднее арифметическое
Программирование (Python), 8 класс189
Среднее арифметическое (Python)
Задача. Найти среднее арифметическое элементов
массива, которые больше 180 (рост в см).
B = [ x for x in A
if x > 180]
print ( sum(B)/len(B) )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
отбираем нужные
http://kpolyakov.spb.ru
189. Среднее арифметическое (Python)
Программирование (Python), 8 класс190
Задачи
«A»: Напишите программу, которая заполняет массив из
20 элементов случайными числами на отрезке [0;
200] и считает количество элементов, которые
делятся на 10.
«B»: Напишите программу, которая заполняет массив из
20 элементов случайными числами на отрезке [0; 200]
и считает среднее арифметическое двузначных чисел
в массиве.
«C»: Напишите программу, которая заполняет массив из
20 элементов случайными числами на отрезке [10;
100] и считает число пар соседних элементов, сумма
которых делится на 3.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
190. Задачи
Программирование (Python), 8 класс191
Перестановка элементов массива
? Как поменять местами значения двух
переменных a и b?
вспомогательная
переменная
элементы массива:
с = a
a = b
b = c
с = A[i]
A[i] = A[k]
A[k] = c
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
191. Перестановка элементов массива
Программирование (Python), 8 класс192
Перестановка пар соседних элементов
Задача. Массив A содержит чётное количество
элементов N. Нужно поменять местами пары соседних
элементов: 0-й с 1-м, 2-й — с 3-м и т. д.
0
1
2
3
7
12
38
5
0
1
2
3
12
7
5
38
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
…
…
N-2
N-1
40
23
N-2
N-1
23
40
http://kpolyakov.spb.ru
192. Перестановка пар соседних элементов
Программирование (Python), 8 класс193
Перестановка пар соседних элементов
for i in range(N):
поменять местами A[i] и A[i+1]
0
1
2
3
Что плохо?
?
4
5
7
12
38
5
40
23
12
7
38
5
40
23
12
38
7
5
40
выход
23 за границы
массива
12
38
5
7
40
23
12
38
5
40
7
23
12
38
5
40
23
7
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
?
http://kpolyakov.spb.ru
193. Перестановка пар соседних элементов
Программирование (Python), 8 класс194
Перестановка пар соседних элементов
for i in range(0,N-1,2):
# переставляем A[i] и A[i+1]
c = A[i]
A[i] = A[i+1]
A[i+1] = c
A[0] A[1]
A[2] A[3]
...
A[N-2] A[N-1]
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
194. Перестановка пар соседних элементов
Программирование (Python), 8 класс195
Реверс массива
Задача. Переставить элементы массива в обратном
порядке (выполнить реверс).
0
1
2
7
12
5
0
1
2
23
40
38
A[0] A[N-1]
A[1] A[N-2]
A[i] A[N-1-i]
A[N-1] A[0]
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
…
…
N-3
N-2
N-1
38
40
23
N-3
N-2
N-1
5
12
7
0+N-1 = N-1
1+N-2 = N-1
i+??? = N-1
N-1+0 = N-1
http://kpolyakov.spb.ru
195. Реверс массива
Программирование (Python), 8 класс196
Реверс массива
(N // 2):
for i in range(N):
поменять местами A[i] и A[N-1-i]
? Что плохо?
0
1
2
3
7
12
40
23
i=0
23
12
40
7
i=1
23
40
12
7
i=2
23
12
40
7
i=3
7
12
40
23
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
? Как исправить?
http://kpolyakov.spb.ru
196. Реверс массива
Программирование (Python), 8 класс197
Задачи
«A»: Заполнить массив из 10 элементов случайными
числами в диапазоне [0; 100], поменять местами
пары соседних элементов, не трогая первый и
последний элементы.
Массив:
53 66 88 39 26 88 35 24 38 50
Результат: 53 88 66 26 39 35 88 38 24 50
«B»: Заполнить массив из 10 элементов случайными
числами в диапазоне [0; 100] и выполнить
циклический сдвиг влево: каждый элемент
перемещается на место предыдущего, а первый – на
место последнего.
Массив:
53 66 88 39 26 88 35 24 38 50
Результат: 66 88 39 26 88 35 24 38 50 53
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
197. Задачи
Программирование (Python), 8 класс198
Задачи
«C»: Заполнить массив из 10 элементов случайными
числами в диапазоне [0; 100], сделать реверс
отдельно в первой и во второй половине массива.
Массив:
53 66 88 39 26 88 35 24 38 50
Результат: 26 39 88 66 53 50 38 24 35 88
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
198. Задачи
Программирование (Python), 8 класс199
Поиск максимального элемента
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
199. Поиск максимального элемента
Программирование (Python), 8 класс200
Поиск максимального элемента
? Какие переменные нужны?
for i in range(N):
if A[i] > M:
M = A[i]
print( M )
? Чего не хватает?
начальное
? Какое
значение взять для M?
1) M – значение, которое заведомо меньше всех
элементов массива
или
2) M = A[0] (или любой другой элемент)
максимальный не меньше, чем A[0]
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
200. Поиск максимального элемента
Программирование (Python), 8 класс201
Поиск максимального элемента
начинаем с A[1], так как
A[0] мы уже посмотрели
M = A[0]
for i in range(1,N):
if A[i] > M:
M = A[i]
print( M )
? Как найти минимальный?
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
201. Поиск максимального элемента
Программирование (Python), 8 класс202
Поиск максимального элемента (Python)
M = A[0]
for x in A:
if x > M:
M = x
print( M )
перебрать все элементы
в массиве A
! Не нужно знать размер!
print( max(A) )
print( min(A) )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
202. Поиск максимального элемента (Python)
Программирование (Python), 8 класс203
Номер максимального элемента
Задача. Найти в массиве максимальный элемент и его
номер.
? Какие переменные нужны?
M = A[0]; nMax = 0
for i in range(1,N):
if A[i] > M:
ли убрать одну
? Можно
M = A[i]
переменную?
nMax = i
print( f"A[{nMax}]={M}" )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
203. Номер максимального элемента
Программирование (Python), 8 класс204
Номер максимального элемента
! Если знаем nMax, то M=A[nMax]!
M = A[0]; nMax = 0
for i in range(1,N):
:
if A[i]> A[nMax]
M :
M = A[i]
nMax = i
print( f"A[{nMax}]={M}"
)
{A[nMax]}"
)
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
204. Номер максимального элемента
Программирование (Python), 8 класс205
Задачи (без min и max)
«A»: Напишите программу, которая заполняет массив из
20 элементов случайными числами на отрезке [50;
150] и находит в нём минимальный и максимальный
элементы и их номера.
«B»: Напишите программу, которая заполняет массив из
10 элементов в виде
A = [ 10, 2, 3, 4, 10, 6, 7, 8, 9, 10]
и выводит количество элементов, имеющих
максимальное значение.
«C»: Напишите программу, которая заполняет массив из
20 элементов случайными числами на отрезке [100;
200] и находит в нём пару соседних элементов,
сумма которых минимальна.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
205. Задачи (без min и max)
Программирование (Python), 8 класс206
Задачи
«D»: Напишите программу, которая заполняет массив из
20 элементов случайными числами на отрезке [–100;
100] и находит в каждой половине массива пару
соседних элементов, сумма которых максимальна.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
206. Задачи
Программирование (Python), 8 класс207
Обработка потока данных: максимум
Задача. С клавиатуры вводятся числа, ввод
завершается числом 0. Найти максимальное
из введённых чисел.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
207. Обработка потока данных: максимум
Программирование (Python), 8 класс208
Поиск максимума (минимума) в потоке
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
208. Поиск максимума (минимума) в потоке
Программирование (Python), 8 класс209
Поиск максимума (минимума)
1) нужна переменная для хранения максимума
2) как только прочитали первое число,
сохранили максимум («из одного»):
x = int(input())
M = x
3) читаем следующее значение:
x = int(input())
4) цикл: если новое число больше максимума,
заменяем M:
while x != 0:
if x > M: M = x
5) выводим результат M
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
209. Поиск максимума (минимума)
Программирование (Python), 8 класс210
Поиск максимума (минимума)
x = int(input())
M = x
while x != 0:
if x > M: M = x
print(M)
x = int(input())
print(M)
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
? Что плохо?
http://kpolyakov.spb.ru
210. Поиск максимума (минимума)
Программирование (Python), 8 класс211
Поиск максимума (минимума) – II
x = int(input())
M = x
while True:
x = int(input())
if x == 0: break
if x > M: M = x
print(M)
print(M)
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
? Что плохо?
http://kpolyakov.spb.ru
211. Поиск максимума (минимума) – II
Программирование (Python), 8 класс212
Максимум не из всех
Задача: с клавиатуры вводятся числа в
диапазоне [-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)
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
212. Максимум не из всех
Программирование (Python), 8 класс213
Минимум не из всех
По условию: 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)
? Как искать минимум?
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
213. Минимум не из всех
Программирование (Python), 8 класс214
Если диапазон неизвестен…
x = int(input())
M = 1 # любое нечётное
while x != 0:
if x % 2 == 0:
if M % 2 == 1 or x > M:
M = x
новый
x = int(input()) максимум
if M == 1 :
print("Нет таких чисел")
else:
print(M)
? Когда не нашли?
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
214. Если диапазон неизвестен…
Программирование (Python), 8 класс215
Задачи
«A»: с клавиатуры вводятся числа, ввод завершается
числом 0. Определить минимальное и
максимальное из введённых чисел.
Пример:
5
13
34
15
0
Минимум: 5
Максимум: 34
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
215. Задачи
Программирование (Python), 8 класс216
Задачи
«B»: с клавиатуры вводятся числа из отрезка [1;1000],
ввод завершается числом 0. Определить
минимальное и максимальное из тех введённых
чисел, которые делятся на 3. Вывести "нет", если
таких чисел нет.
Пример:
Пример:
5
5
31
34
18
17
21
41
15
11
0
0
Минимум: 15
Ответ: нет
Максимум: 21
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
216. Задачи
Программирование (Python), 8 класс217
Задачи
«C»: с клавиатуры вводятся числа, ввод завершается
числом 0. Определить минимальное и
максимальное из тех введённых двузначных
натуральных чисел, в записи которых есть цифра 6.
Вывести "нет", если таких чисел нет.
Пример:
6
36
18
26
15
0
Минимум: 26
Максимум: 36
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
Пример:
6
32
176
41
11
0
Ответ: нет
http://kpolyakov.spb.ru
217. Задачи
218Программирование
(Python)
§ 23. Символьные строки
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
218. Программирование (Python)
Программирование (Python), 8 класс219
Что такое символьная строка?
Символьная строка – это последовательность
символов.
• строка – единый объект
• длина строки может меняться во время работы
программы
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
219. Что такое символьная строка?
Программирование (Python), 8 класс220
Символьные строки
Присваивание:
s = "Вася пошёл гулять"
Ввод с клавиатуры:
s = input()
Вывод на экран:
print(s)
Длина строки:
n = len(s)
length – длина
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
220. Символьные строки
Программирование (Python), 8 класс221
Сравнение строк
?
print("Введите пароль: ")
Какой правильный
s = input()
пароль?
if s == "sEzAm":
print("Слушаюсь и повинуюсь!")
else:
print("Пароль неправильный")
? Как одна строка может быть меньше другой?
стоит раньше в отсортированном списке
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
221. Сравнение строк
Программирование (Python), 8 класс222
Сравнение строк
s1 = "паровоз"
s2 = "пароход"
if s1 < s2:
print(s1, "<", s2)
elif s1 == s2:
print(s1, "=", s2)
else:
print(s1, ">", s2)
? Что выведет?
паровоз < пароход
первые отличающиеся
буквы
Сравниваем с начала: паровоз
пароход
! в < х!
«в»: код 1074
«х»: код 1093
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
222. Сравнение строк
Программирование (Python), 8 класс223
Обращение к символу по номеру
print ( s[5] )
print ( s[-2] )
0
1
2
3
4
5
6
П
р
и
в
е
т
!
s[len(s)-2]
s[0] s[1] s[2] s[3] s[4] s[5] s[6]
! Символы нумеруются с нуля!
составить «кот»
s = "информатика"
kot = s[-2]+s[3]+s[-4]
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
223. Обращение к символу по номеру
Программирование (Python), 8 класс224
Посимвольная обработка строк
! Строка неизменна!
s[4] = "a"
Задача. Ввести строку и заменить в ней все буквы «э» на
буквы «е».
строим новую
строку!
sNew = ""
for i in range(len(s)
) :
range(len(s))
if s[i] == "э":
sNew += "е"
для каждого
символа строки
else:
sNew += s[i]
0
1
2
3
4
5
6
П
р
и
в
э
т
!
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
len(s)-1
http://kpolyakov.spb.ru
224. Посимвольная обработка строк
Программирование (Python), 8 класс225
Цикл перебора символов
sNew = ""
for c in s:
if c == "э":
sNew += "е"
else:
sNew += c
перебрать
все символы
строки
c
П
р
и
в
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
э
т
!
http://kpolyakov.spb.ru
225. Цикл перебора символов
Программирование (Python), 8 класс226
Задачи
«A»: Напишите программу, которая вводит строку,
состоящую только из точек и букв Х, и заменяет в
ней все точки на нули и все буквы X на единицы.
Пример:
Введите строку: ..X.XX.
Двоичный код: 0010110
«B»: Напишите программу, которая в символьной строке
заменяет все нули на единицы и наоборот.
Остальные символы не должны измениться.
Пример:
Введите строку: 10а01Bx1010c
Инверсия: 01a10Bx0101c
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
226. Задачи
Программирование (Python), 8 класс227
Задачи
«С»: Введите битовую строку и дополните её последним
битом, который должен быть равен 0, если в
исходной строке чётное число единиц, и равен 1,
если нечётное (в получившейся строке должно
всегда быть чётное число единиц).
Пример:
Введите битовую строку: 01101010110
Результат: 011010101100
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
227. Задачи
Программирование (Python), 8 класс228
Операции со строками
Объединение (конкатенация) :
s1 = "Привет"
"Привет, Вася!"
s2 = "Вася"
s = s1 + ", " + s2 + "!"
Умножение:
s = "АУ"
s5 = s*5
s5 = s + s + s + s + s
АУАУАУАУАУ
? Что получим?
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
228. Операции со строками
Программирование (Python), 8 класс229
Срезы строк (выделение части строки)
s = "0123456789"
s1 = s[3:8]
# "34567"
с какого
символа
до какого
(не включая 8)
s = "0123456789"
s1 = s[:8]
# "01234567"
от начала строки
s = "0123456789"
s1 = s[3:]
# "3456789"
до конца строки
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
229. Срезы строк (выделение части строки)
Программирование (Python), 8 класс230
Срезы строк
Срезы с отрицательными индексами:
s = "0123456789"
s1 = s[:-2]
# "01234567"
len(s)-2
s = "0123456789"
s1 = s[-6:-2]
len(s)-6
# "4567"
len(s)-2
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
230. Срезы строк
Программирование (Python), 8 класс231
Операции со строками
Удаление:
s = "0123456789"
s1 = s[:3] + s[9:]
"012"
"9"
"0129"
Вставка:
s = "0123456789"
s1 = s[:3] + "ABC" + s[3:]
"012"
"3456789"
"012ABC3456789"
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
231. Операции со строками
Программирование (Python), 8 класс232
Поиск в строках
s = "Здесь был Вася."
n = s.find ( "с" )
# n = 3
if n >= 0:
print ( "Номер символа", n )
else:
print ( "Символ не найден." )
! Находит первое слева вхождение
подстроки!
Поиск с конца строки:
s = "Здесь был Вася."
n = s.rfind ( "с" )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
# n = 12
http://kpolyakov.spb.ru
232. Поиск в строках
Программирование (Python), 8 класс233
Задачи
«A»: Ввести с клавиатуры в одну строку фамилию и имя,
разделив их пробелом. Вывести первую букву имени с
точкой и потом фамилию.
Пример:
Введите фамилию и имя:
Иванов Петр
П. Иванов
«B»: Ввести с клавиатуры в одну строку фамилию, имя и
отчество, разделив их пробелом. Вывести фамилию и
инициалы.
Пример:
Введите фамилию, имя и отчество:
Иванов Петр Семёнович
П.С. Иванов
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
233. Задачи
Программирование (Python), 8 класс234
Задачи
«C»: Ввести адрес файла и «разобрать» его на части,
разделенные знаком "/". Каждую часть вывести в
отдельной строке.
Пример:
Введите адрес файла:
C:/Фото/2015/Байкал/shaman.jpg
C:
Фото
2015
Байкал
shaman.jpg
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
234. Задачи
Программирование (Python), 8 класс235
Преобразования «строка» «число»
Из строки в число:
s = "123"
N = int ( s )
s = "123.456"
X = float ( s )
# N = 123
# X = 123.456
Из числа в строку:
N = 123
s = str ( N ) # s = "123"
s = f"{N:5}" # s = " 123"
X = 123.456
s = str (X )
# s = "123.456"
s = f"{X:7.2f}" # s = " 123.46"
s = f"{X:10.2e}" # s = " 1.23e+02"
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
235. Преобразования «строка» «число»
Программирование (Python), 8 класс236
Задачи
«A»: Напишите программу, которая вычисляет сумму двух
чисел, введенную в форме символьной строки. Все числа
целые.
Пример:
Введите выражение:
12+3
Ответ: 15
«B»: Напишите программу, которая вычисляет сумму трёх
чисел, введенную в форме символьной строки. Все числа
целые.
Пример:
Введите выражение:
12+3+45
Ответ: 60
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
236. Задачи
Программирование (Python), 8 класс237
Задачи
«C»: Напишите программу, которая вычисляет сумму
произвольного количества чисел, введенную в форме
символьной строки. Все числа целые.
Пример:
Введите выражение:
12+3+45+10
Ответ: 70
«D»: Напишите программу, которая вычисляет выражение,
содержащее целые числа и знаки сложения и вычитания.
Пример:
Введите выражение:
12+134–45–17
Ответ: 84
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
237. Задачи
Программирование (Python), 8 класс238
Подсчёт количества символов
Задача. Определить, сколько букв A в строке s.
count
0
1
2
3
4
5
6
s
B
A
D
C
E
A
A
0
0
1
1
1
1
2
3
s = input()
count = 0
for c in s:
if c == 'A':
count += 1
print( count )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
238. Подсчёт количества символов
Программирование (Python), 8 класс239
Другое решение
Задача. Определить, сколько букв A в строке s.
count
0
1
2
3
4
5
6
s
B
A
D
C
E
A
A
0
0
1
1
1
1
2
3
! Знаем индекс символа!
s = input()
N = len(s)
count = 0
for i in range(N):
s[i] == 'A':
if s[i]
count += 1
print( count )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
? Как обратиться
к следующему
символу?
s[i+1]
http://kpolyakov.spb.ru
239. Другое решение
Программирование (Python), 8 класс240
Задачи
«A»: Напишите программу, которая вводит символьную строку
и выводит 0, если в этой строке буква A встречается
чаще чем буква B, а в противном случае выводит 1.
Пример 1:
Введите строку: ABCABCA
Ответ: 0
Пример 2:
Введите строку: ABCABC
Ответ: 1
Пример 3:
Введите строку: ABCABCB
Ответ: 1
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
240. Задачи
Программирование (Python), 8 класс241
Задачи
«B»: Напишите программу, которая вводит символьную строку
и определяет количество пар одинаковых символов,
стоящих рядом.
Пример 1:
Введите строку: ABCABCA
Ответ: 0
Пример 2:
Введите строку: ABBCAABCC
Ответ: 3
Пример 3:
Введите строку: AAAAAA
Ответ: 5
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
241. Задачи
Программирование (Python), 8 класс242
Задачи
«C»: Напишите программу, которая вводит символьную строку
и определяет, какая буква встречается в ней чаще всего.
Если таких букв несколько, можно вывести любую из них.
Пример 1:
Введите строку: ABCABC
Ответ: A
Пример 2:
Введите строку: CBBACAABC
Ответ: C
Пример 3:
Введите строку: BBBBBB
Ответ: B
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
242. Задачи
Программирование (Python), 8 класс243
Самая длинная цепочка
Задача. Определить наибольшую длину цепочки из
букв A в строке s.
0
1
2
3
4
5
6
s
B
A
D
A
A
C
A
L 0
maxL 0
0
0
1
1
0
1
1
1
2
2
0
2
1
2
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
243. Самая длинная цепочка
Программирование (Python), 8 класс244
Самая длинная цепочка
Задача. Определить наибольшую длину цепочки из
букв A в строке s.
0
1
2
s
цепочка
A продолжается
L += 1
if L > maxL:
maxL = L
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
3
4
5
6
?
цепочка
прервалась
не A
L = 0
новая не
началась!
http://kpolyakov.spb.ru
244. Самая длинная цепочка
Программирование (Python), 8 класс245
Самая длинная цепочка
Задача. Определить наибольшую длину цепочки из
букв A в строке s.
s = input()
L = maxL = 0
цепочка
продолжается
for c in s:
if c == 'A':
L += 1
if L > maxL:
maxL = L
else:
цепочка
L = 0
прервалась
print( maxL )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
245. Самая длинная цепочка
Программирование (Python), 8 класс246
Задачи
«A»: Напишите программу, которая вводит символьную строку
и определяет наибольшую длину цепочки, которая
состоит только из букв X и Y.
Пример 1:
Введите строку: YXXYBCXYY
Ответ: 4
Пример 2:
Введите строку: ABCABC
Ответ: 0
Пример 3:
Введите строку: XXXXXX
Ответ: 6
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
246. Задачи
Программирование (Python), 8 класс247
Задачи
«B»: Напишите программу, которая вводит символьную строку
и определяет наибольшую длину цепочки, которая
состоит только из цифр (от 0 до 9).
Пример 1:
Введите строку: A01B1234C5
Ответ: 4
Пример 2:
Введите строку: ABCABC
Ответ: 0
Пример 3:
Введите строку: 980123
Ответ: 6
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
247. Задачи
Программирование (Python), 8 класс248
Задачи
«C»: Напишите программу, которая вводит символьную строку
и определяет наибольшую длину цепочки, которая
состоит только из цифр (от 0 до 9), которые стоят в
порядке возрастания.
Пример 1:
Введите строку: A7654321B4230C5
Ответ: 2
Пример 2:
Введите строку: ABCABC
Ответ: 0
Пример 3:
Введите строку: A12389B
Ответ: 5
Пример 4:
Введите строку: 123489
Ответ: 6
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
248. Задачи
Программирование (Python), 8 класс249
Метод замены символов
Задача. Определить наибольшую длину цепочки из
букв A в строке s.
s
0
1
2
3
4
5
6
B
A
D
A
A
C
A
Алгоритм
1) заменить все буквы, кроме A, на пробелы
s
A
A
A
A
2) разбить строку на части по пробелам
['A', 'AA', 'A']
3) определить максимальную из длин полученных
строк
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
249. Метод замены символов
Программирование (Python), 8 класс250
Метод замены символов
Задача. Определить наибольшую длину цепочки из
букв A в строке s.
s
s
B
A
A
D
A
A
A
A
C
A
A
s = s.replace('B', ' ')
s = s.replace('C', ' ')
s = s.replace('D', ' ')
for c in 'BCD':
s = s.replace( c, ' ' )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
250. Метод замены символов
Программирование (Python), 8 класс251
Метод замены символов
Задача. Определить наибольшую длину цепочки из
букв A в строке s.
s
A
A
A
A
['A', 'AA', 'A']
parts = s.split()
maxL = 0
for p in parts:
if len(p) > maxL:
maxL = len(p)
print( maxL )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
251. Метод замены символов
Программирование (Python), 8 класс252
Метод замены символов
Задача. Определить наибольшую длину цепочки из
букв A в строке s.
s
A
A
A
A
['A', 'AA', 'A']
parts = s.split()
print( max( len(p)
for p in parts ) )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
252. Метод замены символов
Программирование (Python), 8 класс253
Задачи
«A»: Напишите программу, которая вводит символьную
строку, состоящую только из букв P, Q и R, и определяет
наибольшую длину цепочки, которая состоит только из
букв Q.
Пример 1:
Введите строку: PQRPQQR
Ответ: 2
Пример 2:
Введите строку: QRQPQRQP
Ответ: 1
Пример 3:
Введите строку: RRPRPRP
Ответ: 0
Пример 4:
Введите строку: QQQQQQ
Ответ: 6
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
253. Задачи
Программирование (Python), 8 класс254
Задачи
«B»: Напишите программу, которая вводит символьную
строку, состоящую только из цифр и букв A, B, C.
Программа должна определить количество цепочек
длиной больше 2, состоящих только из цифр (от 0 до 9).
Пример 1:
Введите строку: A01B1234C5
Ответ: 1
Пример 2:
Введите строку: 315C789A71829
Ответ: 3
Пример 3:
Введите строку: A1B21C32C43A54B61C
Ответ: 0
Пример 4:
Введите строку: 12345678
Ответ: 1
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
254. Задачи
Программирование (Python), 8 класс255
Задачи
«С»: Напишите программу, которая вводит символьную
строку, состоящую только из цифр и заглавных латинских
букв (от A до Z). Программа должна определить
количество цепочек длиной больше 2, состоящих только
из цифр (от 0 до 9).
Пример 1:
Введите строку: E01W1234X5
Ответ: 1
Пример 2:
Введите строку: 315C789R71829
Ответ: 3
Пример 3:
Введите строку: A1R21T32N43Y54O61L
Ответ: 0
Пример 4:
Введите строку: 12345678
Ответ: 1
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
255. Задачи
Программирование (Python), 8 класс256
Конец фильма
ПОЛЯКОВ Константин Юрьевич
д.т.н., учитель информатики
ГБОУ СОШ № 163, г. Санкт-Петербург
[email protected]
ЕРЕМИН Евгений Александрович
к.ф.-м.н., доцент кафедры мультимедийной
дидактики и ИТО ПГГПУ, г. Пермь
[email protected]
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
256. Конец фильма
Программирование (Python), 8 класс257
Источники иллюстраций
1.
2.
иллюстрации художников издательства «Бином»
авторские материалы
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru