Similar presentations:
Язык 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