Similar presentations:
slides8-3py
1. Программирование (Python)
1Программирование
(Python)
§ 17. Введение
§ 18. Линейные программы
§ 19. Ветвления
§ 20. Программирование циклических
алгоритмов
§ 21. Массивы
§ 22. Алгоритмы обработки массивов
§ 23. Символьные строки
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
2. Программирование (Python)
2Программирование
(Python)
§ 17. Введение
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
3. Что такое программирование?
Программирование (Python), 8 класс3
Что такое программирование?
Программирование — это создание программ для
компьютеров. Этим занимаются программисты.
Чем занимаются программисты:
анализ задачи (выделение
исходных данных, связей
между ними, этапов решения
задачи)
системные аналитики
разработка алгоритмов
алгоритмисты
написание и отладка программ
кодировщики
тестирование программ
тестировщики
написание документации
технические писатели
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
4. Направления в программировании
Программирование (Python), 8 класс4
Направления в программировании
системный программист
операционные системы,
утилиты, драйверы
прикладной программист
прикладные программы, в
т.ч. для мобильных
устройств
веб-программист
веб-сайты
программист баз данных
системы управления
базами данных
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
5. Простейшая программа
Программирование (Python), 8 класс5
Простейшая программа
# Это пустая программа
? Что делает эта программа?
комментарии после #
не обрабатываются
кодировка utf-8
по умолчанию)
# coding: utf-8
# Это пустая программа
"""
Это тоже комментарий
"""
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
6. Вывод на экран
Программирование (Python), 8 класс6
Вывод на экран
оператор
вывода
Оператор — это команда
языка программирования.
print( "Привет!" )
print( "Привет", Вася! )
? Что плохо?
print( "Привет, Вася!" )
вся строка в
кавычках
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
7. Переход на новую строку
Программирование (Python), 8 класс7
Переход на новую строку
print( "Привет, Вася!" )
print( "Привет, Петя!" )
Результат:
Привет, Вася!
Привет, Петя!
переход на новую
строку автоматически
Нужно в одной строке:
Привет, Вася!Привет, Петя!
Решение:
print( "Привет, Вася!", end="" )
print( "Привет, Петя!" )
после вывода данных
ничего не выводить
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
8. Системы программирования
Программирование (Python), 8 класс8
Системы программирования
Системы программирования — это средства для
создания новых программ.
Транслятор — это программа, которая переводит
тексты программ, написанных программистом, в
машинные коды (команды процессора).
• компилятор — переводит всю программу в
машинные коды, строит исполняемый файл (.exe)
program Hello;
begin
write('Привет!')
end.
1010010100
privet.exe
• интерпретатор — сам выполняет программу по
частям (по одному оператору).
! Python – интерпретатор!
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
9. Системы программирования
Программирование (Python), 8 класс9
Системы программирования
Отладчик — это программа для поиска ошибок в других
программах.
• пошаговый режим — выполнение программы по
шагам (по одному оператору)
• просмотр значений переменных во время
выполнения программы
• точки останова – операторы в программе, перед
выполнением которых нужно остановиться.
Среда программирования (IDE):
• редактор текста программ
• транслятор
• отладчик
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
10. Задачи
Программирование (Python), 8 класс10
Задачи
«B»: Вывести на экран текст «лесенкой»
Вася
пошел
гулять
«C»: Вывести на экран рисунок из букв
Ж
ЖЖЖ
ЖЖЖЖЖ
ЖЖЖЖЖЖЖ
HH HH
ZZZZZ
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
11. Программирование (Python)
11Программирование
(Python)
§ 18. Линейные программы
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
12. Пример задачи
Программирование (Python), 8 класс12
Пример задачи
Задача. Ввести два числа и вычислить их сумму.
# ввести два числа
# вычислить их сумму
# вывести сумму на экран
? Выполнится?
Псевдокод – алгоритм на
русском языке с элементами
языка программирования.
! Компьютер не может исполнить псевдокод!
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
13. Зачем нужны переменные?
Программирование (Python), 8 класс13
Зачем нужны переменные?
# ввести два числа
Где запомнить?
# вычислить их сумму
# вывести сумму на экран
Переменная — это величина, которая имеет имя, тип и
значение. Значение переменной может изменяться во
время выполнения программы.
a
b
c
ячейки памяти
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
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-2026
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-2026
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-2026
увеличить на 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-2026
http://kpolyakov.spb.ru
18. Ввод с клавиатуры
Программирование (Python), 8 класс18
Ввод с клавиатуры
ввести строку с клавиатуры
и связать с переменной a
a = input()
b = input()
Протокол:
summa = a + b
print ( summa )
21
33
2133
? Почему?
! Результат функции input – строка символов!
преобразовать в
целое число
a = int( input() )
b = int( input() )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
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-2026
http://kpolyakov.spb.ru
20. Ввод вещественных чисел
Программирование (Python), 8 класс20
Ввод вещественных чисел
print( "Введите число:" )
x = float (input())
или так:
x = float (input("Введите число:"))
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
21. Программа сложения чисел
Программирование (Python), 8 класс21
Программа сложения чисел
? Что плохо?
a = int ( input() )
b = int ( input() )
summa = a + b
print ( summa )
ожидание:
реальность:
Введите два числа:
5
7
5+7=12
5
7
12
? Как улучшить диалог?
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
22. Вывод данных с текстом
Программирование (Python), 8 класс22
Вывод данных с текстом
значение b
значение a
5+7=12
значение
summa
текст
print(a, "+", b, "=", summa)
ожидание:
реальность:
5+7=12
5 + 7 = 12
это пробелы не заказывали!
sep="" )
print(a, "+", b, "=", summa, sep=""
separator
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
пустой
http://kpolyakov.spb.ru
23. Вывод данных с текстом (f-строки)
Программирование (Python), 8 класс23
Вывод данных с текстом (f-строки)
значение b
значение a
значение с
5+7=12
текст
имена переменных в
фигурных скобках
print( f "{a}+{b}={summa}" )
форматная
строка
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
24. Программа сложения чисел
Программирование (Python), 8 класс24
Программа сложения чисел
print ( "Введите два числа: " )
a = int ( input("a = ") )
b = int ( input("b = ") )
summa = a + b
print ( f"{a}+{b}={summa}" )
? Как переделать для 3-х чисел?
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
25. Задачи
Программирование (Python), 8 класс25
Задачи
«A»: Ввести три числа, найти их сумму.
Пример:
Введите три числа:
4
5
7
4+5+7=16
«B»: Ввести три числа, найти их сумму и
произведение.
Пример:
Введите три числа:
4
5
7
4+5+7=16
4*5*7=140
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
26. Задачи
Программирование (Python), 8 класс26
Задачи
«C»: Ввести три числа, найти их сумму, произведение
и среднее арифметическое.
Пример:
Введите три числа:
4
5
7
4+5+7=16
4*5*7=140
(4+5+7)/3=5.333333
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
27. Арифметические выражения
Программирование (Python), 8 класс27
Арифметические выражения
c b 1
a
d
2
Линейная запись (в одну строку):
a = (c + b - 1) / 2 * d
Операции: + –
* – умножение
/ – деление
** – возведение в степень (x2 x**2)
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
28. Порядок выполнения операций
Программирование (Python), 8 класс28
Порядок выполнения операций
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-2026
c b5 3 1
a
d
2
перенос на
следующую строку
перенос внутри
скобок разрешён
http://kpolyakov.spb.ru
29. Деление
Программирование (Python), 8 класс29
Деление
Классическое деление:
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-2026
http://kpolyakov.spb.ru
30. Частное и остаток
Программирование (Python), 8 класс30
Частное и остаток
// – деление нацело (остаток отбрасывается)
% – остаток от деления
175 сек = 2 мин 55 сек ? Как получить 2 и 55?
t = 175
m = t // 60 # 2
s = t % 60 # 55
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
31. Частное и остаток
Программирование (Python), 8 класс31
Частное и остаток
? Что получится?
n = 123
d = n // 10 # 12
k = n % 10 # 3
При делении на 10 нацело отбрасывается последняя
цифра числа.
Остаток от деления на 10 – это последняя цифра числа.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
32. Операторы // и %
Программирование (Python), 8 класс32
Операторы // и %
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-2026
4
3
2
1
http://kpolyakov.spb.ru
33. Сокращенная запись операций
Программирование (Python), 8 класс33
Сокращенная запись операций
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-2026
a += 1
увеличение на 1
http://kpolyakov.spb.ru
34. Форматный вывод
Программирование (Python), 8 класс34
Форматный вывод
a, b = 1, 2
print( f"{a}+{b}={a+b}" )
1+2=3
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
35. Форматный вывод
Программирование (Python), 8 класс35
Форматный вывод
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-2026
1
2
3
3
5
http://kpolyakov.spb.ru
36. Задачи
Программирование (Python), 8 класс36
Задачи
«A»: Ввести число, обозначающее количество секунд.
Вывести то же самое время в минутах и секундах.
Пример:
Введите число секунд: 175
2 мин. 55 с.
«B»: Ввести число, обозначающее количество секунд.
Вывести то же самое время в часах, минутах и
секундах.
Пример:
Введите число секунд: 8325
2 ч. 18 мин. 45 с
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
37. Задачи
Программирование (Python), 8 класс37
Задачи
«С»: Занятия в школе начинаются в 8-30. Урок длится 45
минут, перерывы между уроками – 10 минут. Ввести
номер урока и вывести время его окончания.
Пример:
Введите номер урока: 6
13-50
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
38. Задачи (Повторение)
Программирование (Python), 8 класс38
Задачи (Повторение)
«A1»: Ввести целое число и вывести его квадрат.
Пример:
Введите число: 175
30625
«A2»: Ввести целое число и вывести его последнюю
цифру.
Пример:
Введите число: 175
5
«A3»: Ввести трёхзначное целое число и вывести его
первую цифру (число сотен).
Пример:
Введите число: 175
1
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
39. Задачи (Повторение)
Программирование (Python), 8 класс39
Задачи (Повторение)
«B1»: Ввести целое число и вывести его вторую с конца
цифру (число десятков).
Пример:
Введите число: 175
7
«B2»: Ввести двузначное целое число и вывести сумму его
цифр.
Пример:
Введите число: 17
Сумма цифр 8
«B3»: Ввести число минут и число секунд и перевести это
время в секунды.
Пример:
Минуты: 2
Секунды: 55
175 секунд
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
40. Задачи
Программирование (Python), 8 класс40
Задачи
«С1»: Ввести четырёхзначное целое число и найти сумму его
цифр.
Пример:
Введите целое число: 1234
Сумма цифр 10
«С2»: Ввести трёхзначное целое число и «развернуть» его
наоборот.
Пример:
Введите целое число: 123
321
«С3»: Ввести четырёхзначное целое число и переставить
первые две его цифры в конец числа.
Пример:
Введите целое число: 1234
3421
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
41. Задачи (Повторение)
Программирование (Python), 8 класс41
Задачи (Повторение)
«A»: Ввести трёхзначное целое число и вывести в
столбик все его цифры, начиная с последней.
Пример:
Введите число: 175
5
7
1
«B»: Ввести трёхзначное целое число и вывести его
цифры, начиная с первой.
Пример:
Введите число: 175
1
7
5
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
42. Задачи
Программирование (Python), 8 класс42
Задачи
«С»: Ввести четырёхзначное целое число и найти сумму
его цифр.
Пример:
Введите целое число: 1234
Сумма цифр 10
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
43. Вещественные числа (сложение)
Программирование (Python), 8 класс43
Вещественные числа (сложение)
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-2026
http://kpolyakov.spb.ru
44. Форматный вывод
Программирование (Python), 8 класс44
Форматный вывод
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-2026
http://kpolyakov.spb.ru
45. Форматный вывод
Программирование (Python), 8 класс45
Форматный вывод
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-2026
http://kpolyakov.spb.ru
46. Научный формат чисел
Программирование (Python), 8 класс46
Научный формат чисел
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-2026
http://kpolyakov.spb.ru
47. Операции с вещественными числами
Программирование (Python), 8 класс47
Операции с вещественными числами
int – целая часть числа
x=1.6
print( int(x) )
1
round – ближайшее целое число
x=-1.2
-1
print( round(x) )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
48. Математические функции
Программирование (Python), 8 класс48
Математические функции
загрузить
модуль 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-2026
http://kpolyakov.spb.ru
49. Операции с вещественными числами
Программирование (Python), 8 класс49
Операции с вещественными числами
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-2026
http://kpolyakov.spb.ru
50. Задачи
Программирование (Python), 8 класс50
Задачи
«A»: Ввести число, обозначающее размер одной
фотографии в Мбайтах. Определить, сколько
фотографий поместится на флэш-карту объёмом
2 Гбайта.
Пример:
Размер фотографии в Мбайтах: 6.3
Поместится фотографий: 325.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
51. Задачи
Программирование (Python), 8 класс51
Задачи
«B»: Оцифровка звука выполняется в режиме стерео с
частотой дискретизации 44,1 кГц и глубиной
кодирования 24 бита. Ввести время записи в
минутах и определить, сколько Мбайт нужно
выделить для хранения полученного файла
(округлить результат в большую сторону).
Пример:
Введите время записи в минутах: 10
Размер файла 152 Мбайт
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
52. Задачи
Программирование (Python), 8 класс52
Задачи
«С»: Разведчики-математики для того, чтобы опознать
своих, используют числовые пароли. Услышав
число-пароль, разведчик должен возвести его в
квадрат и сказать в ответ первую цифры дробной
части полученного числа. Напишите программу,
которая по полученному паролю (вещественному
числу) вычисляет число-ответ.
Пример:
Введите пароль: 1.92
Ответ: 6
потому что 1,922 = 3,6864…, первая цифра
дробной части – 6
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
53. Случайные и псевдослучайные числа
Программирование (Python), 8 класс53
Случайные и псевдослучайные числа
Случайные явления
• встретил слона – не встретил слона
• жеребьёвка на соревнованиях
• лотерея
• случайная скорость (направление выстрела ) в игре
• …
Случайные числа — это последовательность чисел, в
которой невозможно предсказать следующее число,
даже зная все предыдущие.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
54. Случайные и псевдослучайные числа
Программирование (Python), 8 класс54
Случайные и псевдослучайные числа
! Компьютер неслучаен!
Псевдослучайные числа — похожи на случайные, но
строятся по формуле.
следующее
предыдущее
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-2026
http://kpolyakov.spb.ru
55. Датчик случайных чисел
Программирование (Python), 8 класс55
Датчик случайных чисел
Целые числа на отрезке:
подключить функцию randint
из модуля random
from random import randint
K = randint(1, 6) # отрезок [1,6]
L = randint(1, 6) # это уже другое число!
англ. integer – целый
random – случайный
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
56. Датчик случайных чисел
Программирование (Python), 8 класс56
Датчик случайных чисел
Вещественные числа:
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-2026
http://kpolyakov.spb.ru
57. Задачи
Программирование (Python), 8 класс57
Задачи
«A»: В игре «Русское лото» из мешка случайным
образом выбираются бочонки, на каждом из которых
написано число от 1 до 90. Напишите программу,
которая выводит наугад первые 5 выигрышных
номеров.
«B»: + Доработайте программу «Русское лото» так,
чтобы все 5 значений гарантированно были бы
разными (используйте разные диапазоны).
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
58. Задачи
Программирование (Python), 8 класс58
Задачи
«С»: + Игральный кубик бросается три раза (выпадает
три случайных значения). Из этих чисел
составляется целое число, программа должна найти
его квадрат.
Пример:
Выпало очков:
1 2 3
Число 123
Его квадрат 15129
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
59. Задачи
Программирование (Python), 8 класс59
Задачи
«D»: + Получить случайное трёхзначное число и вывести
в столбик его отдельные цифры.
Пример:
Получено число 123
сотни: 1
десятки: 2
единицы: 3
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
60. Программирование (Python)
60Программирование
(Python)
§ 19. Ветвления
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
61. Выбор наибольшего из двух чисел
Программирование (Python), 8 класс61
Выбор наибольшего из двух чисел
Задача: изменить порядок действий в зависимости от
выполнения некоторого условия.
начало
ввод a,b
да
a > b?
M=a
нет
полная
форма
ветвления
M=b
вывод M
? Если a = b?
конец
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
62. Выбор наибольшего из двух чисел
Программирование (Python), 8 класс62
Выбор наибольшего из двух чисел
отступы
if a > b:
M = a
else:
M = b
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
63. Ввод двух чисел в одной строке
Программирование (Python), 8 класс63
Ввод двух чисел в одной строке
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-2026
http://kpolyakov.spb.ru
64. Вариант 1. Программа
Программирование (Python), 8 класс64
Вариант 1. Программа
print("Введите два целых числа")
a, b = map( int, input().split() )
if a > b:
M = a
полная форма
условного
else:
оператора
M = b
print("Наибольшее число", M)
Решение в стиле Python:
M = max(a, b)
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
M = a if a > b else b
http://kpolyakov.spb.ru
65. Выбор наибольшего из двух чисел-2
Программирование (Python), 8 класс65
Выбор наибольшего из двух чисел-2
начало
ввод a,b
M =a
да
b > a?
нет
неполная
форма
ветвления
M =b
вывод M
конец
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
66. Вариант 2. Программа
Программирование (Python), 8 класс66
Вариант 2. Программа
print("Введите два целых числа")
a, b = map( int, input().split() )
M = a
неполная форма
if b > a:
условного
оператора
M = b
print("Наибольшее число", M)
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
67. Примеры
Программирование (Python), 8 класс67
Примеры
Поиск минимального:
if a < b:
M = a
if b < a:
M = b
? Что плохо?
? Когда работает неверно?
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
68. Примеры
Программирование (Python), 8 класс68
Примеры
? Что делает эта программа?
? В чём отличие?
if a < b:
c = a
a = b
b = c
b
a
4
6
2
6
4
?
4
c
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
if a < b:
c = a
a = b
b = c
Решение в стиле Python:
a, b = b, a
http://kpolyakov.spb.ru
69. В других языках программирования
Программирование (Python), 8 класс69
В других языках программирования
Паскаль:
С:
if a < b then begin
c:= a;
a:= b;
b:= c;
end;
if (a < b) {
c = a;
a = b;
b = c;
}
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
70. Знаки отношений
Программирование (Python), 8 класс70
Знаки отношений
> <
больше, меньше
>=
больше или равно
<=
меньше или равно
==
равно
!=
не равно
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
71. Вложенные условные операторы
Программирование (Python), 8 класс71
Вложенные условные операторы
Задача: в переменных a и b записаны возрасты Андрея и
Бориса. Кто из них старше?
Сколько вариантов?
if a > b:
print("Андрей старше")
else:
if a == b:
print("Одного возраста")
else:
print("Борис старше")
?
? Зачем нужен?
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
вложенный
условный оператор
http://kpolyakov.spb.ru
72. Каскадное ветвление
Программирование (Python), 8 класс72
Каскадное ветвление
if a > b:
print("Андрей старше")
elif a == b:
print("Одного возраста")
else:
print("Борис старше")
! elif = else if
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
73. Каскадное ветвление
Программирование (Python), 8 класс73
Каскадное ветвление
cost = 1500
if cost < 1000:
print ( "Скидок нет." )
elif cost < 2000:
первое сработавшее
условие
print ( "Скидка 2%." )
elif cost < 5000:
print ( "Скидка 5%." )
else:
print ( "Скидка 10%." )
? Что выведет?
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
Скидка 2%.
http://kpolyakov.spb.ru
74. Задачи (без функций min и max!)
Программирование (Python), 8 класс74
Задачи (без функций min и max!)
«A»: Ввести два целых числа, найти наибольшее и
наименьшее из них.
Пример:
Введите два целых числа:
1 5
Наибольшее число 5
Наименьшее число 1
«B»: Ввести четыре целых числа, найти наибольшее из
них.
Пример:
Введите четыре целых числа:
1 5 4 3
Наибольшее число 5
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
75. Задачи
Программирование (Python), 8 класс75
Задачи
«C»: Ввести последовательно возраст Антона, Бориса и
Виктора. Определить, кто из них старше.
Пример:
Возраст Антона: 15
Возраст Бориса: 17
Возраст Виктора: 16
Ответ: Борис старше всех.
Пример:
Возраст Антона: 17
Возраст Бориса: 17
Возраст Виктора: 16
Ответ: Антон и Борис старше Виктора.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
76. Сложные условия
Программирование (Python), 8 класс76
Сложные условия
Задача. Фирма набирает сотрудников от 25 до 40 лет
включительно. Ввести возраст человека и определить,
подходит ли он фирме (вывести ответ "подходит" или
"не подходит").
Особенность: надо проверить, выполняются ли два
условия одновременно:
возраст 25
возраст 40
? Можно ли решить известными методами?
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
77. Плохое решение
Программирование (Python), 8 класс77
Плохое решение
print("Введите ваш возраст")
v = int(input())
if v >= 25:
вложенный
условный
if v <= 40:
оператор
print("Подходит!")
else:
print("Не подходит.")
else:
print("Не подходит.")
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
78. Хорошее решение (операция «И»)
Программирование (Python), 8 класс78
Хорошее решение (операция «И»)
Задача: набор сотрудников в возрасте 25-40 лет
(включительно).
сложное условие
if v >= 25 and v <= 40 :
print("подходит")
else:
print("не подходит")
and «И»: одновременное выполнение
всех условий!
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
79. Примеры
Программирование (Python), 8 класс79
Примеры
Задача. Вывести "Да", если число в переменной a –
двузначное.
if 10 <= a and a <= 99:
print("Да")
Задача. Вывести "Да", если число в переменной a –
двузначное и делится на 7.
if 10 <= a and a <= 99 and (a % 7)==0:
print("Да")
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
80. Сложные условия: «ИЛИ»
Программирование (Python), 8 класс80
Сложные условия: «ИЛИ»
Задача. Самолёт летает по понедельникам и четвергам.
Ввести номер дня недели и определить, летает ли в
этот день самолёт.
Особенность: надо проверить, выполняется ли одно из
двух условий:
день = 1
день = 4
if d == 1 or d == 4 :
print("Летает")
else:
print("Не летает")
сложное
условие
or «ИЛИ»: выполнение хотя бы одного
из двух условий!
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
81. Ещё пример
Программирование (Python), 8 класс81
Ещё пример
Задача. Фирма набирает сотрудников от 25 до 40 лет
включительно. Ввести возраст человека и определить,
подходит ли он фирме (вывести ответ "подходит" или
"не подходит"). Использовать «ИЛИ».
if v < 25 or v > 40 :
print("не подходит")
else:
print("подходит")
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
82. Сложные условия: «НЕ»
Программирование (Python), 8 класс82
Сложные условия: «НЕ»
if not(a < b):
print("Cтарт!")
? Как без «НЕ»?
not «НЕ»: если выполняется обратное условие
if a >= b:
print("Cтарт!")
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
83. Простые и сложные условия
Программирование (Python), 8 класс83
Простые и сложные условия
Простые условия (отношения)
<
<=
>
>=
==
равно
!=
не равно
Сложное условие – это условие, состоящее из
нескольких простых условий (отношений),
связанных с помощью логических операций:
• and – одновременное выполнение условий
x >= 25 and x <= 40
• or – выполнение хотя бы одного из условий
x <= 25 or x >= 40
• not – отрицание, обратное условие
x <=
not (x > 25)
???25
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
84. Порядок выполнения операций
Программирование (Python), 8 класс84
Порядок выполнения операций
• выражения в скобках
• <, <=, >, >=, =, !=
• not
• and
• or
4
1
6
2
5
3
if not a > 2 or c != 5 and b < a:
...
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
85. Сложные условия
Программирование (Python), 8 класс85
Сложные условия
Истинно или ложно
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-2026
a
Да
Да
http://kpolyakov.spb.ru
86. Задачи
Программирование (Python), 8 класс86
Задачи
«A»: Напишите программу, которая получает три числа рост трёх спортсменов, и выводит сообщение «По
росту.», если они стоят по возрастанию роста, или
сообщение «Не по росту!», если они стоят не по
росту.
Пример:
Введите рост трёх спортсменов:
165 170 172
По росту.
Пример:
Введите рост трёх спортсменов:
175 170 172
Не по росту!
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
87. Задачи
Программирование (Python), 8 класс87
Задачи
«B»: Напишите программу, которая получает номер
месяца и выводит соответствующее ему время года
или сообщение об ошибке.
Пример:
Введите номер месяца:
5
Весна.
Пример:
Введите номер месяца:
15
Неверный номер месяца.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
88. Задачи
Программирование (Python), 8 класс88
Задачи
«C»: Напишите программу, которая получает возраст
человека (целое число, не превышающее 120) и
выводит этот возраст со словом «год», «года» или
«лет». Например, «21 год», «22 года», «25 лет».
Пример:
Введите возраст: 18
Вам 18 лет.
Пример:
Введите возраст: 21
Вам 21 год.
Пример:
Введите возраст: 22
Вам 22 года.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
89. Одна задача
Программирование (Python), 8 класс89
Одна задача
Дана программа:
s = int(input())
t = int(input())
if (s < 5) or (t > 3):
print("YES")
else:
print("NO")
Программу запускали 9 раз, в качестве значений s и t
вводили следующие пары чисел:
(15, 9) (5,-7) (3,11) (18,-15) (0,-3)
(-17,6) (17,3) (-4,5) (20,0)
Сколько было запусков, при которых программа
напечатала "YES"?
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
5
http://kpolyakov.spb.ru
90. Вторая задача
Программирование (Python), 8 класс90
Вторая задача
Дана программа:
s = int(input())
t = int(input())
if (s < 4) and (t < 10):
print("YES")
else:
print("NO")
Программу запускали 9 раз, в качестве значений s и t
вводили следующие пары чисел:
(3, 10) (11,-7) (4,8) (18,-15) (0,-3)
(-17,6) (17,-1) (-4,5) (20,0)
Сколько было запусков, при которых программа
напечатала "YES"?
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
3
http://kpolyakov.spb.ru
91. Третья задача
Программирование (Python), 8 класс91
Третья задача
Дана программа:
s = int(input())
t = int(input())
if (s > 10) or (t <= 5):
print("YES")
else:
print("NO")
Программу запускали 9 раз, в качестве значений s и t
вводили следующие пары чисел:
(15, 9) (1,5) (10,11) (8,15) (10,5)
(-17,6) (17,-1) (-4,5) (20,0)
Сколько было запусков, при которых программа
напечатала "NO"?
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
3
http://kpolyakov.spb.ru
92. Четвёртая задача
Программирование (Python), 8 класс92
Четвёртая задача
Дана программа:
s = int(input())
t = int(input())
if (s <= 10) and (t > 5):
print("YES")
else:
print("NO")
Программу запускали 9 раз, в качестве значений s и t
вводили следующие пары чисел:
(8, 9) (10,-7) (3,11) (18,-15) (0,-3)
(-17,5) (17,-1) (10,6) (20,0)
Сколько было запусков, при которых программа
напечатала "NO"?
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
6
http://kpolyakov.spb.ru
93. Логические переменные
Программирование (Python), 8 класс93
Логические переменные
b = True
b = False
type(b)
только два
возможных
значения
<class 'bool'>
логическая (булевская)
переменная
Джордж Буль
Пример:
freeDay = (d==6 or d==7)
...
if not freeDay:
print("Рабочий день.")
else:
print("Выходной!")
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
94. Задачи
Программирование (Python), 8 класс94
Задачи
«A»: Напишите программу, которая получает с
клавиатуры целое число и записывает в логическую
переменную значение «да» (True), если это число
трёхзначное. После этого на экран выводится ответ
на вопрос: «Верно ли, что было получено
трёхзначное число?».
Пример:
Введите число: 165
Ответ: да.
Пример:
Введите число: 1651
Ответ: нет.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
95. Задачи
Программирование (Python), 8 класс95
Задачи
«B»: Напишите программу, которая получает с
клавиатуры трёхзначное число и записывает в
логическую переменную значение «да» (True), если
это число – палиндром, то есть читается одинаково
слева направо и справа налево. После этого на
экран выводится ответ на вопрос: «Верно ли, что
введённое число – палиндром?».
Пример:
Введите число: 165
Ответ: нет.
Пример:
Введите число: 656
Ответ: да.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
96. Задачи
Программирование (Python), 8 класс96
Задачи
«С»: Напишите программу, которая получает с
клавиатуры трёхзначное число и записывает в
логическую переменную значение «да» (True), если
это все его цифры одинаковы. После этого на экран
выводится ответ на вопрос: «Верно ли, что все
цифры введённого числа одинаковы?»
Пример:
Введите число: 161
Ответ: нет.
Пример:
Введите число: 555
Ответ: да.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
97. Экспертная система
Программирование (Python), 8 класс97
Экспертная система
Экспертная система — это компьютерная программа,
задача которой — заменить человека-эксперта при
принятии решений в сложной ситуации.
База знаний = факты + правила вывода:
• если у животного есть перья, то это птица;
• если животное кормит детенышей молоком, то это —
млекопитающее;
• если животное — млекопитающее и ест мясо, то
это — хищник.
Диалог:
Это животное кормит детей молоком? Нет
Это животное имеет перья? Да
Это птица.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
98. Дерево решений
Программирование (Python), 8 класс98
Дерево решений
Кормит детей молоком?
да
нет
Имеет перья?
млекопитающее
Ест мясо?
нет
да
нет
да
?
птица
?
хищник
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
99. Программирование экспертной системы
Программирование (Python), 8 класс99
Программирование экспертной системы
Ответы пользователя: да и нет – символьные строки.
ans = input("Кормит детей молоком? ")
if ans == "да":
... # вариант 1
else:
# вариант
... # вариант
2 1
print("Млекопитающее.")
ans = input("Ест мясо? ")
if ans == "да":
print("Хищник.")
else:
print("Не знаю.")
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
100. Заглавные и строчные буквы
Программирование (Python), 8 класс100
Заглавные и строчные буквы
if ans == "да":
...
не сработает
на "Да"
? Как исправить?
if ans == "да" or ans == "Да":
...
Ещё лучше:
if ans.lower() == "да":
...
преобразовать все
заглавные в строчные
if ans.upper() == "ДА":
...
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
101. Программирование (Python)
101Программирование
(Python)
§ 23. Отладка программ
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
102. Виды ошибок
Программирование (Python), 8 класс102
Виды ошибок
Синтаксические ошибки – нарушение правил записи
операторов языка программирования.
Обнаруживаются транслятором.
Логические ошибки – неверно составленный алгоритм.
Отказ (ошибка времени выполнения) – аварийная
ситуация во время выполнения программы.
Отладка – поиск и исправление ошибок в программе.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
103. Пример отладки программы
Программирование (Python), 8 класс103
Пример отладки программы
Программа решения квадратного уравнения
ax bx c 0
2
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-2026
http://kpolyakov.spb.ru
104. Тестирование
Программирование (Python), 8 класс104
Тестирование
Тест 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-2026
D b 2 4ac
b D
x1, 2
2a
http://kpolyakov.spb.ru
105. Отладочная печать
Программирование (Python), 8 класс105
Отладочная печать
Идея: выводить все промежуточные результаты.
a = float(input())
b = float(input())
c = float(input())
print(a, b, c)
D = b*b - 4*a*a
print("D=", D)
...
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
106. Отладочная печать
Программирование (Python), 8 класс106
Отладочная печать
Идея: выводить все промежуточные результаты.
Результат:
Введите 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-2026
! Одна ошибка найдена!
http://kpolyakov.spb.ru
107. Отладка программы
Программирование (Python), 8 класс107
Отладка программы
Тест 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-2026
? Что неверно?
http://kpolyakov.spb.ru
108. Задачи
Программирование (Python), 8 класс108
Задачи
«A»: Загрузите программу, которая должна вычислять
сумму цифр трёхзначного числа:
N = input(int("N = "))
d0 = N % 10
d1 = N % 100
d2 = N // 100
d0 + d2 = s
print(s)
Выполните отладку программы:
• исправьте синтаксические ошибки
• определите ситуации, когда она работает неверно
• исправьте логические ошибки.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
109. Задачи
Программирование (Python), 8 класс109
Задачи
«B»: Доработайте программу из п. А так, чтобы она
правильно работала с отрицательными
трёхзначными числами: при вводе числа «–123»
программа должна выдавать ответ 6.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
110. Задачи
Программирование (Python), 8 класс110
Задачи
«С»: Загрузите программу, которая должна вычислять
наибольшее из трёх чисел:
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-2026
http://kpolyakov.spb.ru
111. Программирование (Python)
111Программирование
(Python)
§ 20. Программирование
циклических алгоритмов
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
112. Зачем нужен цикл?
Программирование (Python), 8 класс112
Зачем нужен цикл?
Задача. Вывести 5 раз «Привет!».
print("Привет")
print("Привет")
print("Привет")
print("Привет")
print("Привет")
Цикл «N раз»:
сделай 5 раз
print("Привет")
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
? А если 5000?
такого оператора нет
в Python!
http://kpolyakov.spb.ru
113. Как работает цикл?
Программирование (Python), 8 класс113
Как работает цикл?
! Нужно запоминать, сколько раз цикл уже выполнен!
переменная-счётчик
ещё не делали
счётчик = 0
пока счётчик < 5
print("Привет")
счётчик +=
= счётчик
+ 1
счётчик
1
сделали ещё раз
c = 0
while c < 5:
print("Привет")
c += 1
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
114. Ещё один вариант
Программирование (Python), 8 класс114
Ещё один вариант
Идея: запоминать, сколько шагов осталось.
счётчик = 5
пока счётчик > ???
0
print("Привет")
счётчик -=
= счётчик
???
1
1
c = 5
while c > 0:
print("Привет")
c -= 1
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
? Как записать иначе
последнюю строку?
http://kpolyakov.spb.ru
115. Цикл с предусловием
Программирование (Python), 8 класс115
Цикл с предусловием
• условие проверяется при входе в цикл
• как только условие становится ложным, работа цикла
заканчивается
• если условие ложно в самом начале, цикл не
выполняется ни разу
while условие:
...
тело цикла
? Если условие никогда не станет ложно?
while True:
...
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
бесконечный цикл
(зацикливание)
http://kpolyakov.spb.ru
116. Сколько раз выполняется цикл?
Программирование (Python), 8 класс116
Сколько раз выполняется цикл?
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-2026
http://kpolyakov.spb.ru
117. Подбор числа битов
Программирование (Python), 8 класс117
Подбор числа битов
Задача. Ввести целое число – мощность алфавита M.
Найти количество битов i, необходимое для
равномерного кодирования символов из этого
алфавита.
?
Как найти i?
2i ≥ M
Начинаем с i = 1, увеличиваем i, пока 2i < M.
M = int(input("Мощность алфавита:"))
i = 1
while 2**i < M:
i += 1
print(f"i={i}")
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
118. Задачи
Программирование (Python), 8 класс118
Задачи
«A»: Напишите программу, которая получает с
клавиатуры количество повторений и выводит
столько же раз какое-нибудь сообщение.
Пример:
Сколько раз повторить? 3
Привет!
Привет!
Привет!
«B»: Напишите программу, которая получает с
клавиатуры натуральное число N и подбирает
наибольшее натуральное число, квадрат которого
меньше, чем N.
Пример:
Введите число: 311
Ответ: 17
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
119. Задачи
Программирование (Python), 8 класс119
Задачи
«С»: Напишите программу, которая получает с
клавиатуры натуральное число N и подбирает
наибольшее число Фибоначчи, которое не больше,
чем N. Числа Фибоначчи – это последовательность
чисел, в которой первое число равно 0, второе равно
1, а каждое следующее равно сумме двух
предыдущих:
0, 1, 1, 2, 3, 5, 8, 13, 21, …
Пример 1:
Введите число: 311
Ответ: 233
Пример 2:
Введите число: 377
Ответ: 377
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
120. Разбиение числа на отдельные цифры
Программирование (Python), 8 класс120
Разбиение числа на отдельные цифры
Задача. Ввести натуральное число и вывести в столбик
все его цифры, начиная с последней.
123 3
2
1
Выделить последнюю цифру числа в переменной N:
d = N % 10
123 3
Отбросить последнюю цифру числа в переменной N:
N = N // 10
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
123 12
http://kpolyakov.spb.ru
121. Разбиение числа на отдельные цифры
Программирование (Python), 8 класс121
Разбиение числа на отдельные цифры
• выделяем последнюю цифру числа (%)
• выводим эту цифру на экран
• отсекаем последнюю цифру числа (//)
N
d
начальное значение
123
12
3
1
2
0
1
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
? Когда остановиться?
while N != 0:
...
http://kpolyakov.spb.ru
122. Разбиение числа на отдельные цифры
Программирование (Python), 8 класс122
Разбиение числа на отдельные цифры
N = int(input("Введите число:"))
while N != 0:
d = N % 10
print( d )
N = N // 10
? Если вместо 10 написать 8 ?
? Если вместо 10 написать 2?
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
12 4
1
12 0
0
1
1
http://kpolyakov.spb.ru
123. Сумма цифр числа
Программирование (Python), 8 класс123
Сумма цифр числа
Задача. Вычислить сумму цифр введённого числа.
123 1 + 2 + 3 = 6
Выделить последнюю цифру числа в переменной N:
d = N % 10
123 3
Отбросить последнюю цифру числа в переменной N:
N = N // 10
123 12
Добавить к переменной s значение переменной d:
s +=
= sd+ d
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
s = 6 6 + 4 = 10
d=4
http://kpolyakov.spb.ru
124. Сумма цифр числа
Программирование (Python), 8 класс124
Сумма цифр числа
• выделяем последнюю цифру числа (%)
• увеличиваем сумму на значение цифры (s+=d)
• отсекаем последнюю цифру числа (//)
N
d
123
s
0
начальные значения
? Когда остановиться?
12
3
3
1
2
5
0
1
6
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
while N != 0:
...
http://kpolyakov.spb.ru
125. Сумма цифр числа
Программирование (Python), 8 класс125
Сумма цифр числа
начало
обнулить
сумму
ввод N
s= 0
N != 0?
да
d = N % 10
s += d
N = N // 10
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
выполнять
"пока N != 0"
нет
вывод s
конец
http://kpolyakov.spb.ru
126. Сумма цифр числа
Программирование (Python), 8 класс126
Сумма цифр числа
N = int(input("Введите целое число")); N1= N
s = 0
while N != 0:
d = N % 10
s += d
N = N // 10
print("Сумма цифр числа", N1,
N, " равна", s)
? Что плохо?
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
127. Задачи
Программирование (Python), 8 класс127
Задачи
«A»: Напишите программу, которая вводит с клавиатуры
натуральное число и выводит цифры его записи в
троичной системе счисления (начиная с последней).
Пример:
Введите число: 12
0
1
1
«B»: Напишите программу, которая получает с
клавиатуры натуральное число и определяет,
сколько раз в его двоичной записи встречается
цифра 0.
22 = 101102
Пример:
Введите число? 22
Нулей: 2
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
128. Задачи
Программирование (Python), 8 класс128
Задачи
«C»: Напишите программу, которая получает с
клавиатуры натуральное число и находит
наибольшую цифру в его десятичной записи.
Пример:
Введите число: 311
Наибольшая цифра: 3
«D»: Напишите программу, которая получает с
клавиатуры натуральное число и определяет, есть
ли в его десятичной записи одинаковые цифры,
стоящие рядом.
Пример:
Введите число: 553
Введите число: 535
Ответ: да.
Ответ: нет.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
129. Разложение числа на простые сомножители
Программирование (Python), 8 класс129
Разложение числа на простые сомножители
1260 = 2 · 2 · 3 · 3 · 5 · 7
простые числа
Основная теорема арифметики: такое
разложение единственно.
Введите число: 1260
2
2
3
3
5
7
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
130. Разложение числа на простые сомножители
Программирование (Python), 8 класс130
Разложение числа на простые сомножители
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-2026
http://kpolyakov.spb.ru
131. Разложение числа на простые сомножители
Программирование (Python), 8 класс131
Разложение числа на простые сомножители
N = int(input("Введите целое число"))
d = 2
while N > 1:
if N % d == 0:
print( d )
N //= d
else:
# делится на d
# следующий делитель d
d += 1
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
132. Задачи
Программирование (Python), 8 класс132
Задачи
«A»: Напишите программу, которая получает с
клавиатуры натуральное число и выводит все его
простые сомножители в одну строчку.
Пример:
Введите число: 1260
1*2*2*3*3*5*7
«B»: Напишите программу, которая получает с
клавиатуры натуральное число и определяет,
сколько у него простых делителей.
Пример:
Введите число? 1260
Ответ: 6
1260 = 22·32·5·7
2, 2, 3, 3, 5, 7
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
133. Задачи
Программирование (Python), 8 класс133
Задачи
«C»: Напишите программу, которая получает с
клавиатуры натуральное число и находит сумму
всех его различных простых делителей.
Пример:
1260 = 22·32·5·7
Введите число: 1260
Ответ: 17
2+3+5+7
«D»: Напишите программу, которая получает с
клавиатуры натуральное число и определяет, есть
ли в его разложении одинаковые делители.
Пример:
Введите число: 1260
Введите число: 210
Ответ: да.
Ответ: нет.
210 = 2·3·5·7
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
134. Алгоритм Евклида
Программирование (Python), 8 класс134
Алгоритм Евклида
Задача. Найти наибольший общий делитель (НОД) двух
натуральных чисел.
Заменяем большее из двух чисел разностью
большего и меньшего до тех пор, пока они не
станут равны. Это и есть НОД.
НОД(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-2026
http://kpolyakov.spb.ru
135. Алгоритм Евклида
Программирование (Python), 8 класс135
Алгоритм Евклида
начало
a = b?
да
конец
нет
нет
b=b-a
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
a > b?
да
a=a-b
http://kpolyakov.spb.ru
136. Алгоритм Евклида
Программирование (Python), 8 класс136
Алгоритм Евклида
while a != b:
if a > b:
a -=
= ab- b
else:
b -=
= ba- a
как заменить?
? Где будет НОД? Как его вывести?
? Как вывести НОД в формате НОД(14,21) = 7?
? А без дополнительных переменных?
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
137. Модифицированный алгоритм Евклида
Программирование (Python), 8 класс137
Модифицированный алгоритм Евклида
Заменяем большее из двух чисел остатком от деления
большего на меньшее до тех пор, пока меньшее не
станет равно нулю. Тогда большее — это НОД.
НОД(a,b)= НОД(a % b, b)
= НОД(a, b % a)
Пример:
НОД (14, 21) = НОД (14, 7) = НОД (0, 7) = 7
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
138. Модифицированный алгоритм
Программирование (Python), 8 класс138
Модифицированный алгоритм
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-2026
print( a+b
??? )
http://kpolyakov.spb.ru
139. В стиле Python
Программирование (Python), 8 класс139
В стиле 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-2026
http://kpolyakov.spb.ru
140. В других языках программирования
Программирование (Python), 8 класс140
В других языках программирования
Паскаль:
while (a<>0) and
(b<>0) do
if a>b then
a:= a mod b
else
b:= b mod a;
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
С++:
while (a!=0 && b!=0)
{
if (a > b)
a = a % b;
else
b = b % a;
}
http://kpolyakov.spb.ru
141. Задачи
Программирование (Python), 8 класс141
Задачи
«A»: Ввести с клавиатуры два натуральных числа и найти их
НОД с помощью алгоритма Евклида.
Пример:
Введите два числа:
21 14
НОД(21,14)=7
«B»: Ввести с клавиатуры два натуральных числа и найти их
НОД с помощью модифицированного алгоритма
Евклида. Заполните таблицу:
a
64168
358853
6365133
17905514
549868978
b
82678
691042
11494962
23108855
298294835
НОД(a,b)
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
142. Задачи
Программирование (Python), 8 класс142
Задачи
«C»: Ввести с клавиатуры два натуральных числа и сравнить
количество шагов цикла для вычисления их НОД с
помощью обычного и модифицированного алгоритмов
Евклида.
Пример:
Введите два числа:
1998 2
НОД(1998,2)=2
Обычный алгоритм: 998
Модифицированный: 1
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
143. Задачи
Программирование (Python), 8 класс143
Задачи
«A»: На вход программы поступает неизвестное
количество чисел целых, ввод заканчивается нулём.
Определить, сколько получено чисел, которые
делятся на 3.
«B»: На вход программы поступает неизвестное
количество чисел целых, ввод заканчивается нулём.
Определить, сколько получено двузначных чисел,
которые заканчиваются на 3.
«C»: На вход программы поступает неизвестное
количество чисел целых, ввод заканчивается нулём.
Найти максимальное из введённых чётных чисел.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
144. Задачи на циклы (дополнительные)
Программирование (Python), 8 класс144
Задачи на циклы (дополнительные)
«A»: Напишите программу, которая предлагает ввести
число-пароль и не переходит к выполнению
основной части, пока не введён правильный пароль.
Основная часть – вывод на экран «секретных
сведений».
«B»: Напишите программу, которая получает с
клавиатуры натуральное число, которое больше 1, и
определяет, простое оно или нет. Для этого нужно
делить число на все натуральные числа, начиная с
2, пока не получится деление без остатка.
«C»: Напишите программу, которая получает с
клавиатуры два целых числа и вычисляет их
произведение, используя только операции
сложения.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
145. Задачи
Программирование (Python), 8 класс145
Задачи
«D»: Напишите программу, которая получает с
клавиатуры натуральное число и вычисляет целый
квадратный корень из него – наибольшее число,
квадрат которого не больше данного числа.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
146. Цикл по переменной
Программирование (Python), 8 класс146
Цикл по переменной
Задача. Вывести на экран степени числа 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-2026
http://kpolyakov.spb.ru
147. Цикл по переменной
Программирование (Python), 8 класс147
Цикл по переменной
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-2026
http://kpolyakov.spb.ru
148. Цикл по переменной
Программирование (Python), 8 класс148
Цикл по переменной
Задача. Найти сумму чисел от 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-2026
http://kpolyakov.spb.ru
149. Цикл по переменной
Программирование (Python), 8 класс149
Цикл по переменной
Задача. Найти сумму чётных чисел от 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-2026
http://kpolyakov.spb.ru
150. В других языках программирования
Программирование (Python), 8 класс150
В других языках программирования
Паскаль:
С:
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-2026
S=S+i;
http://kpolyakov.spb.ru
151. Задачи
Программирование (Python), 8 класс151
Задачи
«A»: Напишите программу, которая находит количество
четырёхзначных чисел, которые делятся на 7.
«B»: Ипполит задумал трёхзначное число, которое при
делении на 15 даёт в остатке 11, а при делении на
11 даёт в остатке 9. Напишите программу, которая
находит все такие числа.
«C»: С клавиатуры вводится натуральное число N.
Программа должна найти факториал этого числа
(обозначается как N!) – произведение всех
натуральных чисел от 1 до N. Например,
5! = 1 • 2 • 3 • 4 • 5 = 120.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
152. Задачи
Программирование (Python), 8 класс152
Задачи
«D»: Натуральное число называется числом
Армстронга, если сумма цифр числа, возведенных
в N-ную степень (где N – количество цифр в числе)
равна самому числу. Например, 153 = 13 + 53 + 33.
Найдите все трёхзначные Армстронга.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
153. Проверка числа на простоту
Программирование (Python), 8 класс153
Проверка числа на простоту
Задача. Ввести натуральное число N и проверить,
является ли оно простым.
? Что такое простое число?
проверять все
? Как проверить?
от 2 до N-1
26: делится на 2? да составное
27: делится на 2? нет
делится на 3? да составное
29: делится на 2? нет
делится на 3? нет
простое
…
делится на 28? нет
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
154. Проверка числа на простоту
Программирование (Python), 8 класс154
Проверка числа на простоту
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-2026
http://kpolyakov.spb.ru
155. Проверка числа на простоту
Программирование (Python), 8 класс155
Проверка числа на простоту
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-2026
http://kpolyakov.spb.ru
156. Если искать все делители…
Программирование (Python), 8 класс156
Если искать все делители…
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-2026
http://kpolyakov.spb.ru
157. Задачи
Программирование (Python), 8 класс157
Задачи
«A»: Напишите программу, которая получает
натуральное число и определяет, простое ли это
число. Если число составное, программа должна
вывести количество его делителей.
Пример 1:
Введите число: 19
19 – простое число
Пример 2:
Введите число: 28
28 – составное число
делителей: 6
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
158. Задачи
Программирование (Python), 8 класс158
Задачи
«B»: Напишите программу, которая получает
натуральное число и определяет, простое ли это
число. Если число составное, программа должна
вывести количество его чётных делителей.
Подсказка: нужен ещё один счётчик.
Пример 1:
Введите число: 19
19 – простое число
Пример 3:
Введите число: 1260
Пример 2:
Введите число: 28
1260 – составное число
28 – составное число
четных делителей: 24
четных делителей: 4
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
159. Задачи
Программирование (Python), 8 класс159
Задачи
«С»: Напишите программу, которая получает
натуральные числа a и b и определяет, сколько
простых чисел есть на отрезке [a, b].
Пример 1:
Введите a и b: 5 23
Простых чисел: 7
Пример 2:
Введите a и b: 5 5
Простых чисел: 1
Пример 3:
Введите a и b: 1234 5678
Простых чисел: 545
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
160. Программирование (Python)
160Программирование
(Python)
Обработка потока данных
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
161. Обработка потока данных
Программирование (Python), 8 класс161
Обработка потока данных
Задача. С клавиатуры вводятся числа, ввод завершается
числом 0. Определить, сколько было введено
положительных чисел.
1) нужен счётчик
2) счётчик увеличивается еслиКогда
числоувеличивать
>0
счётчик?
3) нужен цикл
4) это цикл с условием (число шагов неизвестно)
Какой цикл?
?
?
счётчик = 0
пока не введён 0:
если введено число > 0 то
счётчик:= счётчик + 1
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
162. Обработка потока данных
Программирование (Python), 8 класс162
Обработка потока данных
count = 0
x = int(input())
while x != 0:
if x > 0:
count += 1
x = int(input())
print( count )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
откуда взять x?
? Что плохо?
http://kpolyakov.spb.ru
163. Найди ошибку!
Программирование (Python), 8 класс163
Найди ошибку!
count = 0
x = int(input())
while x != 0:
if x > 0:
count += 1
print(
count )
x = int(input())
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
164. Найди ошибку!
Программирование (Python), 8 класс164
Найди ошибку!
xcount
= int(input())
count
== 00
while x == 0:
if x >!=
0:
count += 1
x = int(input())
print( count )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
165. Проблемы с отрицательными числами
Программирование (Python), 8 класс165
Проблемы с отрицательными числами
Двузначные числа:
if 10 <= x and x <= 99: ...
? Что плохо?
abs – модуль числа
if 10 <= abs
abs(x) and abs
abs(x) <= 99: ...
Вычисление остатка:
if abs
x % 10 %
abs(x)
==10
3:==
...
3: ...
!
12 % 10 = 2
–12 % 10 = 8
–12 = (-2)*10 + 8
–12 % 10 = 8
-20
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
-12
-10
http://kpolyakov.spb.ru
166. Задачи
Программирование (Python), 8 класс166
Задачи
«A»: На вход программы поступает неизвестное
количество целых чисел, ввод заканчивается нулём.
Определить, сколько получено чисел, которые
делятся на 3.
«B»: На вход программы поступает неизвестное
количество целых чисел, ввод заканчивается нулём.
Определить, сколько получено двузначных чисел,
которые заканчиваются на 3.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
167. Задачи
Программирование (Python), 8 класс167
Задачи
«C»: На вход программы поступает неизвестное
количество целых чисел, ввод заканчивается нулём.
Найти среднее арифметическое всех двузначных
чисел, которые делятся на 7.
«D»: На вход программы поступает неизвестное
количество целых чисел, ввод заканчивается нулём.
Найти максимальное из введённых чётных чисел.
Если таких чисел нет, программа должна вывести
слово «нет».
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
168. Обработка потока данных: сумма
Программирование (Python), 8 класс168
Обработка потока данных: сумма
Задача. С клавиатуры вводятся числа, ввод завершается
числом 0. Найти сумму введённых чисел,
оканчивающихся на цифру "5".
1) нужна переменная для суммы
2) число добавляется к сумме, если оно
заканчивается на "5"
3) нужен цикл с условием
сумма = 0
? Как это записать?
пока не введён 0:
если число оканчивается на "5" то
сумма:= сумма + число
if x % 10 == 5:
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
169. Обработка потока данных: сумма
Программирование (Python), 8 класс169
Обработка потока данных: сумма
Задача. С клавиатуры вводятся числа, ввод завершается
числом 0. Найти сумму введённых чисел,
оканчивающихся на цифру "5".
summa = 0
x = int(input())
while x != 0:
if x % 10 == 5:
summa += x
x = int(input())
print( summa )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
? Чего не хватает?
http://kpolyakov.spb.ru
170. Найди ошибку!
Программирование (Python), 8 класс170
Найди ошибку!
s =0
x
= int(input())
while
x != 0:
if x % 10 == 5:
s += x
x = int(input())
print( s )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
171. "Бесконечный" цикл
Программирование (Python), 8 класс171
"Бесконечный" цикл
s=0
while True:
x = int(input())
if x == 0: break
break
if x % 10 == 5:
s += x
print( s )
выйти из
цикла
? Что плохо?
из цикла while True возможен только через
! Выход
оператор break!
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
172. Условия отбора
Программирование (Python), 8 класс172
Условия отбора
Положительные числа:
if x > 0: ...
Числа, делящиеся на 3:
if x % 3 == 0: ...
Числа, оканчивающиеся на 6:
if x % 10 == 6: ...
Числа, делящиеся на 3 и оканчивающиеся на 6:
if x % 3 == 0 and x % 10 == 6: ...
Как иначе?
?
if 10 <= x and x <= 99: ...
Двузначные числа:
if 9 < x and x < 100: ...
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
173. Если ни одного числа не нашли…
Программирование (Python), 8 класс173
Если ни одного числа не нашли…
Задача: с клавиатуры вводятся числа, ввод
завершается числом 0. Найти сумму
введённых чисел, оканчивающихся на "5".
Вывести "нет", если таких чисел нет.
? Как определить, что таких чисел нет?
сумма = 0
Как вывести результат?
?
счётчик = 0
пока не введён 0:
если x оканчивается на "5":
сумма += x
счётчик += 1
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
174. Если ни одного числа не нашли…
Программирование (Python), 8 класс174
Если ни одного числа не нашли…
сумма = 0
счётчик = 0
пока не введён 0:
если x оканчивается на "5":
сумма += x
счётчик += 1
if счётчик == 0:
print("Ответ: нет")
else:
print("Ответ:", s)
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
175. Найди ошибку!
Программирование (Python), 8 класс175
Найди ошибку!
k=0
s=0
x = int(input())
s += x
while x != 0:
if x % 10 == 5:
k += 1
x = int(input())
if k == 01:
print("Ответ: нет")
else:
print("Ответ:", sk)
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
176. Задачи
Программирование (Python), 8 класс176
Задачи
«A»: На вход программы поступает неизвестное
количество целых чисел, ввод заканчивается нулём.
Определить, сумму чисел, которые делятся на 3.
Если таких чисел нет, программа должна вывести
слово «нет».
«B»: На вход программы поступает неизвестное
количество целых чисел, ввод заканчивается нулём.
Определить, сумму двузначных чисел, которые
заканчиваются на 3. Если таких чисел нет,
программа должна вывести слово «нет».
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
177. Задачи
Программирование (Python), 8 класс177
Задачи
«C»: На вход программы поступает неизвестное
количество целых чисел, ввод заканчивается нулём.
Найти сумму цифр всех введённых чисел.
«D»: На вход программы поступает неизвестное
количество целых чисел, ввод заканчивается нулём.
Найти число, у которого максимальная сумма цифр.
Если таких чисел несколько, нужно вывести
последнее их них.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
178. Поиск максимума (минимума)
Программирование (Python), 8 класс178
Поиск максимума (минимума)
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
179. Поиск максимума (минимума)
Программирование (Python), 8 класс179
Поиск максимума (минимума)
1) нужна переменная для хранения максимума
2) как только прочитали первое число,
сохранили максимум («из одного»):
x = int(input())
M = x
3) читаем следующее значение:
x = int(input())
4) цикл: если новое число больше максимума,
заменяем M:
while x != 0:
if x > M: M = x
5) выводим результат M
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
180. Поиск максимума (минимума)
Программирование (Python), 8 класс180
Поиск максимума (минимума)
x = int(input())
M = x
while x != 0:
if x > M: M = x
print(M)
x = int(input())
print(M)
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
? Что плохо?
http://kpolyakov.spb.ru
181. Поиск максимума (минимума) – II
Программирование (Python), 8 класс181
Поиск максимума (минимума) – 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-2026
? Что плохо?
http://kpolyakov.spb.ru
182. Максимум не из всех
Программирование (Python), 8 класс182
Максимум не из всех
Задача: с клавиатуры вводятся числа в
диапазоне [-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-2026
http://kpolyakov.spb.ru
183. Максимум не из всех
Программирование (Python), 8 класс183
Максимум не из всех
По условию: 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-2026
http://kpolyakov.spb.ru
184. Если диапазон неизвестен…
Программирование (Python), 8 класс184
Если диапазон неизвестен…
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-2026
http://kpolyakov.spb.ru
185. Задачи
Программирование (Python), 8 класс185
Задачи
«A»: с клавиатуры вводятся числа, ввод завершается
числом 0. Определить минимальное и
максимальное из введённых чисел.
Пример:
5
13
34
15
0
Минимум: 5
Максимум: 34
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
186. Задачи
Программирование (Python), 8 класс186
Задачи
«B»: с клавиатуры вводятся числа из отрезка [1;1000],
ввод завершается числом 0. Определить
минимальное и максимальное из тех введённых
чисел, которые делятся на 3. Вывести "нет", если
таких чисел нет.
Пример:
5
31
18
21
15
0
Минимум: 15
Максимум: 21
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
Пример:
5
34
17
41
11
0
Ответ: нет
http://kpolyakov.spb.ru
187. Задачи
Программирование (Python), 8 класс187
Задачи
«C»: с клавиатуры вводятся натуральные числа, ввод
завершается числом 0. Определить минимальное и
максимальное из тех введённых двузначных
натуральных чисел, в записи которых есть цифра 6.
Вывести "нет", если таких чисел нет.
Пример:
Пример:
6
6
36
32
18
176
26
41
15
11
0
0
Минимум: 26
Ответ: нет
Максимум: 36
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
188. Задачи
Программирование (Python), 8 класс188
Задачи
«D»: с клавиатуры вводятся числа, ввод завершается
числом 0. Определить минимальное из введённых
чисел Фибоначчи. Вывести "нет", если чисел
Фибоначчи в последовательности нет.
Числа Фибоначчи – это последовательность чисел, которая начинается
с двух единиц и каждое следующее число равно сумме двух
предыдущих: 1, 1, 2, 3, 5, 8, 13, …
Пример:
5
36
12
26
13
0
Ответ: 5
Пример:
6
32
176
41
11
0
Ответ: нет
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
189. Обработка потока данных (N чисел)
Программирование (Python), 8 класс189
Обработка потока данных (N чисел)
Задача: с клавиатуры вводится число N, а
затем – N целых чисел. Определить, сколько
было введено положительных чисел.
? В чём отличие?
задано количество!
ввести N
в Python нет
такого!
счётчик = 0
сделай N раз:
Есть цикл for!
!
ввести число
если введено число > 0:
счётчик += 1
вывести счётчик
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
190. Обработка потока данных (N чисел)
Программирование (Python), 8 класс190
Обработка потока данных (N чисел)
сделай N раз:
...
for i in range(N):
...
! range(N) = [0, 1, 2, …, N-2, N-1 ]
N раз
for i in range(4):
print(i)
0
1
2
3
? Что выведет?
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
s = 0
for i in range(4):
s += i
print(s)
6
http://kpolyakov.spb.ru
191. Обработка потока данных (N чисел)
Программирование (Python), 8 класс191
Обработка потока данных (N чисел)
N = int(input())
k = 0
for i in range(N):
x = int(input())
if x > 0: k += 1
print(k)
сделай N
раз!
Числа, делящиеся на 3:
if x % 3 == 0: k += 1
Числа, оканчивающиеся на 6:
if x % 10 == 6: k += 1
Числа, делящиеся на 3 и оканчивающиеся на 6:
if x % 3 == 0 and x % 10 == 6: k += 1
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
192. Задачи
Программирование (Python), 8 класс192
Задачи
«A»: с клавиатуры вводится число N, а затем – N целых
чисел. Определить, сколько было введено
положительных и сколько отрицательных чисел
(нули не считать!).
Пример:
5
1
3
-34
15
0
Положительных: 3
Отрицательных: 1
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
193. Задачи
Программирование (Python), 8 класс193
Задачи
«B»: с клавиатуры вводится число N, а затем – N целых
чисел. Определить сумму двузначных чисел (как
положительных, так и отрицательных). Если
двузначных чисел не было, вывести "нет".
Пример:
5
1
13
-34
5
31
Ответ: 10
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
Пример:
5
1
213
-134
5
3
Ответ: нет
http://kpolyakov.spb.ru
194. Задачи
Программирование (Python), 8 класс194
Задачи
«C»: с клавиатуры вводится число N, а затем – N целых
чисел. Определить минимальное и максимальное
среди двузначных чисел, которые делятся на 3. Если
таких чисел не было, вывести "нет".
Пример:
Пример:
Пример:
5
5
5
18
1
1
33
-18
23
98
-6
132
513
-21
6
31
32
32
Минимум: 18
Минимум: -21
Ответ: нет
Максимум: 33
Максимум: -18
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
195. Задачи
Программирование (Python), 8 класс195
Задачи
«D»: с клавиатуры вводится число N, а затем – N
натуральных чисел. Определить минимальное и
максимальное среди простых чисел (которые
делятся на сами не себя и на 1). Если таких чисел не
было, вывести "нет".
Пример:
Пример:
5
5
41
12
15
25
11
132
163
6
39
39
Минимум: 11
Ответ: нет
Максимум: 163
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
196. Программирование (Python)
196Программирование
(Python)
§ 21. Массивы
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
197. Что такое массив?
Программирование (Python), 8 класс197
Что такое массив?
? Как ввести 10000 переменных?
Массив – это группа переменных одного типа,
расположенных в памяти рядом (в соседних ячейках) и
имеющих общее имя.
Надо:
• выделять память
• записывать данные в нужную ячейку
• читать данные из ячейки
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
198. Обращение к элементу массива
Программирование (Python), 8 класс198
Обращение к элементу массива
НОМЕР
A
элемента массива
(ИНДЕКС)
массив
0
1
5
10
A[0]
A[1]
22
15
15
3
4
20
25
ЗНАЧЕНИЕ
A[2]
A[3]
A[4]
элемента массива
Индекс элемента — это значение, которое указывает на
конкретный элемент массива.
! Нумерация с нуля!
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
199. Обращение к элементу массива
Программирование (Python), 8 класс199
Обращение к элементу массива
ИНДЕКС элемента массива: 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-2026
101
152
http://kpolyakov.spb.ru
200. Создание массива
Программирование (Python), 8 класс200
Создание массива
A = [11, 22, 35, 41, 53]
11
22
35
41
53
A = [11, 22] + [35, 41] + [53]
A = [11]*5
11
11
11
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
11
11
http://kpolyakov.spb.ru
201. Что неверно?
Программирование (Python), 8 класс201
Что неверно?
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-2026
http://kpolyakov.spb.ru
202. Перебор элементов массива
Программирование (Python), 8 класс202
Перебор элементов массива
N = 10
A = [0]*N
# память уже выделена
Перебор элементов: просматриваем все элементы
массива и, если нужно, выполняем с каждым из них
некоторую операцию.
for i in range(N):
# здесь работаем с A[i]
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
203. Заполнение массива
Программирование (Python), 8 класс203
Заполнение массива
[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-2026
http://kpolyakov.spb.ru
204. Заполнение массива в обратном порядке
Программирование (Python), 8 класс204
Заполнение массива в обратном порядке
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-2026
уменьшение
на 1
http://kpolyakov.spb.ru
205. Заполнение массива в обратном порядке
Программирование (Python), 8 класс205
Заполнение массива в обратном порядке
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-2026
i + X = N
X = N - i
http://kpolyakov.spb.ru
206. Вывод массива на экран
Программирование (Python), 8 класс206
Вывод массива на экран
Весь массив сразу:
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-2026
http://kpolyakov.spb.ru
207. Вывод массива на экран (Python)
Программирование (Python), 8 класс207
Вывод массива на экран (Python)
[1,2,3,4,5]
print ( *A )
print (1, 2, 3, 4, 5)
разбить список
на элементы
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
1 2 3 4 5
http://kpolyakov.spb.ru
208. Ввод с клавиатуры
Программирование (Python), 8 класс208
Ввод с клавиатуры
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-2026
A[0] = 5
A[1] = 12
A[2] = 34
A[3] = 56
A[4] = 13
http://kpolyakov.spb.ru
209. Ввод с клавиатуры (Python)
Программирование (Python), 8 класс210
В других языках программирования
Паскаль:
объявление массива
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-2026
http://kpolyakov.spb.ru
210. В других языках программирования
Программирование (Python), 8 класс211
В других языках программирования
С++:
int A[N], i;
for (i = 0; i < N; i++)
A[i] = i;
for (i = 0; i < N; i++)
cout << A[i] << " ";
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
! Нумерация элементов
всегда с нуля!
http://kpolyakov.spb.ru
211. В других языках программирования
Программирование (Python), 8 класс212
Задачи
«A»: 1) Заполните все элементы массива из 10
элементов значением X , введённым с клавиатуры.
2) Заполните массив из 10 элементов
последовательными натуральными числами,
начиная с X (значение X введите с клавиатуры).
«B»: 1) Заполните массив из 10 элементов
натуральными числами в порядке убывания. С
клавиатуры вводится значение X. Последний
элемент должен быть равен X, предпоследний равен
X+1 и т.д.
2) Заполните массив из 10 элементов степенями
числа 2 (от 21 до 2N), так чтобы первый элемент был
равен 2, следующий – 4, следующий – 8 и т.д. Не
используйте операцию возведения в степень!
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
212. Задачи
Программирование (Python), 8 класс213
Задачи
«C»: 1) Заполните массив из 10 элементов степенями
числа 2, начиная с конца, так чтобы последний
элемент массива был равен 1, а каждый
предыдущий был в 2 раза больше следующего. Не
используйте операцию возведения в степень!
2) С клавиатуры вводится целое число X. Заполните
массив из 11 элементов целыми числами, так чтобы
средний элемент массива был равен X, слева от
него элементы стояли по возрастанию, а справа – по
убыванию. Соседние элементы отличаются на
единицу. Например, при X = 3 массив из 5 элементов
заполняется так: 1 2 3 2 1.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
213. Задачи
Программирование (Python), 8 класс214
Заполнение случайными числами
из библиотеки
(модуля) 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-2026
http://kpolyakov.spb.ru
214. Заполнение случайными числами
Программирование (Python), 8 класс215
Обработка элементов массива
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-2026
http://kpolyakov.spb.ru
215. Обработка элементов массива
Программирование (Python), 8 класс216
Обработка элементов массива
Вывести числа, на 1 большие, чем A[i]:
for i in range(N):
print( A[i]+1 )
???
! Что вместо «???»?
Вывести последние цифры:
for i in range(N):
print( A[i]%10 )
???
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
216. Обработка элементов массива
Программирование (Python), 8 класс217
Обработка элементов массива
Заполнить нулями:
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-2026
http://kpolyakov.spb.ru
217. Обработка элементов массива
Программирование (Python), 8 класс218
Задачи-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-2026
http://kpolyakov.spb.ru
218. Задачи-2
Программирование (Python), 8 класс219
Задачи-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-2026
http://kpolyakov.spb.ru
219. Задачи-2
220Программирование
(Python)
§ 22. Алгоритмы обработки
массивов
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
220. Программирование (Python)
Программирование (Python), 8 класс221
Сумма элементов массива
Задача. Найти сумму элементов массива из 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-2026
http://kpolyakov.spb.ru
221. Сумма элементов массива
Программирование (Python), 8 класс222
Сумма элементов массива (Python)
Задача. Найти сумму элементов массива A.
s = 0
for x in A:
s += x
print( s )
для всех
элементов из A
! Не нужно знать размер!
или так:
print( sum(A) )
встроенная
функция
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
222. Сумма элементов массива (Python)
Программирование (Python), 8 класс223
Сумма не всех элементов массива
Задача. Найти сумму чётных элементов массива.
? Что делаем с нечётными?
s = 0
for i in range(N):
s
A[i]
if+=
A[i]
% 2 == 0:
print(
s A[i]
)
s +=
print( s )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
223. Сумма не всех элементов массива
Программирование (Python), 8 класс224
Сумма не всех элементов массива
Задача. Найти сумму чётных элементов массива.
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-2026
http://kpolyakov.spb.ru
224. Сумма не всех элементов массива
Программирование (Python), 8 класс225
Задачи
«A»: Напишите программу, которая заполняет массив из
10 элементов случайными числами на отрезке [–5; 5]
и находит сумму положительных элементов.
«B»: Напишите программу, которая заполняет массив из
10 элементов случайными числами на отрезке [–2; 2]
и находит произведение ненулевых элементов.
«C»: Напишите программу, которая заполняет массив из
20 элементов случайными числами на отрезке
[100; 1000] и находит отдельно сумму элементов в
первой и во второй половинах массива.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
225. Задачи
Программирование (Python), 8 класс226
Подсчёт элементов по условию
Задача. Найти количество чётных элементов массива.
? Какие переменные нужны?
count = 0
for i in range(N):
if A[i] % 2 == 0:
count += 1
print( count )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
переменнаясчётчик
? Что тут делаем?
http://kpolyakov.spb.ru
226. Подсчёт элементов по условию
Программирование (Python), 8 класс227
Подсчёт элементов по условию (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-2026
http://kpolyakov.spb.ru
227. Подсчёт элементов по условию (Python)
Программирование (Python), 8 класс228
Среднее арифметическое
Задача. Найти среднее арифметическое элементов
массива, которые больше 180 (рост в см).
s = 0
for x in A:
if x > 180:
s += x
print( s/N )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
? Что плохо?
http://kpolyakov.spb.ru
228. Среднее арифметическое
Программирование (Python), 8 класс229
Среднее арифметическое
Задача. Найти среднее арифметическое элементов
массива, которые больше 180 (рост в см).
? Какие переменные нужны?
s = 0
count = 0
for x in A:
if x > 180:
count += 1
s += x
print( s/count )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
? Что тут делаем?
http://kpolyakov.spb.ru
229. Среднее арифметическое
Программирование (Python), 8 класс230
Среднее арифметическое (Python)
Задача. Найти среднее арифметическое элементов
массива, которые больше 180 (рост в см).
B = [ x for x in A
if x > 180]
print ( sum(B)/len(B) )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
отбираем нужные
http://kpolyakov.spb.ru
230. Среднее арифметическое (Python)
Программирование (Python), 8 класс231
Задачи
«A»: Напишите программу, которая заполняет массив из
20 элементов случайными числами на отрезке [0;
200] и считает количество элементов, которые
делятся на 10.
«B»: Напишите программу, которая заполняет массив из
20 элементов случайными числами на отрезке [0; 200]
и считает среднее арифметическое двузначных чисел
в массиве.
«C»: Напишите программу, которая заполняет массив из
20 элементов случайными числами на отрезке [10;
100] и считает число пар соседних элементов, сумма
которых делится на 3.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
231. Задачи
Программирование (Python), 8 класс232
Перестановка элементов массива
? Как поменять местами значения двух
переменных a и b?
вспомогательная
переменная
элементы массива:
с = a
a = b
b = c
с = A[i]
A[i] = A[k]
A[k] = c
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
232. Перестановка элементов массива
Программирование (Python), 8 класс233
Перестановка пар соседних элементов
Задача. Массив A содержит чётное количество
элементов N. Нужно поменять местами пары соседних
элементов: 0-й с 1-м, 2-й — с 3-м и т. д.
0
1
2
3
7
12
38
5
0
1
2
3
12
7
5
38
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
…
…
N-2
N-1
40
23
N-2
N-1
23
40
http://kpolyakov.spb.ru
233. Перестановка пар соседних элементов
Программирование (Python), 8 класс234
Перестановка пар соседних элементов
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-2026
?
http://kpolyakov.spb.ru
234. Перестановка пар соседних элементов
Программирование (Python), 8 класс235
Перестановка пар соседних элементов
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-2026
http://kpolyakov.spb.ru
235. Перестановка пар соседних элементов
Программирование (Python), 8 класс236
Реверс массива
Задача. Переставить элементы массива в обратном
порядке (выполнить реверс).
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-2026
…
…
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
236. Реверс массива
Программирование (Python), 8 класс237
Реверс массива
(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-2026
? Как исправить?
http://kpolyakov.spb.ru
237. Реверс массива
Программирование (Python), 8 класс238
Задачи
«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-2026
http://kpolyakov.spb.ru
238. Задачи
Программирование (Python), 8 класс239
Задачи
«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-2026
http://kpolyakov.spb.ru
239. Задачи
Программирование (Python), 8 класс240
Поиск максимального элемента
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
240. Поиск максимального элемента
Программирование (Python), 8 класс241
Поиск максимального элемента
? Какие переменные нужны?
for i in range(N):
if A[i] > M:
M = A[i]
print( M )
? Чего не хватает?
начальное
? Какое
значение взять для M?
1) M – значение, которое заведомо меньше всех
элементов массива
или
2) M = A[0] (или любой другой элемент)
максимальный не меньше, чем A[0]
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
241. Поиск максимального элемента
Программирование (Python), 8 класс242
Поиск максимального элемента
начинаем с A[1], так как
A[0] мы уже посмотрели
M = A[0]
for i in range(1,N):
if A[i] > M:
M = A[i]
print( M )
? Как найти минимальный?
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
242. Поиск максимального элемента
Программирование (Python), 8 класс243
Поиск максимального элемента (Python)
M = A[0]
for x in A:
if x > M:
M = x
print( M )
перебрать все элементы
в массиве A
! Не нужно знать размер!
print( max(A) )
print( min(A) )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
243. Поиск максимального элемента (Python)
Программирование (Python), 8 класс244
Номер максимального элемента
Задача. Найти в массиве максимальный элемент и его
номер.
? Какие переменные нужны?
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-2026
http://kpolyakov.spb.ru
244. Номер максимального элемента
Программирование (Python), 8 класс245
Номер максимального элемента
! Если знаем 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-2026
http://kpolyakov.spb.ru
245. Номер максимального элемента
Программирование (Python), 8 класс246
Задачи (без min и max)
«A»: Напишите программу, которая заполняет массив из
20 элементов случайными числами на отрезке [50;
150] и находит в нём минимальный и максимальный
элементы и их номера.
«B»: Напишите программу, которая заполняет массив из
10 элементов в виде
A = [ 10, 2, 3, 4, 10, 6, 7, 8, 9, 10]
и выводит количество элементов, имеющих
максимальное значение.
«C»: Напишите программу, которая заполняет массив из
20 элементов случайными числами на отрезке [100;
200] и находит в нём пару соседних элементов,
сумма которых минимальна.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
246. Задачи (без min и max)
Программирование (Python), 8 класс247
Задачи
«D»: Напишите программу, которая заполняет массив из
20 элементов случайными числами на отрезке [–100;
100] и находит в каждой половине массива пару
соседних элементов, сумма которых максимальна.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
247. Задачи
Программирование (Python), 8 класс248
Обработка потока данных: максимум
Задача. С клавиатуры вводятся числа, ввод
завершается числом 0. Найти максимальное
из введённых чисел.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
248. Обработка потока данных: максимум
Программирование (Python), 8 класс249
Поиск максимума (минимума) в потоке
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
249. Поиск максимума (минимума) в потоке
Программирование (Python), 8 класс250
Поиск максимума (минимума)
1) нужна переменная для хранения максимума
2) как только прочитали первое число,
сохранили максимум («из одного»):
x = int(input())
M = x
3) читаем следующее значение:
x = int(input())
4) цикл: если новое число больше максимума,
заменяем M:
while x != 0:
if x > M: M = x
5) выводим результат M
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
250. Поиск максимума (минимума)
Программирование (Python), 8 класс251
Поиск максимума (минимума)
x = int(input())
M = x
while x != 0:
if x > M: M = x
print(M)
x = int(input())
print(M)
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
? Что плохо?
http://kpolyakov.spb.ru
251. Поиск максимума (минимума)
Программирование (Python), 8 класс252
Поиск максимума (минимума) – 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-2026
? Что плохо?
http://kpolyakov.spb.ru
252. Поиск максимума (минимума) – II
Программирование (Python), 8 класс253
Максимум не из всех
Задача: с клавиатуры вводятся числа в
диапазоне [-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-2026
http://kpolyakov.spb.ru
253. Максимум не из всех
Программирование (Python), 8 класс254
Минимум не из всех
По условию: 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-2026
http://kpolyakov.spb.ru
254. Минимум не из всех
Программирование (Python), 8 класс255
Если диапазон неизвестен…
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-2026
http://kpolyakov.spb.ru
255. Если диапазон неизвестен…
Программирование (Python), 8 класс256
Задачи
«A»: с клавиатуры вводятся числа, ввод завершается
числом 0. Определить минимальное и
максимальное из введённых чисел.
Пример:
5
13
34
15
0
Минимум: 5
Максимум: 34
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
256. Задачи
Программирование (Python), 8 класс257
Задачи
«B»: с клавиатуры вводятся числа из отрезка [1;1000],
ввод завершается числом 0. Определить
минимальное и максимальное из тех введённых
чисел, которые делятся на 3. Вывести "нет", если
таких чисел нет.
Пример:
Пример:
5
5
31
34
18
17
21
41
15
11
0
0
Минимум: 15
Ответ: нет
Максимум: 21
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
257. Задачи
Программирование (Python), 8 класс258
Задачи
«C»: с клавиатуры вводятся числа, ввод завершается
числом 0. Определить минимальное и
максимальное из тех введённых двузначных
натуральных чисел, в записи которых есть цифра 6.
Вывести "нет", если таких чисел нет.
Пример:
6
36
18
26
15
0
Минимум: 26
Максимум: 36
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
Пример:
6
32
176
41
11
0
Ответ: нет
http://kpolyakov.spb.ru
258. Задачи
259Программирование
(Python)
§ 23. Символьные строки
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
259. Программирование (Python)
Программирование (Python), 8 класс260
Что такое символьная строка?
Символьная строка – это последовательность
символов.
• строка – единый объект
• длина строки может меняться во время работы
программы
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
260. Что такое символьная строка?
Программирование (Python), 8 класс261
Символьные строки
Присваивание:
s = "Вася пошёл гулять"
Ввод с клавиатуры:
s = input()
Вывод на экран:
print(s)
Длина строки:
n = len(s)
length – длина
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
261. Символьные строки
Программирование (Python), 8 класс262
Сравнение строк
?
print("Введите пароль: ")
Какой правильный
s = input()
пароль?
if s == "sEzAm":
print("Слушаюсь и повинуюсь!")
else:
print("Пароль неправильный")
? Как одна строка может быть меньше другой?
стоит раньше в отсортированном списке
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
262. Сравнение строк
Программирование (Python), 8 класс263
Сравнение строк
s1 = "паровоз"
s2 = "пароход"
if s1 < s2:
print(s1, "<", s2)
elif s1 == s2:
print(s1, "=", s2)
else:
print(s1, ">", s2)
? Что выведет?
паровоз < пароход
первые отличающиеся
буквы
Сравниваем с начала: паровоз
пароход
! в < х!
«в»: код 1074
«х»: код 1093
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
263. Сравнение строк
Программирование (Python), 8 класс264
Обращение к символу по номеру
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-2026
http://kpolyakov.spb.ru
264. Обращение к символу по номеру
Программирование (Python), 8 класс265
Посимвольная обработка строк
! Строка неизменна!
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-2026
len(s)-1
http://kpolyakov.spb.ru
265. Посимвольная обработка строк
Программирование (Python), 8 класс266
Цикл перебора символов
sNew = ""
for c in s:
if c == "э":
sNew += "е"
else:
sNew += c
перебрать
все символы
строки
c
П
р
и
в
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
э
т
!
http://kpolyakov.spb.ru
266. Цикл перебора символов
Программирование (Python), 8 класс267
Задачи
«A»: Напишите программу, которая вводит строку,
состоящую только из точек и букв Х, и заменяет в
ней все точки на нули и все буквы X на единицы.
Пример:
Введите строку: ..X.XX.
Двоичный код: 0010110
«B»: Напишите программу, которая в символьной строке
заменяет все нули на единицы и наоборот.
Остальные символы не должны измениться.
Пример:
Введите строку: 10а01Bx1010c
Инверсия: 01a10Bx0101c
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
267. Задачи
Программирование (Python), 8 класс268
Задачи
«С»: Введите битовую строку и дополните её последним
битом, который должен быть равен 0, если в
исходной строке чётное число единиц, и равен 1,
если нечётное (в получившейся строке должно
всегда быть чётное число единиц).
Пример:
Введите битовую строку: 01101010110
Результат: 011010101100
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
268. Задачи
Программирование (Python), 8 класс269
Операции со строками
Объединение (конкатенация) :
s1 = "Привет"
"Привет, Вася!"
s2 = "Вася"
s = s1 + ", " + s2 + "!"
Умножение:
s = "АУ"
s5 = s*5
s5 = s + s + s + s + s
АУАУАУАУАУ
? Что получим?
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
269. Операции со строками
Программирование (Python), 8 класс270
Срезы строк (выделение части строки)
s = "0123456789"
s1 = s[3:8]
# "34567"
с какого
символа
до какого
(не включая 8)
s = "0123456789"
s1 = s[:8]
# "01234567"
от начала строки
s = "0123456789"
s1 = s[3:]
# "3456789"
до конца строки
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
270. Срезы строк (выделение части строки)
Программирование (Python), 8 класс271
Срезы строк
Срезы с отрицательными индексами:
s = "0123456789"
s1 = s[:-2]
# "01234567"
len(s)-2
s = "0123456789"
s1 = s[-6:-2]
len(s)-6
# "4567"
len(s)-2
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
271. Срезы строк
Программирование (Python), 8 класс272
Операции со строками
Удаление:
s = "0123456789"
s1 = s[:3] + s[9:]
"012"
"9"
"0129"
Вставка:
s = "0123456789"
s1 = s[:3] + "ABC" + s[3:]
"012"
"3456789"
"012ABC3456789"
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
272. Операции со строками
Программирование (Python), 8 класс273
Поиск в строках
s = "Здесь был Вася."
n = s.find ( "с" )
# n = 3
if n >= 0:
print ( "Номер символа", n )
else:
print ( "Символ не найден." )
! Находит первое слева вхождение
подстроки!
Поиск с конца строки:
s = "Здесь был Вася."
n = s.rfind ( "с" )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
# n = 12
http://kpolyakov.spb.ru
273. Поиск в строках
Программирование (Python), 8 класс274
Задачи
«A»: Ввести с клавиатуры в одну строку фамилию и имя,
разделив их пробелом. Вывести первую букву имени с
точкой и потом фамилию.
Пример:
Введите фамилию и имя:
Иванов Петр
П. Иванов
«B»: Ввести с клавиатуры в одну строку фамилию, имя и
отчество, разделив их пробелом. Вывести фамилию и
инициалы.
Пример:
Введите фамилию, имя и отчество:
Иванов Петр Семёнович
П.С. Иванов
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
274. Задачи
Программирование (Python), 8 класс275
Задачи
«C»: Ввести адрес файла и «разобрать» его на части,
разделенные знаком "/". Каждую часть вывести в
отдельной строке.
Пример:
Введите адрес файла:
C:/Фото/2015/Байкал/shaman.jpg
C:
Фото
2015
Байкал
shaman.jpg
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
275. Задачи
Программирование (Python), 8 класс276
Преобразования «строка» «число»
Из строки в число:
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-2026
http://kpolyakov.spb.ru
276. Преобразования «строка» «число»
Программирование (Python), 8 класс277
Задачи
«A»: Напишите программу, которая вычисляет сумму двух
чисел, введенную в форме символьной строки. Все числа
целые.
Пример:
Введите выражение:
12+3
Ответ: 15
«B»: Напишите программу, которая вычисляет сумму трёх
чисел, введенную в форме символьной строки. Все числа
целые.
Пример:
Введите выражение:
12+3+45
Ответ: 60
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
277. Задачи
Программирование (Python), 8 класс278
Задачи
«C»: Напишите программу, которая вычисляет сумму
произвольного количества чисел, введенную в форме
символьной строки. Все числа целые.
Пример:
Введите выражение:
12+3+45+10
Ответ: 70
«D»: Напишите программу, которая вычисляет выражение,
содержащее целые числа и знаки сложения и вычитания.
Пример:
Введите выражение:
12+134–45–17
Ответ: 84
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
278. Задачи
Программирование (Python), 8 класс279
Подсчёт количества символов
Задача. Определить, сколько букв 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-2026
http://kpolyakov.spb.ru
279. Подсчёт количества символов
Программирование (Python), 8 класс280
Другое решение
Задача. Определить, сколько букв 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-2026
? Как обратиться
к следующему
символу?
s[i+1]
http://kpolyakov.spb.ru
280. Другое решение
Программирование (Python), 8 класс281
Задачи
«A»: Напишите программу, которая вводит символьную строку
и выводит 0, если в этой строке буква A встречается
чаще чем буква B, а в противном случае выводит 1.
Пример 1:
Введите строку: ABCABCA
Ответ: 0
Пример 2:
Введите строку: ABCABC
Ответ: 1
Пример 3:
Введите строку: ABCABCB
Ответ: 1
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
281. Задачи
Программирование (Python), 8 класс282
Задачи
«B»: Напишите программу, которая вводит символьную строку
и определяет количество пар одинаковых символов,
стоящих рядом.
Пример 1:
Введите строку: ABCABCA
Ответ: 0
Пример 2:
Введите строку: ABBCAABCC
Ответ: 3
Пример 3:
Введите строку: AAAAAA
Ответ: 5
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
282. Задачи
Программирование (Python), 8 класс283
Задачи
«C»: Напишите программу, которая вводит символьную строку
и определяет, какая буква встречается в ней чаще всего.
Если таких букв несколько, можно вывести любую из них.
Пример 1:
Введите строку: ABCABC
Ответ: A
Пример 2:
Введите строку: CBBACAABC
Ответ: C
Пример 3:
Введите строку: BBBBBB
Ответ: B
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
283. Задачи
Программирование (Python), 8 класс284
Самая длинная цепочка
Задача. Определить наибольшую длину цепочки из
букв 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-2026
http://kpolyakov.spb.ru
284. Самая длинная цепочка
Программирование (Python), 8 класс285
Самая длинная цепочка
Задача. Определить наибольшую длину цепочки из
букв A в строке s.
0
1
2
s
цепочка
A продолжается
L += 1
if L > maxL:
maxL = L
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
3
4
5
6
?
цепочка
прервалась
не A
L = 0
новая не
началась!
http://kpolyakov.spb.ru
285. Самая длинная цепочка
Программирование (Python), 8 класс286
Самая длинная цепочка
Задача. Определить наибольшую длину цепочки из
букв 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-2026
http://kpolyakov.spb.ru
286. Самая длинная цепочка
Программирование (Python), 8 класс287
Задачи
«A»: Напишите программу, которая вводит символьную строку
и определяет наибольшую длину цепочки, которая
состоит только из букв X и Y.
Пример 1:
Введите строку: YXXYBCXYY
Ответ: 4
Пример 2:
Введите строку: ABCABC
Ответ: 0
Пример 3:
Введите строку: XXXXXX
Ответ: 6
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
287. Задачи
Программирование (Python), 8 класс288
Задачи
«B»: Напишите программу, которая вводит символьную строку
и определяет наибольшую длину цепочки, которая
состоит только из цифр (от 0 до 9).
Пример 1:
Введите строку: A01B1234C5
Ответ: 4
Пример 2:
Введите строку: ABCABC
Ответ: 0
Пример 3:
Введите строку: 980123
Ответ: 6
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
288. Задачи
Программирование (Python), 8 класс289
Задачи
«C»: Напишите программу, которая вводит символьную строку
и определяет наибольшую длину цепочки, которая
состоит только из цифр (от 0 до 9), которые стоят в
порядке возрастания.
Пример 1:
Введите строку: A7654321B4230C5
Ответ: 2
Пример 2:
Введите строку: ABCABC
Ответ: 0
Пример 3:
Введите строку: A12389B
Ответ: 5
Пример 4:
Введите строку: 123489
Ответ: 6
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
289. Задачи
Программирование (Python), 8 класс290
Метод замены символов
Задача. Определить наибольшую длину цепочки из
букв 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-2026
http://kpolyakov.spb.ru
290. Метод замены символов
Программирование (Python), 8 класс291
Метод замены символов
Задача. Определить наибольшую длину цепочки из
букв 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-2026
http://kpolyakov.spb.ru
291. Метод замены символов
Программирование (Python), 8 класс292
Метод замены символов
Задача. Определить наибольшую длину цепочки из
букв 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-2026
http://kpolyakov.spb.ru
292. Метод замены символов
Программирование (Python), 8 класс293
Метод замены символов
Задача. Определить наибольшую длину цепочки из
букв A в строке s.
s
A
A
A
A
['A', 'AA', 'A']
parts = s.split()
print( max( len(p)
for p in parts ) )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
293. Метод замены символов
Программирование (Python), 8 класс294
Задачи
«A»: Напишите программу, которая вводит символьную
строку, состоящую только из букв P, Q и R, и определяет
наибольшую длину цепочки, которая состоит только из
букв Q.
Пример 1:
Введите строку: PQRPQQR
Ответ: 2
Пример 2:
Введите строку: QRQPQRQP
Ответ: 1
Пример 3:
Введите строку: RRPRPRP
Ответ: 0
Пример 4:
Введите строку: QQQQQQ
Ответ: 6
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
294. Задачи
Программирование (Python), 8 класс295
Задачи
«B»: Напишите программу, которая вводит символьную
строку, состоящую только из цифр и букв A, B, C.
Программа должна определить количество цепочек
длиной больше 2, состоящих только из цифр (от 0 до 9).
Пример 1:
Введите строку: A01B1234C5
Ответ: 1
Пример 2:
Введите строку: 315C789A71829
Ответ: 3
Пример 3:
Введите строку: A1B21C32C43A54B61C
Ответ: 0
Пример 4:
Введите строку: 12345678
Ответ: 1
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
295. Задачи
Программирование (Python), 8 класс296
Задачи
«С»: Напишите программу, которая вводит символьную
строку, состоящую только из цифр и заглавных латинских
букв (от A до Z). Программа должна определить
количество цепочек длиной больше 2, состоящих только
из цифр (от 0 до 9).
Пример 1:
Введите строку: E01W1234X5
Ответ: 1
Пример 2:
Введите строку: 315C789R71829
Ответ: 3
Пример 3:
Введите строку: A1R21T32N43Y54O61L
Ответ: 0
Пример 4:
Введите строку: 12345678
Ответ: 1
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
296. Задачи
Программирование (Python), 8 класс297
Конец фильма
ПОЛЯКОВ Константин Юрьевич
д.т.н., учитель информатики
ГБОУ СОШ № 163, г. Санкт-Петербург
kpolyakov@mail.ru
ЕРЕМИН Евгений Александрович
к.ф.-м.н., доцент кафедры мультимедийной
дидактики и ИТО ПГГПУ, г. Пермь
eremin@pspu.ac.ru
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
297. Конец фильма
Программирование (Python), 8 класс298
Источники иллюстраций
1.
2.
иллюстрации художников издательства «Бином»
авторские материалы
К.Ю. Поляков, Е.А. Ерёмин, 2018-2026
http://kpolyakov.spb.ru
programming