Python
Python
Очно-заочная школа
по математике
и информатике
С. В. Шолтанюк
ОСНОВЫ
ПРОГРАММИРОВАНИЯ
НА ЯЗЫКЕ PYTHON
Методические указания
и контрольные работы
по информатике
для учащихся 7–11 классов
Минск
2019
УДК 004.424
ББК 32.973.26-018.1
Ш78
Рекомендовано cоветом
факультета прикладной математики и информатики
26 июня 2019 г. протокол № 8
Рецензент
доктор педагогических наук, кандидат физико-математических
наук, профессор В. В. Казаченок
Шолтанюк, С. В.
Ш78 Основы программирования на языке Python : метод. ука-
зания и контрольные работы по информатике для учащихся
7–11 кл. / С. В. Шолтанюк. – Минск : БГУ, 2019. – 40 с.
УДК 004.424
ББК 32.973.26-018.1
© БГУ, 2019
ВВЕДЕНИЕ
4
Тема 1. ОСНОВНЫЕ ОБЪЕКТЫ ЯЗЫКА PYTHON.
ОСНОВНЫЕ ОПЕРАЦИИ
0.34 3.0
6.02e+23
909 2069763 44
18446744073709551615
6
num_1 = 12 * 0.5 + 2
num_2 = 12 * (0.5 + 2)
print(num_1, num_2)
1.608695652173913
1 -2
14 -9
8.0 30.0
1809251394333065553493296640760748560207343510400633813116524
750123642650624
1.0999999999999999
6.082762530298219
1
Про то, как работают эти типы данных, можно прочитать здесь:
https://docs.python.org/3.7/library/decimal.html,
https://docs.python.org/3.7/library/fractions.html
2
Операции над комплексными числами рассмотрены здесь:
https://pythonworld.ru/tipy-dannyx-v-python/chisla-int-float-complex.html
7
a = True
b = False
print(a and b, a or b, not a, not b)
True
True
False
False
True
True
8
поезд
поезд 'Брест-Москва'
поезд 'Брест-Москва'
C:\some
ame
C:\some\name
При выводе первой строки был обнаружен спецсимвол \n, из-за чего
был осуществлён перенос на новую строку. Во втором случае эта же ком-
бинация символов интерпретируется просто как последовательность двух
символов из-за отсутствия экранирования.
Три подряд кавычки (одинарные или двойные) используют для объяв-
ления строковых переменных, занимающих несколько строк:
verse = """Вуж
паўзе
сабе
дарожкай,
не кране
ніводнай
ножкай.
Ён
пакратаў бы,
3
Более подробный список представлен здесь: https://pythonworld.ru/tipy-dannyx-v-
python/stroki-literaly-strok.html
9
каб мог,
але вуж
не мае
ног."""
print(verse)
Вуж
паўзе
сабе
дарожкай,
не кране
ніводнай
ножкай.
Ён
пакратаў бы,
каб мог,
але вуж
не мае
ног.
10
msg = "Hi! My name is..."
# индексация в Python начинается с нуля
first = msg[0]
second = msg[1]
# поддерживается также отрицательная индексация
# первый с конца строки символ
last = msg[-1]
print(first + second + last)
Hi.
name
M ae
ynm
My name is...
...si eman yM !iH
name i
iea M
17
True
True
При работе со строками следует помнить о том, что они являются не-
изменяемыми объектами, т.е. нельзя изменять их элементы. Если нужно
изменить некоторую строку, то следует создать новую.
msg = "Здравствуй, Андрей"
# msg[-6:] = "Пётр" # если убрать решётку в начале этой
# строки, то выполнение этого оператора выдаст ошибку
# можно поступить, например, следующим образом:
new_msg = msg[:-6] + "Пётр"
print(new_msg)
Здравствуй, Пётр
4
Более подробный список методов приведён здесь: https://pythonworld.ru/tipy-
dannyx-v-python/stroki-funkcii-i-metody-strok.html
12
# символу на несколько строк
print(msg.split(","))
print(" ".join(words)) # обратная операция - соединение строк
# из списка words в одну с заданным
# разделителем
print(msg.capitalize()) # первая буква строки переводится в
# верхний регистр, остальные - в
# нижний
print("88000".isdigit()) # состоит ли данная строка только из
# цифр?
print(msg.isalpha()) # состоит ли строка только из букв?
# (вернёт False, так как есть знаки
# препинания)
0
20
2
здравствуй, Андрей, здравствуй, Кирилл.
['здравствуй', ' Андрей', ' здравствуй', ' Пётр.']
здравствуй Андрей здравствуй Пётр.
Здравствуй, андрей, здравствуй, пётр.
True
False
112
q
13
присвоится строка, введённая пользователем. Например, если ввели со-
общение Здравствуйте, то результат будет выглядеть следующим обра-
зом:
Введите Ваше сообщение: Здравствуйте
Здравствуйте
Введите число: 4
4 + 2 = 6
5
Более подробный список представлен здесь:
https://docs.python.org/3.7/library/stdtypes.html#old-string-formatting
15
a = 7
b = 23
print("%d составляет %.2f%% от %d" % (a, a / b * 100, b))
7 составляет 30.43% от 23
16
Тема 4. УСЛОВНЫЕ ОПЕРАТОРЫ
После чего следует сравнить два введённых числа. Возможно два слу-
чая: оба числа равны либо же одно из них больше другого. В первом слу-
чае нужно вывести сообщение о том, что у ребят равное число фишек:
if d == v:
print("У мальчиков поровну фишек")
18
Тема 5. СПИСКИ
19
['Брест', 'Новый Витебск', 'Гродно', 'Гомель', 'Минск',
'Могилёв']
['Брест', 'Новый Витебск', 'Гродно', 'Добруш', 'Смолевичи',
'Чаусы']
['Брест', 'Новый Витебск', 'Свислочь', 'Волковыск', 'Брагин',
'Речица', 'Смолевичи', 'Чаусы']
['Волковыск', 'Брагин', 'Речица', 'Смолевичи', 'Чаусы']
v-python/spiski-list-funkcii-i-metody-spiskov.html
20
# выяснить, содержится ли некоторое значение в списке, можно
# при помощи оператора in
print("Несвиж" in cities)
[-3, -3, 0, 1, 1, 2, 5]
[5, 2, 1, 1, 0, -3, -3]
['Здесь', 'вверх', 'воду', 'кидать', 'нужно', 'руками']
['вверх', 'воду', 'Здесь', 'кидать', 'нужно', 'руками']
['вверх', 'воду', 'Здесь', 'кидать', 'нужно', 'руками']
7
Подробное руководство по сортировке списков:
https://docs.python.org/3/howto/sorting.html
21
или метод, который будет применяться к каждому элементу списка для
его сортировки. При этом сортировка проводится в порядке возрастания
значений этой функции.
Поддерживается сортировка более сложных конструкций, например,
кортежей (см. темы 6, 7):
y = [2, 3, -1, 7, -2, -2, 1]
# генерация нового списка на основе ранее созданных двух
coords = [(x[i], y[i]) for i in range(7)]
print(coords)
print(sorted(coords))
print(sorted(coords, reverse=True))
print(sorted(coords, key=lambda coord:(-coord[0], coord[1])))
[(-3, 2), (5, 3), (1, -1), (0, 7), (1, -2), (2, -2), (-3, 1)]
[(-3, 1), (-3, 2), (0, 7), (1, -2), (1, -1), (2, -2), (5, 3)]
[(5, 3), (2, -2), (1, -1), (1, -2), (0, 7), (-3, 2), (-3, 1)]
[(5, 3), (2, -2), (1, -2), (1, -1), (0, 7), (-3, 1), (-3, 2)]
n = 6
Введите 1-ое имя: Галина
Введите 2-ое имя: Пётр
Введите 3-ое имя: Александр
Введите 4-ое имя: Никита
Введите 5-ое имя: Святослав
Введите 6-ое имя: Иван
23
После этого можно отсортировать список согласно условию задачи.
Сделать это можно, например, при помощи задания анонимной функции:
# использование аргумента key для задания сортировки вначале
# по длине имени, а затем - по алфавиту, что является
# способом сортировки по умолчанию
names_list.sort(key=lambda name:(len(name), name))
print(names_list)
Б
е
л
а
р
у
с
ь
Брест
Витебск
Гродно
Гомель
Минск
Могилёв
1 / 1 = 1.00
1 / 2 = 0.50
1 / 3 = 0.33
1 / 4 = 0.25
8
Более подробно они рассмотрены здесь:
https://docs.python.org/3.7/tutorial/datastructures.html#looping-techniques
27
0 Брест
1 Витебск
2 Гродно
3 Гомель
4 Минск
5 Могилёв
Население города Брест составляет 350616
Население города Витебск составляет 378459
Население города Гродно составляет 373547
Население города Гомель составляет 536938
Население города Минск составляет 1992685
Население города Могилёв составляет 383313
28
# возьмёт со стола. Это число вводится с клавиатуры
n_i = int(input("Сколько спичек возьмёт %s? " %
current_player))
# это число вычитается из общего числа спичек и
# прибавляется к числу спичек на руках текущего игрока
n -= n_i
matches[i % 2] += n_i
# для слежения за игрой было бы неплохо выводить
# результат каждого хода
print(("На столе осталось %d спичек. %s имеет на руках "
"%d спичек, %s - %d спичек.") % (n, names[0],
matches[0],
names[1],
matches[1]))
# в конце хода нужно увеличить i
i += 1
29
На столе осталось 4 спичек. Первый игрок имеет на руках 5
спичек, Второй игрок - 4 спичек.
Сколько спичек возьмёт Второй игрок? 2
На столе осталось 2 спичек. Первый игрок имеет на руках 5
спичек, Второй игрок - 6 спичек.
Сколько спичек возьмёт Первый игрок? 1
На столе осталось 1 спичек. Первый игрок имеет на руках 6
спичек, Второй игрок - 6 спичек.
Сколько спичек возьмёт Второй игрок? 1
На столе осталось 0 спичек. Первый игрок имеет на руках 6
спичек, Второй игрок - 7 спичек.
Первый игрок победил
Тема 7. КОРТЕЖИ
30
# упаковка в кортеж
competition = ("Пахомов", "Епифанцев", "шашки")
# распаковка кортежа в разные переменные
name_1, name_2, sport = competition
print("Участники соревнования: %s и %s" % (name_1, name_2))
print("Они играют в %s" % sport)
31
for i in range(1, n + 1):
# подсчёт суммы цифр числа i
digits_sum = 0
ii = i
while ii > 0:
digits_sum += ii % 10
ii = ii // 10
# добавление очередного кортежа в список
tuples.append((i, digits_sum))
# сортировка списка кортежей вначале по второму компоненту,
# затем - по первому
tuples.sort(key=lambda t:(t[1], t[0]))
n = 10
1
10
2
3
4
5
6
7
8
9
32
ЗАДАНИЯ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ
a = 32.7
b = 3.8
c = 7.6
16.350
33
Для каждого числа от 1 до n вычисляется сумма всех делителей, кроме
самого числа, которая затем сравнивается с числом n / 2. Если сумма
делителей окажется больше, то само число записывается в первый список,
а сумма его делителей – во второй:
for i in range(1, n + 1):
# число i всегда делится на 1
summ = 1
# наибольший делитель числа i, не считая само число i,
# будет меньше числа i // 2 + 1
for div in range(2, i // 2 + 1):
if i % div == 0:
summ += div
# если число i подходит по условию задачи, то нужно его
# записать в один список, а сумму его делителей - в
# другой
if summ > n / 2:
nums.append(i)
sum_divs.append(summ)
После того, как оба списка заполнены, можно выписать все их эле-
менты. Для параллельного выписывания элементов списков хорошо по-
дойдёт функция zip:
# одновременный вывод соответственных элементов обоих списков
for i, sum_div in zip(nums, sum_divs):
print("Сумма делителей числа %d равна %d" % (i, sum_div))
n = 10
Сумма делителей числа 6 равна 6
Сумма делителей числа 8 равна 7
Сумма делителей числа 10 равна 8
Введите текст
Получив и прочитав это письмо, Пантагрюэль ободрился и
воспламенился желанием учиться как можно лучше; и кто видел,
как он учился и преуспевал, тот сказал бы, что ум его
пожирает книги, как огонь сухую траву, — до такой степени он
был неутомим и усерден в занятиях.
желанием
неутомим
пожирает
прочитав
занятиях.
ободрился
Пантагрюэль
преуспевал,
воспламенился
35
КОНТРОЛЬНАЯ РАБОТА № 1
37
КОНТРОЛЬНАЯ РАБОТА № 3
38
СПИСОК РЕКОМЕНДУЕМОЙ ЛИТЕРАТУРЫ
Основной
The Python Tutorial – Python 3.7.4 documentation. [Electronic resource]. –
2019. – Mode of access: https://docs.python.org/3.7/tutorial/ – Date of access:
31.08.2019.
Мусин, Д. Самоучитель Python / Д. Мусин [Электронный ресурс]. – 2017
Режим доступа: https://pythonworld.ru/uploads/pythonworldru.pdf – Дата до-
ступа: 31.08.2019.
Самоучитель Python. [Электронный ресурс]. – 2019 – Режим доступа:
https://pythonworld.ru/samouchitel-python – Дата доступа: 31.08.2019.
Златопольский, Д. М. Основы программирования на языке Python /
Д. М. Златопольский – М. : ДМК Пресс, 2017. – 284 с.
Дополнительный
Лутц, М. Изучаем Python. / М. Лутц; пер. с англ. – 4-е изд. – СПб.: Сим-
вол-Плюс, 2011. – 1280 с.
Федоров, Д. Ю. Программирование на языке высокого уровня Python :
учеб. пособие для прикладного бакалавриата / Д. Ю. Федоров. – 2-е изд.,
перераб. и доп. – М. : Юрайт, 2019. –161 с. – (Серия: Бакалавр. Прикладной
курс).
Питонтьютор. [Электронный ресурс]. – 2019 – Режим доступа:
https://pythontutor.ru/ – Дата доступа: 31.08.2019.
Бесплатные курсы. Python 3 для начинающих и чайников [Электронный
ресурс]. – 2019 – Режим доступа: https://pythonworld.ru/kursy/free.html –
Дата доступа: 31.08.2019.
39
СОДЕРЖАНИЕ
ВВЕДЕНИЕ ...................................................................................................... 3
Тема 1. ОСНОВНЫЕ ОБЪЕКТЫ ЯЗЫКА PYTHON.
ОСНОВНЫЕ ОПЕРАЦИИ ............................................................................. 5
Тема 2. СТРОКИ. ОПЕРАЦИИ НАД СТРОКАМИ ..................................... 8
Тема 3. КОНСОЛЬНЫЙ ВВОД И ВЫВОД. ПРИВЕДЕНИЕ
К ДРУГОМУ ТИПУ ДАННЫХ. ФОРМАТИРОВАНИЕ СТРОК ............ 13
Тема 4. УСЛОВНЫЕ ОПЕРАТОРЫ............................................................ 17
Тема 5. СПИСКИ ........................................................................................... 19
Тема 6. ОПЕРАТОРЫ ЦИКЛОВ.................................................................. 24
Тема 7. КОРТЕЖИ......................................................................................... 30
ЗАДАНИЯ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ ................................. 33
Пояснения к заданиям для самостоятельной работы .......................... 33
КОНТРОЛЬНАЯ РАБОТА № 1 ................................................................... 36
КОНТРОЛЬНАЯ РАБОТА № 2 ................................................................... 37
КОНТРОЛЬНАЯ РАБОТА № 3 ................................................................... 38
СПИСОК РЕКОМЕНДУЕМОЙ ЛИТЕРАТУРЫ ....................................... 39
40
Учебное издание
ОСНОВЫ
ПРОГРАММИРОВАНИЯ
НА ЯЗЫКЕ PYTHON
Методические указания
и контрольные работы
по информатике
для учащихся 7–11 классов
В авторской редакции