Язык Python в школьном курсе информатики
Популярность
Использование
Для обучения
Учебник К.Ю. Полякова и Е.А. Еремина
Олимпиады
Почему Python?
Динамическая типизация
Динамическая типизация
Структура = отступы
Компактность
Списки (массивы)
Списки (массивы)
Списки (массивы)
Списки (массивы)
Длинная арифметика
Словари (ассоциативные массивы)
Алфавитно-частотный словарь
Ввод с клавиатуры
Ввод с клавиатуры
Ввод массива с клавиатуры
Поиск трёх максимумов
C2 (демо-2014)
C4
C4 (решение)
C4-2014
C4-2014 (решение)
ЕГЭ-27 (2016)
ЕГЭ-27 (2016)
ЕГЭ-27 (2018)
ЕГЭ-27 (2016)
Функциональное программирование
Функциональное программирование
Отбор элементов по условию
Обработка всех элементов списка (map)
Обработка всех элементов списка (map)
Map – Reduce
Map – Reduce
Функциональное программирование
Функциональное программирование
Функциональное программирование
Функциональное программирование
Черепашья графика
Графика (модуль graph)
Графика (модуль graph)
Графика (модуль graph)
Графика (модуль graph)
Графика (модуль graph)
Анимация (модуль graph)
Анимация (модуль graph)
Простые игры (модуль graph)
Простые игры (модуль graph)
Графический интерфейс
Графический интерфейс
Библиотеки
Достоинства
Грабли
Грабли
Грабли
Грабли
Грабли
Грабли
Грабли
Грабли
Грабли
Грабли
Грабли
Недостатки
Дистанционное образование
Дистанционное образование
2.74M
Категория: ПрограммированиеПрограммирование

Язык Python в школьном курсе информатики

1. Язык Python в школьном курсе информатики

К.Ю. Поляков,
В.М. Гуровиц
Язык Python в
школьном курсе
информатики
К.Ю. Поляков, В.М. Гуровиц, 2015
http://kpolyakov.spb.ru

2. Популярность

Язык Python в школьном курсе информатики
2
Популярность
https://www.tiobe.com/tiobe-index/
май 2017:
1. Java
2. C
в восьмёрке с
3. C++
2008 года!
4. Python
5. C#
6. Visual Basic.NET
7. JavaScript
8. Ассемблер
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
http://kpolyakov.spb.ru

3. Использование

Язык Python в школьном курсе информатики
3
Использование
Компании и
сайты
1. Google
2. Яндекс
3. CERN
4. NASA
5. Instagram
6. …
!
!
Скрипты
Скрипты в играх:
в программах:
1. Eve Online,
1. GIMP
2. Civilization IV
2. Blender
3. Battlefield 2
3. Cinema 4D
4. Vampire
4. Maya
5. …
5. Inkscape
Linux, Windows,
6. Scribus
FreeBSD, Mac OS X,
7. …
Кроссплатформенный!
Android, iOS…
Свободно распространяемые (open-source)
реализации!
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
http://kpolyakov.spb.ru

4. Для обучения

Язык Python в школьном курсе информатики
4
Для обучения
https://wiki.python.org/moin/SchoolsUsingPython
Университеты и колледжи:
• США – 33
University of California
Вытесняет
University of Florida
University of Iowa
Massachusetts Institute of Technology (MIT)
• Канада – 8
• University of Toronto
• University of Alberta
• Франция – 6
• Великобритания – 5
• University of Oxford
• Австралия – 3
• Испания – 3
• …
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
С и Java!
Москва:
• СУНЦ МГУ
• школа № 179 (МИОО)
• школа № 2007
• гимназия №1543
• гимназия «Вторая школа»
• школа № 57
•…
http://kpolyakov.spb.ru

5. Учебник К.Ю. Полякова и Е.А. Еремина

Язык Python в школьном курсе информатики
5
Учебник К.Ю. Полякова и Е.А. Еремина
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
http://kpolyakov.spb.ru

6. Олимпиады

Язык Python в школьном курсе информатики
6
Олимпиады
Всероссийская олимпиада школьников
Всероссийская командная олимпиада школьников
Московская командная олимпиада школьников
Московская олимпиада школьников
Командная олимпиада школьников Санкт-Петербурга
Интернет-олимпиады ИТМО
Russian Code Cup
Сайты с автоматической проверкой решений:
informatics.mccme.ru
codeforces.com
acm.timus.ru
acmp.ru
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
http://kpolyakov.spb.ru

7. Почему Python?

Язык Python в школьном курсе информатики
7
Почему Python?
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
http://kpolyakov.spb.ru

8. Динамическая типизация

Язык Python в школьном курсе информатики
8
Динамическая типизация
!
Переменные не надо объявлять!
A = 100
# целое
A = 4.5
# вещественное
A = "Привет!"
# строка
A = [1, 2, 3, 4, 5]
# список (массив)
A = (1, "Вася", 3)
# кортеж
A = {"Вася": 1, "Петя": 23}
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
# словарь
http://kpolyakov.spb.ru

9. Динамическая типизация

Язык Python в школьном курсе информатики
9
Динамическая типизация
!
Функция может вернуть любое значение!
def solve ( a, b ):
# a*x = b
логическое
if a == 0:
значение
if b == 0: return True
else: return None
пустое
значение
else:
return b / a
число
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
http://kpolyakov.spb.ru

10. Структура = отступы

Язык Python в школьном курсе информатики
10
Структура = отступы
!
Отступы обязательны!
Условный оператор:
if x > 0:
a = x
if x > 1:
b = x
c = a + x
else:
b = x - 1
c = x*x
d = b + c
!
Цикл:
s = 0
for x in range(100):
a = x
c = 0
while a > 0:
c += a % 8
a = a // 8
s = s + c
Нет begin-end, {}!
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
http://kpolyakov.spb.ru

11. Компактность

Язык Python в школьном курсе информатики
11
Компактность
Обмен значений двух переменных:
c := a
a := b
b := c
a, b = b, a
Алгоритм Евклида:
while b <> 0 do begin
c := a mod b;
a b0
a := b;
b a0 mod b0
b := c
end;
while b:
writeln ( a );
a, b = b, a % b
print ( a )
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
http://kpolyakov.spb.ru

12. Списки (массивы)

Язык Python в школьном курсе информатики
12
Списки (массивы)
!
Нумерация элементов с нуля!
Заполнение
for i:=0 to N-1 do
A[i] := 0;
A = [0]*N
for i:=0 to N-1 do
A[i] := i*i;
A = [i*i
for i in range(N)]
Максимум
M := A[0];
for i:=1 to N-1 do
if A[i] > M then
M := A[i];
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
M = max(A)
http://kpolyakov.spb.ru

13. Списки (массивы)

Язык Python в школьном курсе информатики
13
Списки (массивы)
Выборка элементов по условию
B = [x for x in A if x > 0]
count := 0;
for i:=0 to N-1 do
B = [x
if A[i] > 0 then begin
for x in A
count := count + 1;
if x > 0]
B[count] := A[i]
end;
Сортировка
for i:=0 to N-1 do
for j:=N-2 downto i do
if A[j] > A[j+1] then begin
c:=A[j]; A[j]:=A[j+1];
A[j+1]:=c
end;
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
A.sort()
http://kpolyakov.spb.ru

14. Списки (массивы)

Язык Python в школьном курсе информатики
14
Списки (массивы)
Реверс массива
for i:=1 to N div 2 do begin
c := A[i];
A[i] := A[N-i+1];
A[N-i+1] := c
end;
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
A = A[::-1]
http://kpolyakov.spb.ru

15. Списки (массивы)

Язык Python в школьном курсе информатики
15
Списки (массивы)
Удалить повторяющиеся элементы массива
count := 0;
for i:=1 to N do begin
j := 1;
while (j <= count) and (A[i] <> B[j]) do
j := j + 1;
if j > count then begin
count := count + 1;
B[count] := A[i]
B = list( set(A) )
end
end;
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
http://kpolyakov.spb.ru

16. Длинная арифметика

Язык Python в школьном курсе информатики
16
Длинная арифметика
Задача: вычислить 100! = 1 2 3 … 100
const N = 33;
d = 1000000;
var A: array[0..N] of longint;
i, k, s, r: integer;
begin
A[0]:= 1;
for k:= 2 to 100 do begin
r:= 0;
for i:= 0 to N do begin
s:= A[i]*k + r;
A[i]:= s mod d;
r := s div d
end
end
{ вывод длинного числа из
массива A }
end.
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
A = 1
for i in range(2,101):
A = A*i
print ( A )
или так:
import math
print ( math.factorial(100) )
http://kpolyakov.spb.ru

17. Словари (ассоциативные массивы)

Язык Python в школьном курсе информатики
17
Словари (ассоциативные массивы)
D = {} # пустой словарь
D["cat"] = 15 # добавление в словарь
D["dog"] = "собака"
Неизменяемая величина!
for key in D:
print(key)
D[(1,2)] = [1, 2, 34]
# cat
# dog
for value in D.values():
print(value)
# 15
# собака
for key, value in D.items():
print(key, "->", value)
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
# cat -> 15
# dog -> собака
http://kpolyakov.spb.ru

18. Алфавитно-частотный словарь

Язык Python в школьном курсе информатики
18
Алфавитно-частотный словарь
Задача: построить алфавитно-частотный словарь
Модуль 50 строк!
uses WordList;
var F: text; s: string;
L: TWordList; p: integer;
begin
Assign(F, 'input.txt'); Reset(F);
SetLength(L.data, 0);
L.size := 0;
while not eof(F) do begin D = {}
for line in open("input_list.txt"):
readln(F, s);
p := Find ( L, s );
word = line.strip()
if p >= 0 then
if word:
L.data[p].count := L.data[p].count + 1
D[word] = D.get(word, 0) + 1
else begin
p := FindPlace ( L, s );
InsertWord ( L, p, s );
end
end;
Close(F);
...
end.
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
http://kpolyakov.spb.ru

19. Ввод с клавиатуры

Язык Python в школьном курсе информатики
19
Ввод с клавиатуры
var N, NN: integer;

тип неизвестен!
write ( "Введите число " );
read ( N );
N = input ( "Введите число " )
NN := N*2;
NN = N * 2
Строка!
write ( NN );
print ( NN )
!
Введите число 12
1212
N = int(input("Введите число "))
NN = N * 2
print ( NN )
Введите число 12
24
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
http://kpolyakov.spb.ru

20. Ввод с клавиатуры

Язык Python в школьном курсе информатики
20
Ввод с клавиатуры
var a, b, c: integer;

write ( "Введите три числа " );
read ( a, b, c );
s = input ( "Введите три числа " ) # "1 2 3"
a, b, c = map ( int, s.split() )
применить к каждой
части функцию int
q
a
b
c
=
=
=
=
s.split()
int(q[0])
int(q[1])
int(q[2])
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
#
#
#
#
разбить строку
по пробелам
список ["1", "2", "3"]
1
2
3
http://kpolyakov.spb.ru

21. Ввод массива с клавиатуры

Язык Python в школьном курсе информатики
21
Ввод массива с клавиатуры
const MAX = 1000;
var i, N: integer;
A: array[0..MAX-1] of integer;

readln ( N );
for i:=0 to N-1 do
read ( A[i] );
N = int(input())
A = list( map(int, input().split()) )
N не нужно!
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
http://kpolyakov.spb.ru

22. Поиск трёх максимумов

Язык Python в школьном курсе информатики
22
Поиск трёх максимумов
N = int(input())
max1 = max2 = max3 = -10001
for i in range(N):
x = int(input())
if x > max1:
max1,max2,max3 = x,max1,max2
elif x > max2:
max2,max3 = x,max2
elif x > max3:
max3 = x
print(max1, max2, max3)
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
http://kpolyakov.spb.ru

23. C2 (демо-2014)

Язык Python в школьном курсе информатики
23
C2 (демо-2014)
Задача: найти и вывести максимальное значение среди
трёхзначных элементов массива, не делящихся на 9.
max := 0;
for i := 0 to N-1 do
if (100<=a[i]) and (a[i]<=998) and
(a[i] mod 9<>0) and (a[i]>max) then
max := a[i];
if max > 0 thena = [x for x in a
writeln(max)
if 100 <= x and x <= 999
else writeln("Не найдено");
and x % 9 != 0]
if len(a) > 0:
print(max(a))
else:
print("Не найдено")
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
http://kpolyakov.spb.ru

24. C4

Язык Python в школьном курсе информатики
24
C4
Задача: В первой строке вводится количество учащихся
N, далее идут N строк в формате:
<Фамилия> <Инициалы> <номер школы>
Номер школы < 100.
Из какой школы было меньше всего участников (таких
школ может быть несколько)?
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
http://kpolyakov.spb.ru

25. C4 (решение)

Язык Python в школьном курсе информатики
25
C4 (решение)
const LIM = 99;
var C:array[1..LIM] of integer;
i, p, N, k, r, Min: integer;
N = int(input())
s:string;
begin
schCount = {}
for k:=1 to 99 do C[k]:=0;
for i in range(N):
readln(N);
for i:=1 to Nx,
do begin
x, school = input().split()
readln(s);
schCount[school] = \
p := Pos(' ', s);
Delete(s, 1, p+5); schCount.get(school, 0) + 1
Val(s, k, r);
C[k] minCount
:= C[k] + 1 = min(schCount.values())
end;
Min := schMin
N;
= [x[0] for x in schCount.items()
for k:=1 to LIM do
ifthen
x[1] == minCount]
if (C[k] <> 0) and (C[k]<Min)
Min := C[k];
for
x in
for k:=1
to LIM
do sorted(schMin):
if C[k] = Min
then
print(x)
writeln(k);
end.
словарь
«номер-счётчик»
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
http://kpolyakov.spb.ru

26. C4-2014

Язык Python в школьном курсе информатики
26
C4-2014
Задача: В первой строке вводится длина N
последовательности, далее идут N положительных
чисел, по одному в строке, а затем – контрольная
сумма R – наибольшее произведение двух различных
элементов последовательности, которое
делится на 21.
Проверить правильность контрольной суммы.
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
http://kpolyakov.spb.ru

27. C4-2014 (решение)

Язык Python в школьном курсе информатики
27
C4-2014 (решение)
N = int(input())
M3 = M7 = M21 = M = 0
for i in range(N):
x = int(input())
if x % 21 != 0:
if x % 3 == 0: M3 = max(M3, x)
if x % 7 == 0: M7 = max(M7, x)
if x % 21 == 0 and x > M21:
M = max(M21, M)
M21 = x
else: M = max(M, x)
R0 = int(input())
R = max(M3*M7, M21*M)
if R == R0: print("Контроль пройден")
else:
print("Контроль не пройден")
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
http://kpolyakov.spb.ru

28. ЕГЭ-27 (2016)

Язык Python в школьном курсе информатики
28
ЕГЭ-27 (2016)
Вводится N пар чисел (x,y) (-10000 x, y 10000).
Выбрать по одному числу из пары, так, чтобы сумма
этих чисел была максимальной и не делилась на k. Если
такую сумму найти невозможно, требуется вывести «0».
В цикле:
1) ищем максимальную сумму
2) одновременно ищем пару с наименьшей
разностью, где разность не делится на k
После цикла:
1) если сумма не делится на k, выводим сумму
2) если сумма делится на k, пытаемся
скорректировать, вычитая минимальную разность
3) если такой разности нет – выводим 0
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
http://kpolyakov.spb.ru

29. ЕГЭ-27 (2016)

Язык Python в школьном курсе информатики
29
ЕГЭ-27 (2016)
N = int(input())
k = 7
deltaMin = 20001
sum = 0
for i in range(N):
a, b = map(int, input().split())
sum += max(a, b)
delta = abs(a-b)
if delta % k != 0 and delta < deltaMin :
deltaMin = delta
if sum % k != 0:
print(sum)
elif: deltaMin != 20001:
print(sum-deltaMin)
else: print(0)
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
http://kpolyakov.spb.ru

30. ЕГЭ-27 (2018)

Язык Python в школьном курсе информатики
30
ЕГЭ-27 (2018)
Вводится N чисел. Сколько можно составить пар,
произведение которых делится на 26?
В цикле из N шагов:
1) вводим число
2) считаем
n26 – количество делящихся на 26
n13 – количество делящихся на 13, но не на 2
n2 – количество делящихся на 2, но не на 13
После цикла:
k = n26*(n26-1)//2 + n26*(N-n26)
+ n13*n2
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
http://kpolyakov.spb.ru

31. ЕГЭ-27 (2016)

Язык Python в школьном курсе информатики
31
ЕГЭ-27 (2016)
n2 = n13 = n26 = 0
N = int(input())
for i in range(0, N) :
x = int(input())
if x % 26 == 0: n26 += 1
elif x % 13 == 0: n13 += 1
elif x % 2 == 0: n2 += 1
print(n26*(n26-1)//2 + n26*(N-n26) + n13*n2)
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
http://kpolyakov.spb.ru

32. Функциональное программирование

Язык Python в школьном курсе информатики
32
Функциональное программирование
Функция – объект, который можно передавать в другие
функции как аргумент и возвращать как результат других
функций.
Языки LISP, Scheme, Haskell, Scala, Erlang, F#, …
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
http://kpolyakov.spb.ru

33. Функциональное программирование

Язык Python в школьном курсе информатики
33
Функциональное программирование
Генератор списков
for i:=0 to N do
A[i] := i*i;
A = [i*i
for i in range(N)]
count := 0;
for i:=0 to N do
A = [i*i
if f(i) = 0 then begin
for i in range(N)
A[count] := i*i;
if f(i) == 0 ]
count := count + 1;
end;
Самая длинная строка в файле
s = max ( open("test.txt"), key=len )
ключ
сортировки
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
http://kpolyakov.spb.ru

34. Отбор элементов по условию

Язык Python в школьном курсе информатики
34
Отбор элементов по условию
Задача: Отобрать в массив B все элементы массива A,
кубы которых больше 100.
!
!
count := 0;
for i:=0 to N-1 do
if A[i]*A[i]*A[i] > 100 then begin
count := count + 1;
!
B[count] := A[i]
end;
B = [x
!
for x in A
if x**3 > 100]
!
Меньше шансов на случайную ошибку!
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
http://kpolyakov.spb.ru

35. Обработка всех элементов списка (map)

Язык Python в школьном курсе информатики
35
Обработка всех элементов списка (map)
функция передаётся как
параметр функции
for i:=0 to N-1 do B = list( map(math.sin, A) )
B[i] := sin(A[i]);
A
B
1
7
3
4
5
f(x)
f(x)
f(x)
f(x)
f(x)
f(1)
f(7)
f(3)
f(4)
f(5)
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
http://kpolyakov.spb.ru

36. Обработка всех элементов списка (map)

Язык Python в школьном курсе информатики
36
Обработка всех элементов списка (map)
function x5(x: integer): integer;
begin
x5 := x*x*x*x*x;
def x5 ( x ):
end;
return x**5
...
B = list( map(x5, A) )
for i:=0 to N-1 do
B[i] := x5(A[i])
Функции без имени ( -функции)
B = list( map( lambda x: x**5 , A) )
Переменные-функции
sqr = lambda x: x**2
prod = lambda p, x: p * x
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
http://kpolyakov.spb.ru

37. Map – Reduce

Язык Python в школьном курсе информатики
37
Map – Reduce
Задача: Определить, сколько страниц со словом
«Python» есть на всех серверах компании.
for i:=0 to N-1 do
B[i] := f(A[i]);
A
B
каждый сервер
отдельно!
Map
1
7
3
4
5
f(x)
f(x)
f(x)
f(x)
f(x)
f(1)
f(7)
f(3)
f(4)
f(5)
result := B[0];
for i:=1 to N-1 do
result := G(result, B[i]);
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
Reduce
http://kpolyakov.spb.ru

38. Map – Reduce

Язык Python в школьном курсе информатики
38
Map – Reduce
from functools import reduce
функция
обработки
B = list( map( f, A ) )
p = reduce( G, B )
функция
накопления
Пример:
B = list( map( lambda x: x*x , A) )
p = reduce( lambda p, x: p+x , B )
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
http://kpolyakov.spb.ru

39. Функциональное программирование

Язык Python в школьном курсе информатики
39
Функциональное программирование
Замена цикла рекурсией
function sumDigits(x: integer): integer;
var s: integer;
begin
!
s := 0;
Меньше шансов на
while x def
<> 0sumDigits
do begin ( x ): случайную ошибку!
s := s +ifx xmod
10;
> 0:
x := x divreturn
10 ! ( x % 10 +
end;
sumDigits(x//10) )
sumDigits else:
:= s
end;
return 0
!
def sumDigits ( x ):
return sum( map(int, str(n)) )
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
http://kpolyakov.spb.ru

40. Функциональное программирование

Язык Python в школьном курсе информатики
40
Функциональное программирование
Замена цикла рекурсией
!
def isPalindrome ( s ):
for i in range(len(s) // 2):
if s[i] != s[-1-i]:
return False
!
return True
def isPalindrome ( s ):
if len(s) > 1:
return s[0] == s[-1] and \
isPalindrome(s[1:-1])
else:
return True
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
http://kpolyakov.spb.ru

41. Функциональное программирование

Язык Python в школьном курсе информатики
42
Функциональное программирование
Функция, возвращающая функцию
def createFunc ( valid ):
def f ( s ):
запомнили!
return s == valid
return f
получили функцию
check = createFunc ( "pass" )
print ( check("pass") )
print ( check("bla-bla-bla") )
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
# True
# False
http://kpolyakov.spb.ru

42. Функциональное программирование

Язык Python в школьном курсе информатики
43
Черепашья графика
from turtle import *
def tree ( levels, length ):
turtle_rus
import *
iffrom
levels
> 0:
def
дерево
( уровни,
длина ):
forward
( length
)
if уровни
left
( 45 ) > 0:
( длина
)
treeвперед
( levels-1,
length*0.6)
влево
right
( 90()45 )
( уровни-1,
длина*0.6)
treeдерево
( levels-1,
length*0.6)
leftвправо
( 45 )( 90 )
дерево
уровни-1,
длина*0.6)
backward
( (
length
)
влево ( 45 )
setheading
( 90
)
назад
( длина
)
treeновый_курс
( 5, 100 )( 90 )
дерево ( 5, 100 )
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
http://kpolyakov.spb.ru

43. Черепашья графика

Язык Python в школьном курсе информатики
44
Графика (модуль graph)
http://kpolyakov.spb.ru/school/probook/python.htm
from graph import *
penColor(255, 0, 255)
penSize(5)
brushColor("blue")
rectangle(100, 100, 300, 200)
brushColor("yellow")
polygon([(100,100),(200,50),(300,100),(100,100)])
penColor("white")
brushColor("green")
circle(200, 150, 50)
run()
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
http://kpolyakov.spb.ru

44. Графика (модуль graph)

Язык Python в школьном курсе информатики
45
Графика (модуль graph)
from graph import *
def treug ( x, y, c ):
brushColor(c)
polygon( [(x,y), (x,y-60),
(x+100,y), (x,y)] )
penColor ( "black" )
treug ( 100, 100, "blue" )
treug ( 200, 100, "red" )
treug ( 200, 160, "green" )
run()
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
http://kpolyakov.spb.ru

45. Графика (модуль graph)

Язык Python в школьном курсе информатики
46
Графика (модуль graph)
from graph import *
def row ( y ):
x = 40
for i in range(5):
circle(x, y, 20)
x += 60
y = 40
for k in range(3):
row(y)
y += 60
run()
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
http://kpolyakov.spb.ru

46. Графика (модуль graph)

Язык Python в школьном курсе информатики
47
Графика (модуль graph)
from graph import *
def f(x):
return x**3
viewCoords(-1, 1, -1, 1) # пределы по X и Y
line(-1, 0, 1, 0) # ось X
line(0, -1, 0, 1) # ось Y
x = -1
moveTo ( x, f(x) )
while x <= 1:
y = lineTo ( x, f(x) )
x += 0.1
run()
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
http://kpolyakov.spb.ru

47. Графика (модуль graph)

Язык Python в школьном курсе информатики
48
Графика (модуль graph)
from graph import *
from random import randint
def newPoint():
x = randint(0, 150)
y = randint(0, 150)
penColor(randColor())
point(x, y)
def keyPressed(event):
if event.keycode == VK_ESCAPE:
close()
установка
onTimer(newPoint, 10)
обработчиков
onKey(keyPressed)
событий
run()
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
http://kpolyakov.spb.ru

48. Графика (модуль graph)

Язык Python в школьном курсе информатики
49
Анимация (модуль graph)
1) Неуправляемое движение
def update():
x += dx; y += dy
moveObjectTo(x, y)
onTimer(update, 10)
2) Ожидание нажатия клавиши-стрелки и движение
def keyPressed(event):
if event.keycode == VK_LEFT:
moveObjectTo(x-5, y)
...
onKey(keyPressed)
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
http://kpolyakov.spb.ru

49. Анимация (модуль graph)

Язык Python в школьном курсе информатики
50
Анимация (модуль graph)
3) Изменение направления движения при нажатии на
клавишу
def update():
moveObjectTo(x+dx, y+dy)
def keyPressed(event):
if event.keycode == VK_LEFT:
dx = -5; dy = 0
...
onTimer(update, 10)
onKey(keyPressed)
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
http://kpolyakov.spb.ru

50. Анимация (модуль graph)

Язык Python в школьном курсе информатики
51
Простые игры (модуль graph)
Стрельба по тарелкам:
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
«Поймай шарик»:
http://kpolyakov.spb.ru

51. Простые игры (модуль graph)

Язык Python в школьном курсе информатики
52
Простые игры (модуль graph)
«Змейка»:
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
«Жизнь»:
http://kpolyakov.spb.ru

52. Простые игры (модуль graph)

Язык Python в школьном курсе информатики
53
Графический интерфейс
Стандартный модуль tkinter.
from simpletk import *
app = TApplication("Шестнадцатеричная система")
app.size = (250, 36)
app.position = (200, 200)
f = ("Courier New", 14, "bold")
hexLabel = TLabel(app, text="?", font=f, fg="navy" )
hexLabel.position = (155, 5)
def onNumChange(sender):
hexLabel.text = "{:X}".format(sender.value)
decEdit = TIntEdit(app, width=12, font=f)
decEdit.position = (5, 5)
decEdit.text = "1001"
decEdit.onChange = onNumChange
app.Run()
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
http://kpolyakov.spb.ru

53. Графический интерфейс

Язык Python в школьном курсе информатики
54
Графический интерфейс
Альтернативы:
wxPython, PyGTK, PyQt.
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
http://kpolyakov.spb.ru

54. Графический интерфейс

Язык Python в школьном курсе информатики
55
Библиотеки
• math – математические функции
• fractions – рациональные дроби
• decimal – десятичная арифметика
• random – случайные числа, случайный выбор,
случайная перестановка элементов
• re – регулярные выражения
• itertools – перестановки, сочетания
• webbrowser, urllib, http, ftplib, … – работа с сетью
• tkinter – графический интерфейс
• pyGame – программирование игр
http://www.pygame.org/news.html
• simplegui – модуль для программирования игр на сайте
http://www.codeskulptor.org
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
http://kpolyakov.spb.ru

55. Библиотеки

Язык Python в школьном курсе информатики
56
Достоинства
• низкий порог входа
print ( "Привет!" )
• применяется в профессиональных разработках
• понятный синтаксис, отступы
• компактные решения (за счёт встроенных средств)
• язык более высокого уровня, чем C и Паскаль
(списки, словари, …)
• поддержка любых языков (utf-8)
• большая библиотека
• возможность разработки программ с графическим
интерфейсом
• различные подходы к программированию
(императивный, ООП, функциональный, …)
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
http://kpolyakov.spb.ru

56. Достоинства

Язык Python в школьном курсе информатики
57
Грабли
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
http://kpolyakov.spb.ru

57. Грабли

Язык Python в школьном курсе информатики
58
Грабли
!
Нумерация элементов строк и массивов с нуля!
!
Последний элемент среза не включается!
0
1
2
3
4
5
6
7
7
12
5
8
18
34
40
23
A[1:3]
A[2:3]
A[:3]
A[5:]
A[3:-2]
[12, 5]
[5]
A[0:3]
A[5:8]
A[3:6]
[7, 12, 5]
[34, 40, 23]
[8, 18, 34]
len(A)-2
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
http://kpolyakov.spb.ru

58. Грабли

Язык Python в школьном курсе информатики
59
Грабли
!
Строки нельзя изменять!
var s: string;
...
for i:=1 to Length(s) do
if s[i] = 'a' then s[i] := 'b';
s[i] = "b"
for i in range(len(s)):
if s[i] == "a":
s = s[:i] + "b" + s[i+1:]
с начала
до s[i-1]
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
от s[i+1]
до конца
http://kpolyakov.spb.ru

59. Грабли

Язык Python в школьном курсе информатики
60
Грабли
!
Переменные не нужно объявлять!
«We are all consenting adults here».
if a > b:
print("OK")
else:
this is spam
x1 = 0
if a > b:
xl = 1
!
нет ошибки, пока
не пришли сюда!
нет ошибки!
Требуется тщательное тестирование!
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
http://kpolyakov.spb.ru

60. Грабли

Язык Python в школьном курсе информатики
61
Грабли
!
Опасные опечатки!
s = "1"
...
s + s + "2"
print( s )
должно быть
s = s + "2"
1
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
http://kpolyakov.spb.ru

61. Грабли

Язык Python в школьном курсе информатики
62
Грабли
!
Нет контроля типов параметров!
def trimLeft ( s ):
while len(s) and s[0] == ' ':
s = s[1:]
return s
print ( trimLeft("
123
print ( trimLeft(123) )
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
") )
нет ошибки, пока
не пришли сюда!
http://kpolyakov.spb.ru

62. Грабли

Язык Python в школьном курсе информатики
63
Грабли
!
Нет контроля возвращаемого значения!
def trimLeft ( s ):
while len(s) and s[0] == ' ':
s = s[1:]
return s
print ( trimLeft("
123
") ) None
A = [2, 1, 3, 7, 5, 4]
B = A.sort()
print ( B )
None
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
http://kpolyakov.spb.ru

63. Грабли

Язык Python в школьном курсе информатики
64
Грабли
!
Список – это ссылка!
A = [1, 2, 3]
B = A
A
B
[1, 2, 3]
A[0] = 0
A = [1, 2, 3]
B = A[:]
A
B
[0, 2, 3]
A
[0, 2, 3]
B
[1, 2, 3]
копия массива A
A
[1, 2, 3]
B
[1, 2, 3]
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
A[0] = 0
http://kpolyakov.spb.ru

64. Грабли

Язык Python в школьном курсе информатики
65
Грабли
Глобальные и локальные переменные
state = 0
def changeState(a, b):
if a > b:
state = 1
changeState ( 2, 1 )
print ( state )
0
новая
локальная
переменная!
state = 0
def changeState(a, b):
global state
if a > b:
state = 1
changeState ( 2, 1 )
print ( state )
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
http://kpolyakov.spb.ru

65. Грабли

Язык Python в школьном курсе информатики
66
Грабли
Глобальные и локальные переменные
x = 0
def f():
OK!
print ( x )
f()
использование
локальной
x = 0
переменной до
определения!
def f():
x += 3
x = 0
print ( x )
def f():
f()
global x
x += 3
print ( x )
f()
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
http://kpolyakov.spb.ru

66. Грабли

Язык Python в школьном курсе информатики
67
Грабли
!
Все данные объектов – открытые (public)!
class dog:
def __init__(self, _age):
self.age = _age
нет private!
def spam():
tuzik.age = 100
tuzik = dog(5)
spam()
print(tuzik.age)
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
http://kpolyakov.spb.ru

67. Грабли

Язык Python в школьном курсе информатики
68
Недостатки
две несовместимых версии: 2.x и 3.x
нужен интерпретатор для выполнения
низкая скорость (в 100 раз ниже, чем на C)
увеличенный расход памяти
нет проверки типов данных
нет доступа к низкоуровневым средствам (размещение
данных в памяти, аппаратура)
• неклассическая объектная модель (нет private и
protected)
• нет надёжных RAD-систем для программ с
графическим интерфейсом
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
http://kpolyakov.spb.ru

68. Недостатки

Язык Python в школьном курсе информатики
69
Дистанционное образование
Введение в computer science и программирование на
языке Python, сайт edX (англ.)
https://www.edx.org/course/mitx/mitx-6-00-1x-introduction-computer-1498
Введение в интерактивное программирование на языке
Python, сайт Coursera (англ.)
https://www.coursera.org/course/interactivepython
Онлайн-среда для интерактивного программирования на
языке Python
http://www.codeskulptor.org/
Языке Python на сайте Codecademy (англ.)
http://www.codecademy.com/ru/tracks/python
Языке Python на сайте Stepik.org (англ.)
https://stepik.org/course/Программирование-на-Python-67/
https://stepik.org/course/Python-основы-и-применение-512/
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
http://kpolyakov.spb.ru

69. Дистанционное образование

Язык Python в школьном курсе информатики
70
Дистанционное образование
Материалы по программированию на
языке Python на сайте школы 179 г. Москва
http://server.179.ru/~dk/python.html
Курс Д. Кириенко на сайте «Дистанционная
подготовка по информатике»
http://informatics.mccme.ru/course/view.php?id=156
Интерактивный учебник языка Python
(автор курса – Д. Кириенко)
http://pythontutor.ru
Онлайн-среды:
визуализация
выполнения!
http://www.codeskulptor.org/
http://pythontutor.com/
http://ideone.com/
http://www.compileonline.com/execute_python_online.php
http://www.skulpt.org/
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
http://kpolyakov.spb.ru

70. Дистанционное образование

Язык Python в школьном курсе информатики
71
Конец фильма
ПОЛЯКОВ Константин Юрьевич
д.т.н., учитель информатики
ГБОУ СОШ № 163, г. Санкт-Петербург
[email protected]
ГУРОВИЦ Владимир Михайлович
учитель информатики ФМШ № 2007, г. Москва,
координатор проекта дистанционной подготовки по
информатике (informatics.mccme.ru)
К.Ю. Поляков, В.М. Гуровиц, 2014-2017
http://kpolyakov.spb.ru
English     Русский Правила