Похожие презентации:
8-3py_Основы программирования (Python)
1. Простейшая программа
Программирование (Python), 8 класс1
Простейшая программа
# Это пустая программа
? Что делает эта программа?
комментарии после #
не обрабатываются
кодировка utf-8
по умолчанию)
# coding: utf-8
# Это пустая программа
"""
Это тоже комментарий
"""
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
2. Вывод на экран
Программирование (Python), 8 класс2
Вывод на экран
оператор
вывода
Оператор — это команда
языка программирования.
print( "Привет!" )
print( "Привет", Вася! )
? Что плохо?
print( "Привет, Вася!" )
вся строка в
кавычках
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
3. Зачем нужны переменные?
Программирование (Python), 8 класс3
Зачем нужны переменные?
# ввести два числа
Где запомнить?
# вычислить их сумму
# вывести сумму на экран
Переменная — это величина, которая имеет имя, тип и
значение. Значение переменной может изменяться во
время выполнения программы.
a
b
c
ячейки памяти
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
4. Имена переменных
Программирование (Python), 8 класс4
Имена переменных
Идентификатор — это имя программы или переменной.
a
b
заглавные и строчные
буквы различаются
c
МОЖНО использовать
• латинские буквы (A-Z, a-z)
• цифры
!
Имя не может начинаться с цифры!
• знак подчеркивания _
НЕЛЬЗЯ использовать скобки, знаки ", &, |, *, +, =, !, ? и др.
Какие имена правильные?
AXby
A+B
R&B
Вася
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
“PesBarbos” [QuQu]
http://kpolyakov.spb.ru
5. Работа с переменными
Программирование (Python), 8 класс5
Работа с переменными
Присваивание (запись значения)
a = 5
a = 5
a = 18
оператор
присваивания
a ←5
? Что будет храниться в a?
Вывод на экран
print(a) ? В чём разница?
с = 14
print(c)
с = 14
print("с")
14
c
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
6. Работа с переменными
Программирование (Python), 8 класс6
Работа с переменными
Изменение значения
i = i + 1
a = 4
b = 7
a = a + 1
b = b + 1
a = a + b
b = b + a
a = a + 2
b = b + a
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
увеличить на 1
a
4
b
i ← i + 1
Python:
a, b = 4, 7
7
5
8
13
21
15
36
a += 1
b += 1
a += b
b += a
a += 2
b += a
http://kpolyakov.spb.ru
7. Ввод с клавиатуры
Программирование (Python), 8 класс7
Ввод с клавиатуры
Цель – изменить исходные данные, не меняя программу.
5
a = input()
! 1. Программа ждет, пока пользователь введет
значение и нажмет Enter.
2. Введенное значение записывается в
переменную a.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
8. Ввод с клавиатуры
Программирование (Python), 8 класс8
Ввод с клавиатуры
ввести строку с клавиатуры
и связать с переменной a
a = input()
b = input()
Протокол:
21
33
2133
с = a + b
print ( c )
? Почему?
! Результат функции input – строка символов!
преобразовать в
целое число
a = int( input() )
b = int( input() )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
9. Ввод вещественных чисел
Программирование (Python), 8 класс9
Ввод вещественных чисел
print( "Введите число:" )
x = float (input())
или так:
x = float (input("Введите число:"))
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
10. Задачи
Программирование (Python), 8 класс10
Задачи
«A»: Ввести три числа, найти их сумму.
Пример:
Введите три числа:
4
5
7
4+5+7=16
«B»: Ввести три числа, найти их сумму и
произведение.
Пример:
Введите три числа:
4
5
7
4+5+7=16
4*5*7=140
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
11. Арифметические выражения
Программирование (Python), 8 класс11
Арифметические выражения
c b 1
a
d
2
Линейная запись (в одну строку):
a = (c + b - 1) / 2 * d
Операции: + –
* – умножение
/ – деление
** – возведение в степень (x2 x**2)
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
12. Порядок выполнения операций
Программирование (Python), 8 класс12
Порядок выполнения операций
3
1
2
4
5
6
a = (c + b**5*3 - 1) / 2 * d
Приоритет (старшинство):
1) скобки
2) возведение в степень **
3) умножение и деление
4) сложение и вычитание
a = (c + b**5*3 - 1) \
/2*d
a = (c + b**5*3
- 1) / 2 * d
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
c b5 3 1
a
d
2
перенос на
следующую строку
перенос внутри
скобок разрешён
http://kpolyakov.spb.ru
13. Деление
Программирование (Python), 8 класс13
Деление
Классическое деление:
a = 9; b = 6
x = 3 / 4
# = 0.75
x = a / b
# = 1.5
x = -3 / 4 # = -0.75
x = -a / b # = -1.5
Целочисленное деление (округление «вниз»!):
a = 9; b = 6
x = 3 // 4
# = 0
x = a // b
# = 1
x = -3 // 4 # = -1
x = -a // b # = -2
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
14. Частное и остаток
Программирование (Python), 8 класс14
Частное и остаток
// – деление нацело (остаток отбрасывается)
% – остаток от деления
175 сек = 2 мин 55 сек ? Как получить 2 и 55?
t = 175
m = t // 60 # 2
s = t % 60 # 55
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
15. Частное и остаток
Программирование (Python), 8 класс15
Частное и остаток
? Что получится?
n = 123
d = n // 10 # 12
k = n % 10 # 3
При делении на 10 нацело отбрасывается последняя
цифра числа.
Остаток от деления на 10 – это последняя цифра числа.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
16. Сокращенная запись операций
Программирование (Python), 8 класс16
Сокращенная запись операций
a += b # a = a + b
a -= b # a = a - b
a *= b # a = a * b
a /= b # a = a / b
a //= b # a = a // b
a %= b # a = a % b
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
a += 1
увеличение на 1
http://kpolyakov.spb.ru
17. Форматный вывод
Программирование (Python), 8 класс17
Форматный вывод
a, b = 1, 2
print( f"{a}+{b}={a+b}" )
1+2=3
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
18. Вещественные числа (сложение)
Программирование (Python), 8 класс18
Вещественные числа (сложение)
print ( "Введите два числа: " )
a = float ( input() )
b = float ( input() )
c=a+b
print ( f"{a}+{b}={c}" )
Введите два числа:
1.25
2.3
1.25+2.3=3.55
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
19. Операции с вещественными числами
Программирование (Python), 8 класс19
Операции с вещественными числами
int – целая часть числа
x=1.6
print( int(x) )
1
round – ближайшее целое число
x=-1.2
-1
print( round(x) )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
20. Математические функции
Программирование (Python), 8 класс20
Математические функции
загрузить
модуль math
= подключить математические
функции
import math
# квадратный корень
print( math.sqrt(25) )
r = 50 # радиус окружности
print( 2*math.pi*r )
Что считаем?
?
print( math.pi*r**2 )
число
округление
вверх
print( math.ceil(2.123) ) # 3
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
21. Случайные и псевдослучайные числа
Программирование (Python), 8 класс21
Случайные и псевдослучайные числа
Случайные явления
• встретил слона – не встретил слона
• жеребьёвка на соревнованиях
• лотерея
• случайная скорость (направление выстрела ) в игре
• …
Случайные числа — это последовательность чисел, в
которой невозможно предсказать следующее число,
даже зная все предыдущие.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
22. Случайные и псевдослучайные числа
Программирование (Python), 8 класс22
Случайные и псевдослучайные числа
! Компьютер неслучаен!
Псевдослучайные числа — похожи на случайные, но
строятся по формуле.
следующее
предыдущее
Xn+1= (a*Xn+b) % c # от 0 до c-1
Xn+1= (Xn+3) % 10
#
от 0 до 9
X = 0 3 6 9 2 5 8
зерно
8 1 4 7 0
зацикливание
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
23. Датчик случайных чисел
Программирование (Python), 8 класс23
Датчик случайных чисел
Целые числа на отрезке:
подключить функцию randint
из модуля random
from random import randint
K = randint(1, 6) # отрезок [1,6]
L = randint(1, 6) # это уже другое число!
англ. integer – целый
random – случайный
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
24. Датчик случайных чисел
Программирование (Python), 8 класс24
Датчик случайных чисел
Вещественные числа:
from random import random, uniform
x = random()
# полуинтервал [0,1)
y = 7*random()
# полуинтервал [0,7)
z = 7*random()+5 # полуинтервал [5,12)
Вещественные числа на отрезке [a, b]:
from random import uniform
x = uniform(1.5, 2.8)
# [1,5; 2,8]
y = uniform(5.25, 12.75) # [5,25; 12,75]
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
25. Программирование (Python)
25Программирование
(Python)
§ 19. Ветвления
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
26. Выбор наибольшего из двух чисел
Программирование (Python), 8 класс26
Выбор наибольшего из двух чисел
Задача: изменить порядок действий в зависимости от
выполнения некоторого условия.
полная
форма
да
нет
ветвления
a > b?
M=a
M=b
вывод M
отступы
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
? Если a = b?
if a > b:
M = a
else:
M = b
http://kpolyakov.spb.ru
27. Ввод двух чисел в одной строке
Программирование (Python), 8 класс27
Ввод двух чисел в одной строке
a, b = map( int, input().split() )
21 33 input()
ввести строку с клавиатуры
21 33 input().split()
целые
применить
разделить строку на
части по пробелам
21 33 map( int, input().split() )
эту
операцию
к каждой части
a, b = map( int, input().split() )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
28. Вариант 1. Программа
Программирование (Python), 8 класс28
Вариант 1. Программа
print("Введите два целых числа")
a, b = map( int, input().split() )
if a > b:
M = a
полная форма
условного
else:
оператора
M = b
print("Наибольшее число", M)
Решение в стиле Python:
M = max(a, b)
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
M = a if a > b else b
http://kpolyakov.spb.ru
29. Выбор наибольшего из двух чисел-2
Программирование (Python), 8 класс29
Выбор наибольшего из двух чисел-2
начало
ввод a,b
M =a
да
b > a?
нет
неполная
форма
ветвления
M =b
вывод M
конец
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
30. Вариант 2. Программа
Программирование (Python), 8 класс30
Вариант 2. Программа
print("Введите два целых числа")
a, b = map( int, input().split() )
M = a
неполная форма
if b > a:
условного
оператора
M = b
print("Наибольшее число", M)
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
31. Знаки отношений
Программирование (Python), 8 класс31
Знаки отношений
> <
больше, меньше
>=
больше или равно
<=
меньше или равно
==
равно
!=
не равно
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
32. Вложенные условные операторы
Программирование (Python), 8 класс32
Вложенные условные операторы
Задача: в переменных a и b записаны возрасты Андрея и
Бориса. Кто из них старше?
Сколько вариантов?
if a > b:
print("Андрей старше")
else:
if a == b:
print("Одного возраста")
else:
print("Борис старше")
?
? Зачем нужен?
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
вложенный
условный оператор
http://kpolyakov.spb.ru
33. Каскадное ветвление
Программирование (Python), 8 класс33
Каскадное ветвление
if a > b:
print("Андрей старше")
elif a == b:
print("Одного возраста")
else:
print("Борис старше")
! elif = else if
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
34. Каскадное ветвление
Программирование (Python), 8 класс34
Каскадное ветвление
cost = 1500
if cost < 1000:
print ( "Скидок нет." )
elif cost < 2000:
первое сработавшее
условие
print ( "Скидка 2%." )
elif cost < 5000:
print ( "Скидка 5%." )
else:
print ( "Скидка 10%." )
? Что выведет?
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
Скидка 2%.
http://kpolyakov.spb.ru
35. Задачи (без функций min и max!)
Программирование (Python), 8 класс35
Задачи (без функций min и max!)
«A»: Ввести два целых числа, найти наибольшее и
наименьшее из них.
Пример:
Введите два целых числа:
1 5
Наибольшее число 5
Наименьшее число 1
«B»: Ввести четыре целых числа, найти наибольшее из
них.
Пример:
Введите четыре целых числа:
1 5 4 3
Наибольшее число 5
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
36. Сложные условия
Программирование (Python), 8 класс36
Сложные условия
Задача. Фирма набирает сотрудников от 25 до 40 лет
включительно. Ввести возраст человека и определить,
подходит ли он фирме (вывести ответ "подходит" или
"не подходит").
Особенность: надо проверить, выполняются ли два
условия одновременно:
возраст 25
возраст 40
? Можно ли решить известными методами?
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
37. Плохое решение
Программирование (Python), 8 класс37
Плохое решение
print("Введите ваш возраст")
v = int(input())
if v >= 25:
вложенный
условный
if v <= 40:
оператор
print("Подходит!")
else:
print("Не подходит.")
else:
print("Не подходит.")
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
38. Хорошее решение (операция «И»)
Программирование (Python), 8 класс38
Хорошее решение (операция «И»)
Задача: набор сотрудников в возрасте 25-40 лет
(включительно).
сложное условие
if v >= 25 and v <= 40 :
print("подходит")
else:
print("не подходит")
and «И»: одновременное выполнение
всех условий!
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
39. Сложные условия: «ИЛИ»
Программирование (Python), 8 класс39
Сложные условия: «ИЛИ»
Задача. Самолёт летает по понедельникам и четвергам.
Ввести номер дня недели и определить, летает ли в
этот день самолёт.
Особенность: надо проверить, выполняется ли одно из
двух условий:
день = 1
день = 4
if d == 1 or d == 4 :
print("Летает")
else:
print("Не летает")
сложное
условие
or «ИЛИ»: выполнение хотя бы одного
из двух условий!
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
40. Ещё пример
Программирование (Python), 8 класс40
Ещё пример
Задача. Фирма набирает сотрудников от 25 до 40 лет
включительно. Ввести возраст человека и определить,
подходит ли он фирме (вывести ответ "подходит" или
"не подходит"). Использовать «ИЛИ».
if v < 25 or v > 40 :
print("не подходит")
else:
print("подходит")
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
41. Сложные условия: «НЕ»
Программирование (Python), 8 класс41
Сложные условия: «НЕ»
if not(a < b):
print("Cтарт!")
? Как без «НЕ»?
not «НЕ»: если выполняется обратное условие
if a >= b:
print("Cтарт!")
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
42. Простые и сложные условия
Программирование (Python), 8 класс42
Простые и сложные условия
Простые условия (отношения)
<
<=
>
>=
==
равно
!=
не равно
Сложное условие – это условие, состоящее из
нескольких простых условий (отношений),
связанных с помощью логических операций:
• and – одновременное выполнение условий
x >= 25 and x <= 40
• or – выполнение хотя бы одного из условий
x <= 25 or x >= 40
• not – отрицание, обратное условие
x <=
not (x > 25)
???25
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
43. Порядок выполнения операций
Программирование (Python), 8 класс43
Порядок выполнения операций
• выражения в скобках
• <, <=, >, >=, =, !=
• not
• and
• or
4
1
6
2
5
3
if not a > 2 or c != 5 and b < a:
...
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
44. Логические переменные
Программирование (Python), 8 класс44
Логические переменные
b = True
b = False
type(b)
только два
возможных
значения
<class 'bool'>
логическая (булевская)
переменная
Джордж Буль
Пример:
freeDay = (d==6 or d==7)
...
if not freeDay:
print("Рабочий день.")
else:
print("Выходной!")
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
45. Зачем нужен цикл?
Программирование (Python), 8 класс45
Зачем нужен цикл?
Задача. Вывести 5 раз «Привет!».
print("Привет")
print("Привет")
print("Привет")
print("Привет")
print("Привет")
Цикл «N раз»:
сделай 5 раз
print("Привет")
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
? А если 5000?
такого оператора нет
в Python!
http://kpolyakov.spb.ru
46. Как работает цикл?
Программирование (Python), 8 класс46
Как работает цикл?
! Нужно запоминать, сколько раз цикл уже выполнен!
переменная-счётчик
ещё не делали
счётчик = 0
пока счётчик < 5
print("Привет")
счётчик +=
= счётчик
+ 1
счётчик
1
сделали ещё раз
c = 0
while c < 5:
print("Привет")
c += 1
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
47. Ещё один вариант
Программирование (Python), 8 класс47
Ещё один вариант
Идея: запоминать, сколько шагов осталось.
счётчик = 5
пока счётчик > ???
0
print("Привет")
счётчик -=
= счётчик
???
1
1
c = 5
while c > 0:
print("Привет")
c -= 1
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
? Как записать иначе
последнюю строку?
http://kpolyakov.spb.ru
48. Цикл с предусловием
Программирование (Python), 8 класс48
Цикл с предусловием
• условие проверяется при входе в цикл
• как только условие становится ложным, работа цикла
заканчивается
• если условие ложно в самом начале, цикл не
выполняется ни разу
while условие:
...
тело цикла
? Если условие никогда не станет ложно?
while True:
...
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
бесконечный цикл
(зацикливание)
http://kpolyakov.spb.ru
49. Сколько раз выполняется цикл?
Программирование (Python), 8 класс49
Сколько раз выполняется цикл?
a = 4; b = 6
while a < b: a += 1
2 раза
a=6
a = 4; b = 6
while a < b: a += b
1 раз
a = 10
a = 4; b = 6
while a > b: a += 1
0 раз
a=4
a = 4; b = 6
while a < b: b = a - b
1 раз
b = -2
a = 4; b = 6
while a < b: a -= 1
зацикливание
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
50. Цикл по переменной
Программирование (Python), 8 класс50
Цикл по переменной
Задача. Вывести на экран степени числа 2 от 20 до 210.
k = 0
! Работа с k в трёх местах!
N = 1
Идея: собрать всё вместе.
while k <= 10 :
print(N)
N = N*2
не включая 11!
с нуля!
k = k + 1
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
N = 1
for k in range(11)
range(11):
print(N)
N = N*2
сделать 11 раз
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
51. Цикл по переменной
Программирование (Python), 8 класс51
Цикл по переменной
for k in range(11):
print(k)
? Что выведет?
for k in [0,1,2,3,4,5,6,7,8,9,10]:
print(k)
0
1
2
…
10
Начать на с 0, а с 1:
for k in [1,2,3,4,5,6,7,8,9,10]:
print(k)
начальное
значение
for k in range( 1 ,11):
print(k)
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
52. Цикл по переменной
Программирование (Python), 8 класс52
Цикл по переменной
Задача. Найти сумму чисел от 1 до 1000.
S = 0
for i in range(1,1001):
S += i
Задача. Вывести квадраты чисел от 10 до 1 по убыванию.
for k in [10,9,8,7,6,5,4,3,2,1]:
print(k*k)
не включая 0
шаг
for k in range(10,0,–1):
print(k*k)
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
53. Проверка числа на простоту
Программирование (Python), 8 класс53
Проверка числа на простоту
Задача. Ввести натуральное число N и проверить,
является ли оно простым.
? Что такое простое число?
проверять все
? Как проверить?
от 2 до N-1
26: делится на 2? да составное
27: делится на 2? нет
делится на 3? да составное
29: делится на 2? нет
делится на 3? нет
простое
…
делится на 28? нет
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
54. Проверка числа на простоту
Программирование (Python), 8 класс54
Проверка числа на простоту
N = int(input("Введите число:"))
count = 0
от 2 до N-1
for i in range(2,N):
if N % i == 0:
? Как определить,
count += 1
что простое?
if count == 0:
print( f"{N} – простое" )
else:
print( f"{N} – составное" )
? Как ускорить?
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
55. Проверка числа на простоту
Программирование (Python), 8 класс55
Проверка числа на простоту
N = int(input("Введите число:"))
count = 0
от 2 до N-1
for i in range(2,N):
if N % i == 0:
count += 1
break
выход из цикла
if count == 0:
print( f"{N} – простое" )
else:
print( f"{N} – составное" )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
56. Программирование (Python)
56Программирование
(Python)
§ 21. Массивы
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
57. Что такое массив?
Программирование (Python), 8 класс57
Что такое массив?
? Как ввести 10000 переменных?
Массив – это группа переменных одного типа,
расположенных в памяти рядом (в соседних ячейках) и
имеющих общее имя.
Надо:
• выделять память
• записывать данные в нужную ячейку
• читать данные из ячейки
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
58. Обращение к элементу массива
Программирование (Python), 8 класс58
Обращение к элементу массива
НОМЕР
A
элемента массива
(ИНДЕКС)
массив
0
1
5
10
A[0]
A[1]
22
15
15
3
4
20
25
ЗНАЧЕНИЕ
A[2]
A[3]
A[4]
элемента массива
Индекс элемента — это значение, которое указывает на
конкретный элемент массива.
! Нумерация с нуля!
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
59. Обращение к элементу массива
Программирование (Python), 8 класс59
Обращение к элементу массива
ИНДЕКС элемента массива: 2
A[2]
ЗНАЧЕНИЕ элемента массива
0
1
2
3
4
23
12
7
43
51
i = 1
A[2] = A[i] + 2*A[i-1] + A[2*i+1]
print( A[2]+A[4] )
? Что получится?
A[2] = A[1] + 2*A[0] + A[3]
print( A[2]+A[4] )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
101
152
http://kpolyakov.spb.ru
60. Создание массива
Программирование (Python), 8 класс60
Создание массива
A = [11, 22, 35, 41, 53]
11
22
35
41
53
A = [11, 22] + [35, 41] + [53]
A = [11]*5
11
11
11
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
11
11
http://kpolyakov.spb.ru
61. Что неверно?
Программирование (Python), 8 класс61
Что неверно?
A = [1, 2, 3, 4, 5]
x = 1
? Что плохо?
print( A[x-8] )
A[x+4] = A[x-1] + A[2*x]
print( A[-7] )
A[5] = A[0] + A[2]
Выход за границы массива — это обращение к
элементу с индексом, который не существует в
массиве.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
62. Перебор элементов массива
Программирование (Python), 8 класс62
Перебор элементов массива
N = 10
A = [0]*N
# память уже выделена
Перебор элементов: просматриваем все элементы
массива и, если нужно, выполняем с каждым из них
некоторую операцию.
for i in range(N):
# здесь работаем с A[i]
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
63. Заполнение массива
Программирование (Python), 8 класс63
Заполнение массива
[0, 2, 3, …, N-1]
for i in range(N):
A[i] = i
? Что произойдёт?
В развёрнутом виде
A[0] = 0
A[1] = 1
A[2] = 2
...
A[N-1] = N-1
0
1
2
...
N-1
В стиле Python:
A = [ i for i in range(N) ]
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
64. Заполнение массива в обратном порядке
Программирование (Python), 8 класс64
Заполнение массива в обратном порядке
N
…
3
2
A[0] = N
A[1] = N-1
A[2] = N-2
...
A[N-1] = 1
1
X=N
for i in range(N):
A[i] = X
X=X-1
? Как меняется X?
X = N, N-1, …, 2, 1
начальное
значение
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
уменьшение
на 1
http://kpolyakov.spb.ru
65. Заполнение массива в обратном порядке
Программирование (Python), 8 класс65
Заполнение массива в обратном порядке
N
…
3
2
A[i] = X
1
? Как связаны i и X?
+1
i
0
1
2
...
N-1
X
N
N-1
N-2
...
1
–1
for i in range(N):
A[i] = N – i
В стиле Python:
A = [ N-i
for i in range(N) ]
! Сумма i и X не меняется!
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
i + X = N
X = N - i
http://kpolyakov.spb.ru
66. Вывод массива на экран
Программирование (Python), 8 класс66
Вывод массива на экран
Весь массив сразу:
print( A )
[1,2,3,4,5]
По одному элементу:
for i in range(N):
print( A[i] )
или так:
for x in A:
print( x )
? Как вывести
в строчку?
в столбик
для всех элементов в
массиве A
for x in A:
print( x, end=" " )
пробел между
элементами
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
67. Вывод массива на экран (Python)
Программирование (Python), 8 класс67
Вывод массива на экран (Python)
[1,2,3,4,5]
print ( *A )
print (1, 2, 3, 4, 5)
разбить список
на элементы
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
1 2 3 4 5
http://kpolyakov.spb.ru
68. Ввод с клавиатуры
Программирование (Python), 8 класс68
Ввод с клавиатуры
for i in range(N):
A[i] = int(input())
? Что плохо?
или так:
A = [int(input())
for i in range(N)]
С подсказкой для ввода:
for i in range(N):
s = "A[" + str(i) + "]="
A[i] = int(input(s))
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
A[0] = 5
A[1] = 12
A[2] = 34
A[3] = 56
A[4] = 13
http://kpolyakov.spb.ru
69. Ввод с клавиатуры (Python)
Программирование (Python), 8 класс70
Заполнение случайными числами
из библиотеки
(модуля) random
взять функцию randint
from random import randint
N = 10
# размер массива
A = [0]*N # выделить память
for i in range(N):
A[i] = randint(20,100)
В краткой форме:
from random import randint
N = 10
A = [ randint(20,100)
for i in range(N) ]
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
70. Заполнение случайными числами
Программирование (Python), 8 класс71
Обработка элементов массива
N = 10
A = [0]*N
# память уже выделена
for i in range(N):
# здесь работаем с A[i]
Вывести на экран в столбик:
for i in range(N):
print( A[i] )
???
! Что вместо «???»?
Вывести на экран в строчку:
for i in range(N):
print( A[i], end = " " )
???
print( *A )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
71. Обработка элементов массива
Программирование (Python), 8 класс72
Обработка элементов массива
Вывести числа, на 1 большие, чем A[i]:
for i in range(N):
print( A[i]+1 )
???
! Что вместо «???»?
Вывести последние цифры:
for i in range(N):
print( A[i]%10 )
???
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
72. Обработка элементов массива
Программирование (Python), 8 класс73
Обработка элементов массива
Заполнить нулями:
for i in range(N):
A[i] = 0
???
! Что вместо «???»?
Увеличить на 1:
for i in range(N):
A[i] += 1
???
Умножить на 2:
for i in range(N):
A[i] *= 2
???
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
73. Обработка элементов массива
74Программирование
(Python)
§ 22. Алгоритмы обработки
массивов
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
74. Программирование (Python)
Программирование (Python), 8 класс75
Сумма элементов массива
Задача. Найти сумму элементов массива из N
элементов.
? Какие переменные
нужны?
5
2
8
3
i
s = 0
for i in range(N):
s =
+ A[i]
+=sA[i]
print( s )
s
0
0
1
2
5
7
15
В стиле Python:
3
4
18
19
1
print( sum(A) )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
75. Сумма элементов массива
Программирование (Python), 8 класс76
Сумма элементов массива (Python)
Задача. Найти сумму элементов массива A.
s = 0
for x in A:
s += x
print( s )
для всех
элементов из A
! Не нужно знать размер!
или так:
print( sum(A) )
встроенная
функция
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
76. Сумма элементов массива (Python)
Программирование (Python), 8 класс77
Сумма не всех элементов массива
Задача. Найти сумму чётных элементов массива.
? Что делаем с нечётными?
s = 0
for i in range(N):
s
A[i]
if+=
A[i]
% 2 == 0:
print(
s A[i]
)
s +=
print( s )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
77. Сумма не всех элементов массива
Программирование (Python), 8 класс78
Сумма не всех элементов массива
Задача. Найти сумму чётных элементов массива.
s = 0
for x in A:
if
x %
s +=
x 2 == 0:
s +=
print(
s x
)
print( s )
s
A
4
x
1
8
6
3
4
18
10
4
0
3
6
8
отбираем
в новый
1
массив все нужные
значения
В стиле Python:
B = [x for x in A
if x % 2 == 0]
print ( sum(B) )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
78. Сумма не всех элементов массива
Программирование (Python), 8 класс79
Задачи
«A»: Напишите программу, которая заполняет массив из
10 элементов случайными числами на отрезке [–5; 5]
и находит сумму положительных элементов.
«B»: Напишите программу, которая заполняет массив из
10 элементов случайными числами на отрезке [–2; 2]
и находит произведение ненулевых элементов.
«C»: Напишите программу, которая заполняет массив из
20 элементов случайными числами на отрезке
[100; 1000] и находит отдельно сумму элементов в
первой и во второй половинах массива.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
79. Задачи
Программирование (Python), 8 класс80
Подсчёт элементов по условию
Задача. Найти количество чётных элементов массива.
? Какие переменные нужны?
count = 0
for i in range(N):
if A[i] % 2 == 0:
count += 1
print( count )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
переменнаясчётчик
? Что тут делаем?
http://kpolyakov.spb.ru
80. Подсчёт элементов по условию
Программирование (Python), 8 класс81
Подсчёт элементов по условию (Python)
Задача. Найти количество чётных элементов массива.
count = 0
for x in A:
if x % 2 == 0:
count += 1
print( count )
В стиле Python:
B = [x for x in A
if x % 2 == 0]
print ( len(B) )
размер массива
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
81. Подсчёт элементов по условию (Python)
Программирование (Python), 8 класс82
Среднее арифметическое
Задача. Найти среднее арифметическое элементов
массива, которые больше 180 (рост в см).
s = 0
for x in A:
if x > 180:
s += x
print( s/N )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
? Что плохо?
http://kpolyakov.spb.ru
82. Среднее арифметическое
Программирование (Python), 8 класс83
Среднее арифметическое
Задача. Найти среднее арифметическое элементов
массива, которые больше 180 (рост в см).
? Какие переменные нужны?
s = 0
count = 0
for x in A:
if x > 180:
count += 1
s += x
print( s/count )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
? Что тут делаем?
http://kpolyakov.spb.ru
83. Среднее арифметическое
Программирование (Python), 8 класс84
Среднее арифметическое (Python)
Задача. Найти среднее арифметическое элементов
массива, которые больше 180 (рост в см).
B = [ x for x in A
if x > 180]
print ( sum(B)/len(B) )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
отбираем нужные
http://kpolyakov.spb.ru
84. Среднее арифметическое (Python)
Программирование (Python), 8 класс85
Задачи
«A»: Напишите программу, которая заполняет массив из
20 элементов случайными числами на отрезке [0;
200] и считает количество элементов, которые
делятся на 10.
«B»: Напишите программу, которая заполняет массив из
20 элементов случайными числами на отрезке [0; 200]
и считает среднее арифметическое двузначных чисел
в массиве.
«C»: Напишите программу, которая заполняет массив из
20 элементов случайными числами на отрезке [10;
100] и считает число пар соседних элементов, сумма
которых делится на 3.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
85. Задачи
Программирование (Python), 8 класс86
Перестановка элементов массива
? Как поменять местами значения двух
переменных a и b?
вспомогательная
переменная
элементы массива:
с = a
a = b
b = c
с = A[i]
A[i] = A[k]
A[k] = c
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
86. Перестановка элементов массива
Программирование (Python), 8 класс87
Перестановка пар соседних элементов
Задача. Массив A содержит чётное количество
элементов N. Нужно поменять местами пары соседних
элементов: 0-й с 1-м, 2-й — с 3-м и т. д.
0
1
2
3
7
12
38
5
0
1
2
3
12
7
5
38
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
…
…
N-2
N-1
40
23
N-2
N-1
23
40
http://kpolyakov.spb.ru
87. Перестановка пар соседних элементов
Программирование (Python), 8 класс88
Перестановка пар соседних элементов
for i in range(N):
поменять местами A[i] и A[i+1]
0
1
2
3
Что плохо?
?
4
5
7
12
38
5
40
23
12
7
38
5
40
23
12
38
7
5
40
выход
23 за границы
массива
12
38
5
7
40
23
12
38
5
40
7
23
12
38
5
40
23
7
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
?
http://kpolyakov.spb.ru
88. Перестановка пар соседних элементов
Программирование (Python), 8 класс89
Перестановка пар соседних элементов
for i in range(0,N-1,2):
# переставляем A[i] и A[i+1]
c = A[i]
A[i] = A[i+1]
A[i+1] = c
A[0] A[1]
A[2] A[3]
...
A[N-2] A[N-1]
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
89. Перестановка пар соседних элементов
Программирование (Python), 8 класс90
Реверс массива
Задача. Переставить элементы массива в обратном
порядке (выполнить реверс).
0
1
2
7
12
5
0
1
2
23
40
38
A[0] A[N-1]
A[1] A[N-2]
A[i] A[N-1-i]
A[N-1] A[0]
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
…
…
N-3
N-2
N-1
38
40
23
N-3
N-2
N-1
5
12
7
0+N-1 = N-1
1+N-2 = N-1
i+??? = N-1
N-1+0 = N-1
http://kpolyakov.spb.ru
90. Реверс массива
Программирование (Python), 8 класс91
Реверс массива
(N // 2):
for i in range(N):
поменять местами A[i] и A[N-1-i]
? Что плохо?
0
1
2
3
7
12
40
23
i=0
23
12
40
7
i=1
23
40
12
7
i=2
23
12
40
7
i=3
7
12
40
23
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
? Как исправить?
http://kpolyakov.spb.ru
91. Реверс массива
Программирование (Python), 8 класс92
Задачи
«A»: Заполнить массив из 10 элементов случайными
числами в диапазоне [0; 100], поменять местами
пары соседних элементов, не трогая первый и
последний элементы.
Массив:
53 66 88 39 26 88 35 24 38 50
Результат: 53 88 66 26 39 35 88 38 24 50
«B»: Заполнить массив из 10 элементов случайными
числами в диапазоне [0; 100] и выполнить
циклический сдвиг влево: каждый элемент
перемещается на место предыдущего, а первый – на
место последнего.
Массив:
53 66 88 39 26 88 35 24 38 50
Результат: 66 88 39 26 88 35 24 38 50 53
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
92. Задачи
Программирование (Python), 8 класс93
Задачи
«C»: Заполнить массив из 10 элементов случайными
числами в диапазоне [0; 100], сделать реверс
отдельно в первой и во второй половине массива.
Массив:
53 66 88 39 26 88 35 24 38 50
Результат: 26 39 88 66 53 50 38 24 35 88
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
93. Задачи
Программирование (Python), 8 класс94
Поиск максимального элемента
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
94. Поиск максимального элемента
Программирование (Python), 8 класс95
Поиск максимального элемента
? Какие переменные нужны?
for i in range(N):
if A[i] > M:
M = A[i]
print( M )
? Чего не хватает?
начальное
? Какое
значение взять для M?
1) M – значение, которое заведомо меньше всех
элементов массива
или
2) M = A[0] (или любой другой элемент)
максимальный не меньше, чем A[0]
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
95. Поиск максимального элемента
Программирование (Python), 8 класс96
Поиск максимального элемента
начинаем с A[1], так как
A[0] мы уже посмотрели
M = A[0]
for i in range(1,N):
if A[i] > M:
M = A[i]
print( M )
? Как найти минимальный?
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
96. Поиск максимального элемента
Программирование (Python), 8 класс97
Поиск максимального элемента (Python)
M = A[0]
for x in A:
if x > M:
M = x
print( M )
перебрать все элементы
в массиве A
! Не нужно знать размер!
print( max(A) )
print( min(A) )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
97. Поиск максимального элемента (Python)
Программирование (Python), 8 класс98
Номер максимального элемента
Задача. Найти в массиве максимальный элемент и его
номер.
? Какие переменные нужны?
M = A[0]; nMax = 0
for i in range(1,N):
if A[i] > M:
ли убрать одну
? Можно
M = A[i]
переменную?
nMax = i
print( f"A[{nMax}]={M}" )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
98. Номер максимального элемента
Программирование (Python), 8 класс99
Номер максимального элемента
! Если знаем nMax, то M=A[nMax]!
M = A[0]; nMax = 0
for i in range(1,N):
:
if A[i]> A[nMax]
M :
M = A[i]
nMax = i
print( f"A[{nMax}]={M}"
)
{A[nMax]}"
)
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
99. Номер максимального элемента
Программирование (Python), 8 класс100
Задачи (без min и max)
«A»: Напишите программу, которая заполняет массив из
20 элементов случайными числами на отрезке [50;
150] и находит в нём минимальный и максимальный
элементы и их номера.
«B»: Напишите программу, которая заполняет массив из
10 элементов в виде
A = [ 10, 2, 3, 4, 10, 6, 7, 8, 9, 10]
и выводит количество элементов, имеющих
максимальное значение.
«C»: Напишите программу, которая заполняет массив из
20 элементов случайными числами на отрезке [100;
200] и находит в нём пару соседних элементов,
сумма которых минимальна.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
100. Задачи (без min и max)
Программирование (Python), 8 класс101
Задачи
«D»: Напишите программу, которая заполняет массив из
20 элементов случайными числами на отрезке [–100;
100] и находит в каждой половине массива пару
соседних элементов, сумма которых максимальна.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
101. Задачи
Программирование (Python), 8 класс102
Обработка потока данных: максимум
Задача. С клавиатуры вводятся числа, ввод
завершается числом 0. Найти максимальное
из введённых чисел.
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
102. Обработка потока данных: максимум
Программирование (Python), 8 класс103
Поиск максимума (минимума) в потоке
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
103. Поиск максимума (минимума) в потоке
Программирование (Python), 8 класс104
Поиск максимума (минимума)
1) нужна переменная для хранения максимума
2) как только прочитали первое число,
сохранили максимум («из одного»):
x = int(input())
M = x
3) читаем следующее значение:
x = int(input())
4) цикл: если новое число больше максимума,
заменяем M:
while x != 0:
if x > M: M = x
5) выводим результат M
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
104. Поиск максимума (минимума)
Программирование (Python), 8 класс105
Поиск максимума (минимума)
x = int(input())
M = x
while x != 0:
if x > M: M = x
print(M)
x = int(input())
print(M)
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
? Что плохо?
http://kpolyakov.spb.ru
105. Поиск максимума (минимума)
Программирование (Python), 8 класс106
Поиск максимума (минимума) – II
x = int(input())
M = x
while True:
x = int(input())
if x == 0: break
if x > M: M = x
print(M)
print(M)
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
? Что плохо?
http://kpolyakov.spb.ru
106. Поиск максимума (минимума) – II
Программирование (Python), 8 класс107
Максимум не из всех
Задача: с клавиатуры вводятся числа в
диапазоне [-100;100], ввод завершается
числом 0. Найти наибольшее среди чётных
чисел. Вывести "нет", если таких чисел нет.
x = int(input())
Может быть, что
M = x
x нечётное!
while x != 0:
if x % 2 == ???
0 and x > M:
M = x
x = int(input())
Что плохо?
?
print(M)
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
107. Максимум не из всех
Программирование (Python), 8 класс108
Минимум не из всех
По условию: x [-100;100]
x = int(input())
Любое x больше
M = -1000
этого числа!
while x != 0:
if x % 2 == 0 and x > M:
M = x
Как определить, что
?
x = int(input())
ни одного числа не
if M == -1000:
нашли?
print("Нет таких чисел")
else:
print(M)
? Как искать минимум?
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
108. Минимум не из всех
Программирование (Python), 8 класс109
Если диапазон неизвестен…
x = int(input())
M = 1 # любое нечётное
while x != 0:
if x % 2 == 0:
if M % 2 == 1 or x > M:
M = x
новый
x = int(input()) максимум
if M == 1 :
print("Нет таких чисел")
else:
print(M)
? Когда не нашли?
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
109. Если диапазон неизвестен…
Программирование (Python), 8 класс110
Задачи
«A»: с клавиатуры вводятся числа, ввод завершается
числом 0. Определить минимальное и
максимальное из введённых чисел.
Пример:
5
13
34
15
0
Минимум: 5
Максимум: 34
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
110. Задачи
Программирование (Python), 8 класс111
Задачи
«B»: с клавиатуры вводятся числа из отрезка [1;1000],
ввод завершается числом 0. Определить
минимальное и максимальное из тех введённых
чисел, которые делятся на 3. Вывести "нет", если
таких чисел нет.
Пример:
Пример:
5
5
31
34
18
17
21
41
15
11
0
0
Минимум: 15
Ответ: нет
Максимум: 21
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
111. Задачи
Программирование (Python), 8 класс112
Задачи
«C»: с клавиатуры вводятся числа, ввод завершается
числом 0. Определить минимальное и
максимальное из тех введённых двузначных
натуральных чисел, в записи которых есть цифра 6.
Вывести "нет", если таких чисел нет.
Пример:
6
36
18
26
15
0
Минимум: 26
Максимум: 36
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
Пример:
6
32
176
41
11
0
Ответ: нет
http://kpolyakov.spb.ru
112. Задачи
113Программирование
(Python)
§ 23. Символьные строки
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
113. Программирование (Python)
Программирование (Python), 8 класс114
Что такое символьная строка?
Символьная строка – это последовательность
символов.
• строка – единый объект
• длина строки может меняться во время работы
программы
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
114. Что такое символьная строка?
Программирование (Python), 8 класс115
Символьные строки
Присваивание:
s = "Вася пошёл гулять"
Ввод с клавиатуры:
s = input()
Вывод на экран:
print(s)
Длина строки:
n = len(s)
length – длина
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
115. Символьные строки
Программирование (Python), 8 класс116
Сравнение строк
?
print("Введите пароль: ")
Какой правильный
s = input()
пароль?
if s == "sEzAm":
print("Слушаюсь и повинуюсь!")
else:
print("Пароль неправильный")
? Как одна строка может быть меньше другой?
стоит раньше в отсортированном списке
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
116. Сравнение строк
Программирование (Python), 8 класс117
Сравнение строк
s1 = "паровоз"
s2 = "пароход"
if s1 < s2:
print(s1, "<", s2)
elif s1 == s2:
print(s1, "=", s2)
else:
print(s1, ">", s2)
? Что выведет?
паровоз < пароход
первые отличающиеся
буквы
Сравниваем с начала: паровоз
пароход
! в < х!
«в»: код 1074
«х»: код 1093
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
117. Сравнение строк
Программирование (Python), 8 класс118
Обращение к символу по номеру
print ( s[5] )
print ( s[-2] )
0
1
2
3
4
5
6
П
р
и
в
е
т
!
s[len(s)-2]
s[0] s[1] s[2] s[3] s[4] s[5] s[6]
! Символы нумеруются с нуля!
составить «кот»
s = "информатика"
kot = s[-2]+s[3]+s[-4]
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
118. Обращение к символу по номеру
Программирование (Python), 8 класс119
Посимвольная обработка строк
! Строка неизменна!
s[4] = "a"
Задача. Ввести строку и заменить в ней все буквы «э» на
буквы «е».
строим новую
строку!
sNew = ""
for i in range(len(s)
) :
range(len(s))
if s[i] == "э":
sNew += "е"
для каждого
символа строки
else:
sNew += s[i]
0
1
2
3
4
5
6
П
р
и
в
э
т
!
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
len(s)-1
http://kpolyakov.spb.ru
119. Посимвольная обработка строк
Программирование (Python), 8 класс120
Цикл перебора символов
sNew = ""
for c in s:
if c == "э":
sNew += "е"
else:
sNew += c
перебрать
все символы
строки
c
П
р
и
в
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
э
т
!
http://kpolyakov.spb.ru
120. Цикл перебора символов
Программирование (Python), 8 класс121
Задачи
«A»: Напишите программу, которая вводит строку,
состоящую только из точек и букв Х, и заменяет в
ней все точки на нули и все буквы X на единицы.
Пример:
Введите строку: ..X.XX.
Двоичный код: 0010110
«B»: Напишите программу, которая в символьной строке
заменяет все нули на единицы и наоборот.
Остальные символы не должны измениться.
Пример:
Введите строку: 10а01Bx1010c
Инверсия: 01a10Bx0101c
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
121. Задачи
Программирование (Python), 8 класс122
Задачи
«С»: Введите битовую строку и дополните её последним
битом, который должен быть равен 0, если в
исходной строке чётное число единиц, и равен 1,
если нечётное (в получившейся строке должно
всегда быть чётное число единиц).
Пример:
Введите битовую строку: 01101010110
Результат: 011010101100
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
122. Задачи
Программирование (Python), 8 класс123
Операции со строками
Объединение (конкатенация) :
s1 = "Привет"
"Привет, Вася!"
s2 = "Вася"
s = s1 + ", " + s2 + "!"
Умножение:
s = "АУ"
s5 = s*5
s5 = s + s + s + s + s
АУАУАУАУАУ
? Что получим?
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
123. Операции со строками
Программирование (Python), 8 класс124
Срезы строк (выделение части строки)
s = "0123456789"
s1 = s[3:8]
# "34567"
с какого
символа
до какого
(не включая 8)
s = "0123456789"
s1 = s[:8]
# "01234567"
от начала строки
s = "0123456789"
s1 = s[3:]
# "3456789"
до конца строки
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
124. Срезы строк (выделение части строки)
Программирование (Python), 8 класс125
Срезы строк
Срезы с отрицательными индексами:
s = "0123456789"
s1 = s[:-2]
# "01234567"
len(s)-2
s = "0123456789"
s1 = s[-6:-2]
len(s)-6
# "4567"
len(s)-2
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
125. Срезы строк
Программирование (Python), 8 класс126
Операции со строками
Удаление:
s = "0123456789"
s1 = s[:3] + s[9:]
"012"
"9"
"0129"
Вставка:
s = "0123456789"
s1 = s[:3] + "ABC" + s[3:]
"012"
"3456789"
"012ABC3456789"
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
126. Операции со строками
Программирование (Python), 8 класс127
Поиск в строках
s = "Здесь был Вася."
n = s.find ( "с" )
# n = 3
if n >= 0:
print ( "Номер символа", n )
else:
print ( "Символ не найден." )
! Находит первое слева вхождение
подстроки!
Поиск с конца строки:
s = "Здесь был Вася."
n = s.rfind ( "с" )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
# n = 12
http://kpolyakov.spb.ru
127. Поиск в строках
Программирование (Python), 8 класс128
Задачи
«A»: Ввести с клавиатуры в одну строку фамилию и имя,
разделив их пробелом. Вывести первую букву имени с
точкой и потом фамилию.
Пример:
Введите фамилию и имя:
Иванов Петр
П. Иванов
«B»: Ввести с клавиатуры в одну строку фамилию, имя и
отчество, разделив их пробелом. Вывести фамилию и
инициалы.
Пример:
Введите фамилию, имя и отчество:
Иванов Петр Семёнович
П.С. Иванов
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
128. Задачи
Программирование (Python), 8 класс129
Задачи
«C»: Ввести адрес файла и «разобрать» его на части,
разделенные знаком "/". Каждую часть вывести в
отдельной строке.
Пример:
Введите адрес файла:
C:/Фото/2015/Байкал/shaman.jpg
C:
Фото
2015
Байкал
shaman.jpg
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
129. Задачи
Программирование (Python), 8 класс130
Преобразования «строка» «число»
Из строки в число:
s = "123"
N = int ( s )
s = "123.456"
X = float ( s )
# N = 123
# X = 123.456
Из числа в строку:
N = 123
s = str ( N ) # s = "123"
s = f"{N:5}" # s = " 123"
X = 123.456
s = str (X )
# s = "123.456"
s = f"{X:7.2f}" # s = " 123.46"
s = f"{X:10.2e}" # s = " 1.23e+02"
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
130. Преобразования «строка» «число»
Программирование (Python), 8 класс131
Задачи
«A»: Напишите программу, которая вычисляет сумму двух
чисел, введенную в форме символьной строки. Все числа
целые.
Пример:
Введите выражение:
12+3
Ответ: 15
«B»: Напишите программу, которая вычисляет сумму трёх
чисел, введенную в форме символьной строки. Все числа
целые.
Пример:
Введите выражение:
12+3+45
Ответ: 60
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
131. Задачи
Программирование (Python), 8 класс132
Задачи
«C»: Напишите программу, которая вычисляет сумму
произвольного количества чисел, введенную в форме
символьной строки. Все числа целые.
Пример:
Введите выражение:
12+3+45+10
Ответ: 70
«D»: Напишите программу, которая вычисляет выражение,
содержащее целые числа и знаки сложения и вычитания.
Пример:
Введите выражение:
12+134–45–17
Ответ: 84
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
132. Задачи
Программирование (Python), 8 класс133
Подсчёт количества символов
Задача. Определить, сколько букв A в строке s.
count
0
1
2
3
4
5
6
s
B
A
D
C
E
A
A
0
0
1
1
1
1
2
3
s = input()
count = 0
for c in s:
if c == 'A':
count += 1
print( count )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
133. Подсчёт количества символов
Программирование (Python), 8 класс134
Другое решение
Задача. Определить, сколько букв A в строке s.
count
0
1
2
3
4
5
6
s
B
A
D
C
E
A
A
0
0
1
1
1
1
2
3
! Знаем индекс символа!
s = input()
N = len(s)
count = 0
for i in range(N):
s[i] == 'A':
if s[i]
count += 1
print( count )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
? Как обратиться
к следующему
символу?
s[i+1]
http://kpolyakov.spb.ru
134. Другое решение
Программирование (Python), 8 класс135
Задачи
«A»: Напишите программу, которая вводит символьную строку
и выводит 0, если в этой строке буква A встречается
чаще чем буква B, а в противном случае выводит 1.
Пример 1:
Введите строку: ABCABCA
Ответ: 0
Пример 2:
Введите строку: ABCABC
Ответ: 1
Пример 3:
Введите строку: ABCABCB
Ответ: 1
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
135. Задачи
Программирование (Python), 8 класс136
Задачи
«B»: Напишите программу, которая вводит символьную строку
и определяет количество пар одинаковых символов,
стоящих рядом.
Пример 1:
Введите строку: ABCABCA
Ответ: 0
Пример 2:
Введите строку: ABBCAABCC
Ответ: 3
Пример 3:
Введите строку: AAAAAA
Ответ: 5
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
136. Задачи
Программирование (Python), 8 класс137
Задачи
«C»: Напишите программу, которая вводит символьную строку
и определяет, какая буква встречается в ней чаще всего.
Если таких букв несколько, можно вывести любую из них.
Пример 1:
Введите строку: ABCABC
Ответ: A
Пример 2:
Введите строку: CBBACAABC
Ответ: C
Пример 3:
Введите строку: BBBBBB
Ответ: B
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
137. Задачи
Программирование (Python), 8 класс138
Самая длинная цепочка
Задача. Определить наибольшую длину цепочки из
букв A в строке s.
0
1
2
3
4
5
6
s
B
A
D
A
A
C
A
L 0
maxL 0
0
0
1
1
0
1
1
1
2
2
0
2
1
2
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
138. Самая длинная цепочка
Программирование (Python), 8 класс139
Самая длинная цепочка
Задача. Определить наибольшую длину цепочки из
букв A в строке s.
0
1
2
s
цепочка
A продолжается
L += 1
if L > maxL:
maxL = L
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
3
4
5
6
?
цепочка
прервалась
не A
L = 0
новая не
началась!
http://kpolyakov.spb.ru
139. Самая длинная цепочка
Программирование (Python), 8 класс140
Самая длинная цепочка
Задача. Определить наибольшую длину цепочки из
букв A в строке s.
s = input()
L = maxL = 0
цепочка
продолжается
for c in s:
if c == 'A':
L += 1
if L > maxL:
maxL = L
else:
цепочка
L = 0
прервалась
print( maxL )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
140. Самая длинная цепочка
Программирование (Python), 8 класс141
Задачи
«A»: Напишите программу, которая вводит символьную строку
и определяет наибольшую длину цепочки, которая
состоит только из букв X и Y.
Пример 1:
Введите строку: YXXYBCXYY
Ответ: 4
Пример 2:
Введите строку: ABCABC
Ответ: 0
Пример 3:
Введите строку: XXXXXX
Ответ: 6
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
141. Задачи
Программирование (Python), 8 класс142
Задачи
«B»: Напишите программу, которая вводит символьную строку
и определяет наибольшую длину цепочки, которая
состоит только из цифр (от 0 до 9).
Пример 1:
Введите строку: A01B1234C5
Ответ: 4
Пример 2:
Введите строку: ABCABC
Ответ: 0
Пример 3:
Введите строку: 980123
Ответ: 6
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
142. Задачи
Программирование (Python), 8 класс143
Задачи
«C»: Напишите программу, которая вводит символьную строку
и определяет наибольшую длину цепочки, которая
состоит только из цифр (от 0 до 9), которые стоят в
порядке возрастания.
Пример 1:
Введите строку: A7654321B4230C5
Ответ: 2
Пример 2:
Введите строку: ABCABC
Ответ: 0
Пример 3:
Введите строку: A12389B
Ответ: 5
Пример 4:
Введите строку: 123489
Ответ: 6
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
143. Задачи
Программирование (Python), 8 класс144
Метод замены символов
Задача. Определить наибольшую длину цепочки из
букв A в строке s.
s
0
1
2
3
4
5
6
B
A
D
A
A
C
A
Алгоритм
1) заменить все буквы, кроме A, на пробелы
s
A
A
A
A
2) разбить строку на части по пробелам
['A', 'AA', 'A']
3) определить максимальную из длин полученных
строк
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
144. Метод замены символов
Программирование (Python), 8 класс145
Метод замены символов
Задача. Определить наибольшую длину цепочки из
букв A в строке s.
s
s
B
A
A
D
A
A
A
A
C
A
A
s = s.replace('B', ' ')
s = s.replace('C', ' ')
s = s.replace('D', ' ')
for c in 'BCD':
s = s.replace( c, ' ' )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
145. Метод замены символов
Программирование (Python), 8 класс146
Метод замены символов
Задача. Определить наибольшую длину цепочки из
букв A в строке s.
s
A
A
A
A
['A', 'AA', 'A']
parts = s.split()
maxL = 0
for p in parts:
if len(p) > maxL:
maxL = len(p)
print( maxL )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
146. Метод замены символов
Программирование (Python), 8 класс147
Метод замены символов
Задача. Определить наибольшую длину цепочки из
букв A в строке s.
s
A
A
A
A
['A', 'AA', 'A']
parts = s.split()
print( max( len(p)
for p in parts ) )
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
147. Метод замены символов
Программирование (Python), 8 класс148
Задачи
«A»: Напишите программу, которая вводит символьную
строку, состоящую только из букв P, Q и R, и определяет
наибольшую длину цепочки, которая состоит только из
букв Q.
Пример 1:
Введите строку: PQRPQQR
Ответ: 2
Пример 2:
Введите строку: QRQPQRQP
Ответ: 1
Пример 3:
Введите строку: RRPRPRP
Ответ: 0
Пример 4:
Введите строку: QQQQQQ
Ответ: 6
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
148. Задачи
Программирование (Python), 8 класс149
Задачи
«B»: Напишите программу, которая вводит символьную
строку, состоящую только из цифр и букв A, B, C.
Программа должна определить количество цепочек
длиной больше 2, состоящих только из цифр (от 0 до 9).
Пример 1:
Введите строку: A01B1234C5
Ответ: 1
Пример 2:
Введите строку: 315C789A71829
Ответ: 3
Пример 3:
Введите строку: A1B21C32C43A54B61C
Ответ: 0
Пример 4:
Введите строку: 12345678
Ответ: 1
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
149. Задачи
Программирование (Python), 8 класс150
Задачи
«С»: Напишите программу, которая вводит символьную
строку, состоящую только из цифр и заглавных латинских
букв (от A до Z). Программа должна определить
количество цепочек длиной больше 2, состоящих только
из цифр (от 0 до 9).
Пример 1:
Введите строку: E01W1234X5
Ответ: 1
Пример 2:
Введите строку: 315C789R71829
Ответ: 3
Пример 3:
Введите строку: A1R21T32N43Y54O61L
Ответ: 0
Пример 4:
Введите строку: 12345678
Ответ: 1
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
150. Задачи
Программирование (Python), 8 класс151
Конец фильма
ПОЛЯКОВ Константин Юрьевич
д.т.н., учитель информатики
ГБОУ СОШ № 163, г. Санкт-Петербург
kpolyakov@mail.ru
ЕРЕМИН Евгений Александрович
к.ф.-м.н., доцент кафедры мультимедийной
дидактики и ИТО ПГГПУ, г. Пермь
eremin@pspu.ac.ru
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
151. Конец фильма
Программирование (Python), 8 класс152
Источники иллюстраций
1.
2.
иллюстрации художников издательства «Бином»
авторские материалы
К.Ю. Поляков, Е.А. Ерёмин, 2018-2024
http://kpolyakov.spb.ru
Программирование