Скачать презентацию 1 Программирование на языке Python 54 Алгоритм Скачать презентацию 1 Программирование на языке Python 54 Алгоритм

10-8Python-I.ppt

  • Количество слайдов: 129

1 Программирование на языке Python § 54. Алгоритм и его свойства § 55. Простейшие 1 Программирование на языке Python § 54. Алгоритм и его свойства § 55. Простейшие программы § 56. Вычисления § 57. Ветвления § 58. Циклические алгоритмы § 59. Процедуры § 60. Функции § 61. Рекурсия К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

2 Программирование на языке Python § 54. Алгоритм и его свойства К. Ю. Поляков, 2 Программирование на языке Python § 54. Алгоритм и его свойства К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

3 Алгоритмизация и программирование, язык Python, 10 класс Что такое алгоритм? Алгоритм — это 3 Алгоритмизация и программирование, язык Python, 10 класс Что такое алгоритм? Алгоритм — это точное описание порядка действий, которые должен выполнить исполнитель для решения задачи за конечное время. Исполнитель – это устройство или одушёвленное существо (человек), способное понять и выполнить команды, составляющие алгоритм. Мухаммед ал-Хорезми (ок. 783–ок. 850 гг. ) Формальные исполнители: не понимают (и не могут понять) смысл команд. К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

4 Алгоритмизация и программирование, язык Python, 10 класс Свойства алгоритма Дискретность — алгоритм состоит 4 Алгоритмизация и программирование, язык Python, 10 класс Свойства алгоритма Дискретность — алгоритм состоит из отдельных команд, каждая из которых выполняется за конечное время. Детерминированность (определённость) — при каждом запуске алгоритма с одними и теми же исходными данными получается один и тот же результат. Понятность — алгоритм содержит только команды, входящие в систему команд исполнителя. Конечность (результативность) — для корректного набора данных алгоритм должен завершаться через конечное время. Корректность — для допустимых исходных данных алгоритм должен приводить к правильному результату. К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

5 Алгоритмизация и программирование, язык Python, 10 класс Как работает алгоритм? дискретный объект 1234 5 Алгоритмизация и программирование, язык Python, 10 класс Как работает алгоритм? дискретный объект 1234 алгоритм 2345 шаг 1 5432 шаг 3 дискретный объект 25 16 9 4 • получает на вход дискретный объект • в результате строит другой дискретный объект (или выдаёт сообщение об ошибке) • обрабатывает объект по шагам • на каждом шаге получается новый дискретный объект К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

6 Алгоритмизация и программирование, язык Python, 10 класс Способы записи алгоритмов • естественный язык 6 Алгоритмизация и программирование, язык Python, 10 класс Способы записи алгоритмов • естественный язык установить соединение пока не принята команда «стоп» принять команду выполнить команду завершить сеанс связи • псевдокод установить соединение начало цикла принять команду выполнить команду конец цикла при команда = 'stop' завершить сеанс связи К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

7 Алгоритмизация и программирование, язык Python, 10 класс Способы записи алгоритмов • блок-схема установить 7 Алгоритмизация и программирование, язык Python, 10 класс Способы записи алгоритмов • блок-схема установить соединение принять команду выполнить команду нет • программа установить. Соединение начало цикла cmd: = получить. Команду выполнить. Команду(cmd) конец при cmd = 'stop' закрыть. Соединение «стоп» ? да завершить соединение К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

8 Программирование на языке Python § 55. Простейшие программы К. Ю. Поляков, Е. А. 8 Программирование на языке Python § 55. Простейшие программы К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

9 Алгоритмизация и программирование, язык Python, 10 класс Простейшая программа # Это пустая программа 9 Алгоритмизация и программирование, язык Python, 10 класс Простейшая программа # Это пустая программа комментарии после # не обрабатываются ? Что делает эта программа? кодировка utf-8 по умолчанию) # -*- coding: utf-8 -*# Это пустая программа Windows: cp 1251 """ Это тоже комментарий """ К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

10 Алгоритмизация и программирование, язык Python, 10 класс Вывод на экран print ( 10 Алгоритмизация и программирование, язык Python, 10 класс Вывод на экран print ( "2+2=? " ) print ( "Ответ: 4" ) автоматический переход на новую строку Протокол: 2+2=? Ответ: 4 К. Ю. Поляков, Е. А. Ерёмин, 2014 print ( '2+2=? ' ) print ( 'Ответ: 4' ) http: //kpolyakov. spb. ru

Алгоритмизация и программирование, язык Python, 10 класс 11 Задания «B» : Вывести на экран Алгоритмизация и программирование, язык Python, 10 класс 11 Задания «B» : Вывести на экран текст «лесенкой» Вася пошел гулять «C» : Вывести на экран рисунок из букв Ж ЖЖЖЖЖЖЖ HH HH ZZZZZ К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

12 Алгоритмизация и программирование, язык Python, 10 класс Сложение чисел Задача. Ввести с клавиатуры 12 Алгоритмизация и программирование, язык Python, 10 класс Сложение чисел Задача. Ввести с клавиатуры два числа и найти их сумму. Протокол: Введите два целых числа 25 30 пользователь 25+30=55 компьютер считает сам! ? 1. 2. 3. 4. Как ввести числа в память? Где хранить введенные числа? Как вычислить? Как вывести результат? К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

13 Алгоритмизация и программирование, язык Python, 10 класс Сумма: псевдокод ввести два числа вычислить 13 Алгоритмизация и программирование, язык Python, 10 класс Сумма: псевдокод ввести два числа вычислить их сумму вывести сумму на экран Псевдокод – алгоритм на русском языке с элементами языка программирования. ! Компьютер не может исполнить псевдокод! К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

14 Алгоритмизация и программирование, язык Python, 10 класс Переменные Переменная – это величина, имеющая 14 Алгоритмизация и программирование, язык Python, 10 класс Переменные Переменная – это величина, имеющая имя, тип и значение. Значение переменной можно изменять во время работы программы. Значение a К. Ю. Поляков, Е. А. Ерёмин, 2014 Имя http: //kpolyakov. spb. ru

15 Алгоритмизация и программирование, язык Python, 10 класс Имена переменных МОЖНО использовать • латинские 15 Алгоритмизация и программирование, язык Python, 10 класс Имена переменных МОЖНО использовать • латинские буквы (A-Z, a-z) заглавные и строчные буквы различаются • русские буквы (не рекомендуется!) • цифры имя не может начинаться с цифры • знак подчеркивания _ НЕЛЬЗЯ использовать • скобки • знаки +, =, !, ? и др. Какие имена правильные? AXby R&B 4 Wheel TU 154 [Qu. Qu] К. Ю. Поляков, Е. А. Ерёмин, 2014 Вася “Pes. Barbos” _ABBA A+B http: //kpolyakov. spb. ru

16 Алгоритмизация и программирование, язык Python, 10 класс Типы переменных a = 4 print 16 Алгоритмизация и программирование, язык Python, 10 класс Типы переменных a = 4 print ( type(a) ) a = 4. 5 print ( type(a) ) a = "Вася" print ( type(a) ) a = True print ( type(a) ) К. Ю. Поляков, Е. А. Ерёмин, 2014 целое число (integer) вещественное число символьная строка логическая http: //kpolyakov. spb. ru

Алгоритмизация и программирование, язык Python, 10 класс 17 Зачем нужен тип переменной? Тип определяет: Алгоритмизация и программирование, язык Python, 10 класс 17 Зачем нужен тип переменной? Тип определяет: • область допустимых значений • допустимые операции • объём памяти • формат хранения данных К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

18 Алгоритмизация и программирование, язык Python, 10 класс Как записать значение в переменную? ! 18 Алгоритмизация и программирование, язык Python, 10 класс Как записать значение в переменную? ! При записи нового значения оператор присваивания a = 5 a = 7 старое удаляется из памяти! a 5 7 Оператор – это команда языка программирования (инструкция). Оператор присваивания – это команда для записи нового значения переменной. К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

19 Алгоритмизация и программирование, язык Python, 10 класс Ввод значения с клавиатуры a ! 19 Алгоритмизация и программирование, язык Python, 10 класс Ввод значения с клавиатуры a ! 5 1. Программа ждет, пока пользователь введет значение и нажмет Enter. 2. Введенное значение записывается в переменную a (связывается с именем a) К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

20 Алгоритмизация и программирование, язык Python, 10 класс Ввод значения с клавиатуры a = 20 Алгоритмизация и программирование, язык Python, 10 класс Ввод значения с клавиатуры a = input() b = input() с = a + b print ( c ) ! ввести строку с клавиатуры и связать с переменной a Протокол: 21 33 2133 ? Почему? Результат функции input – строка символов! преобразовать в целое число a = int( input() ) b = int( input() ) К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

21 Алгоритмизация и программирование, язык Python, 10 класс Ввод двух значений в одной строке 21 Алгоритмизация и программирование, язык Python, 10 класс Ввод двух значений в одной строке 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() ) К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

22 Алгоритмизация и программирование, язык Python, 10 класс Ввод с подсказкой a = input 22 Алгоритмизация и программирование, язык Python, 10 класс Ввод с подсказкой a = input ( "Введите число: " ) Введите число: 26 ? подсказка Что не так? a = int( input("Введите число: ") ) К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

Алгоритмизация и программирование, язык Python, 10 класс 23 Изменение значений переменной a = 5 Алгоритмизация и программирование, язык Python, 10 класс 23 Изменение значений переменной a = 5 b = a + 2 a = (a + 2)*(b – 3) b = b + 1 28 a b =(5+2)*(7 -3) 5 7 =5+2 8 =7+1 К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

24 Алгоритмизация и программирование, язык Python, 10 класс Вывод данных print ( a ) 24 Алгоритмизация и программирование, язык Python, 10 класс Вывод данных print ( a ) значение переменной значение и текст print ( "Ответ: ", a ) перечисление через запятую print ( "Ответ: ", a+b ) вычисление выражения print ( a, "+", b, "=", c ) 2 + 3 = 5 через пробелы sep "" ) print ( a, "+", b, "=", c, sep = "" 2+3=5 К. Ю. Поляков, Е. А. Ерёмин, 2014 убрать разделители http: //kpolyakov. spb. ru

Алгоритмизация и программирование, язык Python, 10 класс 25 Сложение чисел: простое решение a = Алгоритмизация и программирование, язык Python, 10 класс 25 Сложение чисел: простое решение a = int ( input() ) b = int ( input() ) c = a + b print ( c ) ? Что плохо? К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

26 Алгоритмизация и программирование, язык Python, 10 класс Сложение чисел: полное решение print ( 26 Алгоритмизация и программирование, язык Python, 10 класс Сложение чисел: полное решение print ( "Введите два числа: " ) a = int ( input() ) подсказка b = int ( input() ) c = a + b print ( a, "+", b, "=", c ) Протокол: компьютер Введите два целых числа 25 30 пользователь 25 + 30 = 55 К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

27 Алгоритмизация и программирование, язык Python, 10 класс Форматный вывод целое a = 123 27 Алгоритмизация и программирование, язык Python, 10 класс Форматный вывод целое a = 123 print ( "{: 5 d}". format(a) ) 5 123 5 знаков a = 5 print ( "{: 5 d}{: 5 d}". format (a, a*a*a) ) 5 25 125 5 знаков К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

28 Программирование на языке Python § 56. Вычисления К. Ю. Поляков, Е. А. Ерёмин, 28 Программирование на языке Python § 56. Вычисления К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

29 Алгоритмизация и программирование, язык Python, 10 класс Типы данных • int # целое 29 Алгоритмизация и программирование, язык Python, 10 класс Типы данных • int # целое • float # вещественное • bool # логические значения • str # символьная строка a = 5 print ( type(a) ) a = 4. 5 print ( type(a) ) a = True print ( type(a) ) a = "Вася" print ( type(a) ) К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

30 Алгоритмизация и программирование, язык Python, 10 класс Арифметическое выражения 3 1 2 4 30 Алгоритмизация и программирование, язык Python, 10 класс Арифметическое выражения 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 К. Ю. Поляков, Е. А. Ерёмин, 2014 перенос на следующую строку перенос внутри скобок разрешён http: //kpolyakov. spb. ru

31 Алгоритмизация и программирование, язык Python, 10 класс Деление Классическое деление: a = 9; 31 Алгоритмизация и программирование, язык Python, 10 класс Деление Классическое деление: 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 К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

32 Алгоритмизация и программирование, язык Python, 10 класс Остаток от деления % – остаток 32 Алгоритмизация и программирование, язык Python, 10 класс Остаток от деления % – остаток от деления d = 85 b = d // 10 # 8 a = d % 10 # 5 d = a % b # 5 d = b % a # 3 Для отрицательных чисел: a = -7 b = a // 2 # -4 d = a % 2 # 1 К. Ю. Поляков, Е. А. Ерёмин, 2014 ! Как в математике! остаток 0 -7 = (-4)*2 + 1 http: //kpolyakov. spb. ru

33 Алгоритмизация и программирование, язык Python, 10 класс Сокращенная запись операций a += b 33 Алгоритмизация и программирование, язык Python, 10 класс Сокращенная запись операций 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 К. Ю. Поляков, Е. А. Ерёмин, 2014 a += 1 увеличение на 1 http: //kpolyakov. spb. ru

34 Алгоритмизация и программирование, язык Python, 10 класс Вещественные числа ! Целая и дробная 34 Алгоритмизация и программирование, язык Python, 10 класс Вещественные числа ! Целая и дробная части числа разделяются точкой! Форматы вывода: x = 123. 456 print( x ) 123. 456 print("{: 10. 2 f}". format(x)) 123. 46 всего знаков в дробной части print("{: 10. 2 g}". format(x)) 1. 2 e+02 значащих цифр К. Ю. Поляков, Е. А. Ерёмин, 2014 1, 2 102 http: //kpolyakov. spb. ru

35 Алгоритмизация и программирование, язык Python, 10 класс Вещественные числа Экспоненциальный формат: 3, 333333 35 Алгоритмизация и программирование, язык Python, 10 класс Вещественные числа Экспоненциальный формат: 3, 333333 10– 5 x = 1. /30000 print("{: e}". format(x)) 3. 333333 e-05 x = 12345678. print("{: e}". format(x)) 1. 234568 e+07 1, 234568 107 x = 123. 456 print("{: e}". format(x)) 1. 234560 e+02 print("{: 10. 2 e}". format(x)) 1. 23 e+02 всего знаков К. Ю. Поляков, Е. А. Ерёмин, 2014 в дробной части http: //kpolyakov. spb. ru

36 Алгоритмизация и программирование, язык Python, 10 класс Стандартные функции abs(x) — модуль числа 36 Алгоритмизация и программирование, язык Python, 10 класс Стандартные функции abs(x) — модуль числа int(x) — преобразование к целому числу round(x) — округление подключить import math математический модуль math. pi — число «пи» math. sqrt(x) — квадратный корень math. sin(x) — синус угла, заданного в радианах math. cos(x) — косинус угла, заданного в радианах math. exp(x) — экспонента ех math. ln(x) — натуральный логарифм math. floor(x) — округление «вниз» math. ceil(x) — округление «вверх» x = math. floor(1. 6)# 1 x = math. ceil(1. 6) # 2 К. Ю. Поляков, Е. А. Ерёмин, 2014 x = math. floor(-1. 6) #-2 x = math. ceil(-1. 6) #-1 http: //kpolyakov. spb. ru

37 Алгоритмизация и программирование, язык Python, 10 класс Случайные числа Случайно… • встретить друга 37 Алгоритмизация и программирование, язык Python, 10 класс Случайные числа Случайно… • встретить друга на улице • разбить тарелку • найти 10 рублей • выиграть в лотерею Случайный выбор: • жеребьевка на соревнованиях • выигравшие номера в лотерее Как получить случайность? К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

38 Алгоритмизация и программирование, язык Python, 10 класс Случайные числа на компьютере Электронный генератор 38 Алгоритмизация и программирование, язык Python, 10 класс Случайные числа на компьютере Электронный генератор • нужно специальное устройство • нельзя воспроизвести результаты Псевдослучайные числа – обладают свойствами случайных чисел, но каждое следующее число вычисляется по заданной формуле. Метод середины квадрата (Дж. фон Нейман) зерно 564321 458191 318458191041 в квадрате • малый период (последовательность повторяется через 106 чисел) 938992 209938992481 К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

39 Алгоритмизация и программирование, язык Python, 10 класс Линейный конгруэнтный генератор X = (a*X+b) 39 Алгоритмизация и программирование, язык Python, 10 класс Линейный конгруэнтный генератор X = (a*X+b) % c | интервал от 0 до c-1 X = (X+3) % 10 | интервал от 0 до 9 X = 0 3 6 9 2 5 8 зерно 8 1 4 7 0 зацикливание ! Важен правильный выбор параметров a, b и с! Компилятор GCC: a = 1103515245 b = 12345 c = 231 К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

40 Алгоритмизация и программирование, язык Python, 10 класс Генератор случайных чисел import random англ. 40 Алгоритмизация и программирование, язык Python, 10 класс Генератор случайных чисел import random англ. random – случайный Целые числа на отрезке [a, b]: X = random. randint(1, 6) # псевдосл. число Y = random. randint(1, 6) # уже другое! Генератор на [0, 1): X = random() # псевдослучайное число Y = random() # это уже другое число! К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

41 Алгоритмизация и программирование, язык Python, 10 класс Генератор случайных чисел from random import 41 Алгоритмизация и программирование, язык Python, 10 класс Генератор случайных чисел from random import * подключить все! англ. random – случайный Целые числа на отрезке [a, b]: X = randint(10, 60) # псевдослучайное число Y = randint(10, 60) # это уже другое число! Генератор на [0, 1): X = random(); # псевдослучайное число Y = random() # это уже другое число! К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

42 Алгоритмизация и программирование, язык Python, 10 класс Задачи «A» : Ввести с клавиатуры 42 Алгоритмизация и программирование, язык Python, 10 класс Задачи «A» : Ввести с клавиатуры три целых числа, найти их сумму, произведение и среднее арифметическое. Пример: Введите три целых числа: 5 7 8 5+7+8=20 5*7*8=280 (5+7+8)/3=6. 667 «B» : Ввести с клавиатуры координаты двух точек (A и B) на плоскости (вещественные числа). Вычислить длину отрезка AB. Пример: Введите координаты точки A: 5. 5 3. 5 Введите координаты точки B: 1. 5 2 Длина отрезка AB = 4. 272 К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

43 Алгоритмизация и программирование, язык Python, 10 класс Задачи «C» : Получить случайное трехзначное 43 Алгоритмизация и программирование, язык Python, 10 класс Задачи «C» : Получить случайное трехзначное число и вывести через запятую его отдельные цифры. Пример: Получено число 123. Его цифры 1, 2, 3. К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

44 Программирование на языке Python § 57. Ветвления К. Ю. Поляков, Е. А. Ерёмин, 44 Программирование на языке Python § 57. Ветвления К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

45 Алгоритмизация и программирование, язык Python, 10 класс Условный оператор Задача: изменить порядок действий 45 Алгоритмизация и программирование, язык Python, 10 класс Условный оператор Задача: изменить порядок действий в зависимости от выполнения некоторого условия. полная форма да нет ветвления a > b? M=a M=b вывод M отступы К. Ю. Поляков, Е. А. Ерёмин, 2014 ? Если a = b? if a > b: M = a else: M = b http: //kpolyakov. spb. ru

46 Алгоритмизация и программирование, язык Python, 10 класс Условный оператор: неполная форма M=a да 46 Алгоритмизация и программирование, язык Python, 10 класс Условный оператор: неполная форма M=a да b > a? нет M=b M = a if b > a: M = b неполная форма ветвления вывод M Решение в стиле Python: M = max(a, b) К. Ю. Поляков, Е. А. Ерёмин, 2014 M = a if a > b else b http: //kpolyakov. spb. ru

47 Алгоритмизация и программирование, язык Python, 10 класс Условный оператор ? Что делает? без 47 Алгоритмизация и программирование, язык Python, 10 класс Условный оператор ? Что делает? без переменной c? Решение в стиле Python: 6 4 4 6 2 1 ? Можно ли обойтись b a 3 if a > b: с = a a = b b = c ? 4 c a, b = b, a К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

Алгоритмизация и программирование, язык Python, 10 класс 48 Знаки отношений > < больше, меньше Алгоритмизация и программирование, язык Python, 10 класс 48 Знаки отношений > < больше, меньше >= больше или равно <= меньше или равно == равно != не равно К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

49 Алгоритмизация и программирование, язык Python, 10 класс Вложенные условные операторы Задача: в переменных 49 Алгоритмизация и программирование, язык Python, 10 класс Вложенные условные операторы Задача: в переменных a и b записаны возрасты Андрея и Бориса. Кто из них старше? Сколько вариантов? if a > b: print("Андрей старше") else: if a == b: print("Одного возраста") else: print("Борис старше") ? ? Зачем нужен? К. Ю. Поляков, Е. А. Ерёмин, 2014 вложенный условный оператор http: //kpolyakov. spb. ru

Алгоритмизация и программирование, язык Python, 10 класс 50 Каскадное ветвление if a > b: Алгоритмизация и программирование, язык Python, 10 класс 50 Каскадное ветвление if a > b: print("Андрей старше") elif a == b: print("Одного возраста") else: print("Борис старше") ! elif = else if К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

51 Алгоритмизация и программирование, язык Python, 10 класс Каскадное ветвление cost = 1500 if 51 Алгоритмизация и программирование, язык Python, 10 класс Каскадное ветвление cost = 1500 if cost < 1000: print ( "Скидок нет. " ) elif cost < 2000: первое сработавшее условие print ( "Скидка 2%. " ) elif cost < 5000: print ( "Скидка 5%. " ) else: print ( "Скидка 10%. " ) ? Что выведет? К. Ю. Поляков, Е. А. Ерёмин, 2014 Скидка 2%. http: //kpolyakov. spb. ru

52 Алгоритмизация и программирование, язык Python, 10 класс Задачи «A» : Ввести три целых 52 Алгоритмизация и программирование, язык Python, 10 класс Задачи «A» : Ввести три целых числа, найти максимальное из них. Пример: Введите три целых числа: 1 5 4 Максимальное число 5 «B» : Ввести пять целых чисел, найти максимальное из них. Пример: Введите пять целых чисел: 1 5 4 3 2 Максимальное число 5 К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

53 Алгоритмизация и программирование, язык Python, 10 класс Задачи «C» : Ввести последовательно возраст 53 Алгоритмизация и программирование, язык Python, 10 класс Задачи «C» : Ввести последовательно возраст Антона, Бориса и Виктора. Определить, кто из них старше. Пример: Возраст Антона: 15 Возраст Бориса: 17 Возраст Виктора: 16 Ответ: Борис старше всех. Пример: Возраст Антона: 17 Возраст Бориса: 17 Возраст Виктора: 16 Ответ: Антон и Борис старше Виктора. К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

54 Алгоритмизация и программирование, язык Python, 10 класс Сложные условия Задача: набор сотрудников в 54 Алгоритмизация и программирование, язык Python, 10 класс Сложные условия Задача: набор сотрудников в возрасте 25 -40 лет (включительно). сложное условие v >= 25 and v <= 40 if : print("подходит") else: print("не подходит") and «И» or «ИЛИ» not «НЕ» Приоритет : 1) отношения (<, >, <=, >=, ==, !=) 2)not ( «НЕ» ) 3)and ( «И» ) 4)or ( «ИЛИ» ) К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

55 Алгоритмизация и программирование, язык Python, 10 класс Задачи «A» : Напишите программу, которая 55 Алгоритмизация и программирование, язык Python, 10 класс Задачи «A» : Напишите программу, которая получает три числа и выводит количество одинаковых чисел в этой цепочке. Пример: Введите три числа: 5 5 5 Все числа одинаковые. Пример: Введите три числа: 5 7 5 Два числа одинаковые. Пример: Введите три числа: 5 7 8 Нет одинаковых чисел. К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

56 Алгоритмизация и программирование, язык Python, 10 класс Задачи «B» : Напишите программу, которая 56 Алгоритмизация и программирование, язык Python, 10 класс Задачи «B» : Напишите программу, которая получает номер месяца и выводит соответствующее ему время года или сообщение об ошибке. Пример: Введите номер месяца: 5 Весна. Пример: Введите номер месяца: 15 Неверный номер месяца. К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

57 Алгоритмизация и программирование, язык Python, 10 класс Задачи «C» : Напишите программу, которая 57 Алгоритмизация и программирование, язык Python, 10 класс Задачи «C» : Напишите программу, которая получает возраст человека (целое число, не превышающее 120) и выводит этот возраст со словом «год» , «года» или «лет» . Например, « 21 год» , « 22 года» , « 25 лет» . Пример: Введите возраст: 18 Вам 18 лет. Пример: Введите возраст: 21 Вам 21 год. Пример: Введите возраст: 22 Вам 22 года. К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

Алгоритмизация и программирование, язык Python, 10 класс 58 Задачи «A» : Напишите условие, которое Алгоритмизация и программирование, язык Python, 10 класс 58 Задачи «A» : Напишите условие, которое определяет заштрихованную область. «B» : Напишите условие, которое определяет заштрихованную область. К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

Алгоритмизация и программирование, язык Python, 10 класс 59 Задачи «C» : Напишите условие, которое Алгоритмизация и программирование, язык Python, 10 класс 59 Задачи «C» : Напишите условие, которое определяет заштрихованную область. К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

60 Программирование на языке Python § 58. Циклические алгоритмы К. Ю. Поляков, Е. А. 60 Программирование на языке Python § 58. Циклические алгоритмы К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

61 Алгоритмизация и программирование, язык Python, 10 класс Что такое цикл? Цикл – это 61 Алгоритмизация и программирование, язык Python, 10 класс Что такое цикл? Цикл – это многократное выполнение одинаковых действий. Два вида циклов: • цикл с известным числом шагов (сделать 10 раз) • цикл с неизвестным числом шагов (делать, пока не надоест) Задача. Вывести на экран 10 раз слово «Привет» . ? Можно ли решить известными методами? К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

Алгоритмизация и программирование, язык Python, 10 класс 62 Повторения в программе print( Алгоритмизация и программирование, язык Python, 10 класс 62 Повторения в программе print("Привет“) print("Привет"). . . print("Привет") ? Что плохо? К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

63 Алгоритмизация и программирование, язык Python, 10 класс Блок-схема цикла начало да конец нет 63 Алгоритмизация и программирование, язык Python, 10 класс Блок-схема цикла начало да конец нет тело цикла К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

64 Алгоритмизация и программирование, язык Python, 10 класс Как организовать цикл? счётчик = 0 64 Алгоритмизация и программирование, язык Python, 10 класс Как организовать цикл? счётчик = 0 пока счётчик < 10: print("Привет“) увеличить счётчик на 1 счётчик = 10 пока счётчик > 0: print("Привет") уменьшить счётчик на 1 результат операции автоматически сравнивается с нулём! ? Какой способ удобнее для процессора? К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

65 Алгоритмизация и программирование, язык Python, 10 класс Цикл с условием Задача. Определить количество 65 Алгоритмизация и программирование, язык Python, 10 класс Цикл с условием Задача. Определить количество цифр в десятичной записи целого положительного числа, записанного в переменную n. n счётчик = 0 пока n > 0: 1234 0 отсечь последнюю цифру n 123 1 увеличить счётчик на 1 12 2 ? Как отсечь последнюю цифру? n = n // 10 1 0 3 4 ? Как увеличить счётчик на 1? счётчик = счётчик + 1 К. Ю. Поляков, Е. А. Ерёмин, 2014 счётчик += 1 http: //kpolyakov. spb. ru

66 Алгоритмизация и программирование, язык Python, 10 класс Цикл с условием начальное значение счётчика 66 Алгоритмизация и программирование, язык Python, 10 класс Цикл с условием начальное значение счётчика заголовок цикла условие продолжения count = 0 n > 0 while : n = n // 10 тело цикла count += 1 ! Цикл с предусловием – проверка на входе в цикл! К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

Алгоритмизация и программирование, язык Python, 10 класс 67 Цикл с условием При известном количестве Алгоритмизация и программирование, язык Python, 10 класс 67 Цикл с условием При известном количестве шагов: k = 0 while k < 10: print ( "привет" ) k += 1 Зацикливание: k = 0 while k < 10: print ( "привет" ) К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

68 Алгоритмизация и программирование, язык Python, 10 класс Сколько раз выполняется цикл? a = 68 Алгоритмизация и программирование, язык Python, 10 класс Сколько раз выполняется цикл? 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 К. Ю. Поляков, Е. А. Ерёмин, 2014 зацикливание http: //kpolyakov. spb. ru

69 Алгоритмизация и программирование, язык Python, 10 класс Цикл с постусловием Задача. Обеспечить ввод 69 Алгоритмизация и программирование, язык Python, 10 класс Цикл с постусловием Задача. Обеспечить ввод положительного числа в переменную n. бесконечный цикл while True: print ( "Введите положительное число: " ) n = int ( input() ) if n > 0: break тело цикла условие прервать выхода цикл • при входе в цикл условие не проверяется • цикл всегда выполняется хотя бы один раз К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

Алгоритмизация и программирование, язык Python, 10 класс 70 Задачи «A» : Напишите программу, которая Алгоритмизация и программирование, язык Python, 10 класс 70 Задачи «A» : Напишите программу, которая получает два целых числа A и B (0 < A < B) и выводит квадраты всех натуральных чисел в интервале от A до B. Пример: Введите два целых числа: 10 12 10*10=100 11*11=121 12*12=144 «B» : Напишите программу, которая получает два целых числа и находит их произведение, не используя операцию умножения. Учтите, что числа могут быть отрицательными. Пример: Введите два числа: 10 -15 10*(-15)=-150 К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

71 Алгоритмизация и программирование, язык Python, 10 класс Задачи «C» : Ввести натуральное число 71 Алгоритмизация и программирование, язык Python, 10 класс Задачи «C» : Ввести натуральное число N и вычислить сумму всех чисел Фибоначчи, меньших N. Предусмотрите защиту от ввода отрицательного числа N. Пример: Введите число N: 10000 Сумма 17709 К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

72 Алгоритмизация и программирование, язык Python, 10 класс Задачи-2 «A» : Ввести натуральное число 72 Алгоритмизация и программирование, язык Python, 10 класс Задачи-2 «A» : Ввести натуральное число и найти сумму его цифр. Пример: Введите натуральное число: 12345 Сумма цифр 15. «B» : Ввести натуральное число и определить, верно ли, что в его записи есть две одинаковые цифры, стоящие рядом. Пример: Введите натуральное число: 12342 Нет. Пример: Введите натуральное число: 12245 Да. К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

73 Алгоритмизация и программирование, язык Python, 10 класс Задачи-2 «C» : Ввести натуральное число 73 Алгоритмизация и программирование, язык Python, 10 класс Задачи-2 «C» : Ввести натуральное число и определить, верно ли, что в его записи есть две одинаковые цифры (не обязательно стоящие рядом). Пример: Введите натуральное число: 12342 Да. Пример: Введите натуральное число: 12345 Нет. К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

74 Алгоритмизация и программирование, язык Python, 10 класс Цикл с переменной Задача. Вывести 10 74 Алгоритмизация и программирование, язык Python, 10 класс Цикл с переменной Задача. Вывести 10 раз слово «Привет!» . ? Можно ли сделать с циклом «пока» ? i=0 while : i < 10 print("Привет!") i += 1 Цикл с переменной: for : i in range(10) print("Привет!") в диапазоне [0, 10) ! Не включая 10! range(10) 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

75 Алгоритмизация и программирование, язык Python, 10 класс Цикл с переменной Задача. Вывести все 75 Алгоритмизация и программирование, язык Python, 10 класс Цикл с переменной Задача. Вывести все степени двойки от 21 до 210. ? Как сделать с циклом «пока» ? k=1 while : k <= 10 print ( 2**k ) k += 1 Цикл с переменной: for : k in range(1, 11) print ( 2**k ) в диапазоне [1, 11) ! Не включая 11! range(1, 11) 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

76 Алгоритмизация и программирование, язык Python, 10 класс Цикл с переменной: другой шаг 10, 76 Алгоритмизация и программирование, язык Python, 10 класс Цикл с переменной: другой шаг 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 шаг for : k in range(10, 0, -1) print ( k**2 ) ? Что получится? 1, 3, 5, 7, 9 for : k in range(1, 11, 2) print ( k**2 ) К. Ю. Поляков, Е. А. Ерёмин, 2014 1 9 25 49 81 100 81 64 49 36 25 16 9 4 1 http: //kpolyakov. spb. ru

77 Алгоритмизация и программирование, язык Python, 10 класс Сколько раз выполняется цикл? a=1 for 77 Алгоритмизация и программирование, язык Python, 10 класс Сколько раз выполняется цикл? a=1 for i in range( 3): a += 1 a= 4 a=1 for i in range( 3, 1): a += 1 a=1 for i in range( 1, 3, -1): a += 1 a=1 for i in range( 3, 1, -1): a += 1 a= 3 К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

78 Алгоритмизация и программирование, язык Python, 10 класс Задачи «A» : Найдите все пятизначные 78 Алгоритмизация и программирование, язык Python, 10 класс Задачи «A» : Найдите все пятизначные числа, которые при делении на 133 дают в остатке 125, а при делении на 134 дают в остатке 111. «B» : Натуральное число называется числом Армстронга, если сумма цифр числа, возведенных в N-ную степень (где N – количество цифр в числе) равна самому числу. Например, 153 = 13 + 53 + 33. Найдите все трёхзначные Армстронга. К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

79 Алгоритмизация и программирование, язык Python, 10 класс Задачи «С» : Натуральное число называется 79 Алгоритмизация и программирование, язык Python, 10 класс Задачи «С» : Натуральное число называется автоморфным, если оно равно последним цифрам своего квадрата. Например, 252 = 625. Напишите программу, которая получает натуральное число N и выводит на экран все автоморфные числа, не превосходящие N. Пример: Введите N: 1000 1*1=1 5*5=25 6*6=36 25*25=625 76*76=5776 К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

80 Алгоритмизация и программирование, язык Python, 10 класс Вложенные циклы Задача. Вывести все простые 80 Алгоритмизация и программирование, язык Python, 10 класс Вложенные циклы Задача. Вывести все простые числа в диапазоне от 2 до 1000. сделать для n от 2 до 1000 если число n простое то число n простое вывод n нет делителей [2. . n-1]: проверка в цикле! ? Что значит «простое число» ? for n in range(2, 1001): if число n простое: print( n ) К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

81 Алгоритмизация и программирование, язык Python, 10 класс Вложенные циклы for n in range(2, 81 Алгоритмизация и программирование, язык Python, 10 класс Вложенные циклы for n in range(2, 1001): count = 0 for k in range(2, n): if n % k == 0: count += 1 if count == 0: print( n ) К. Ю. Поляков, Е. А. Ерёмин, 2014 вложенный цикл http: //kpolyakov. spb. ru

82 Алгоритмизация и программирование, язык Python, 10 класс Вложенные циклы for i in range(1, 82 Алгоритмизация и программирование, язык Python, 10 класс Вложенные циклы for i in range(1, 4): for k in range(1, 4): print( i, k ) ? Как меняются переменные? ! Переменная внутреннего цикла изменяется быстрее! К. Ю. Поляков, Е. А. Ерёмин, 2014 1 1 1 2 1 3 2 1 2 2 2 3 3 1 3 2 3 3 http: //kpolyakov. spb. ru

83 Алгоритмизация и программирование, язык Python, 10 класс Вложенные циклы for i in range(1, 83 Алгоритмизация и программирование, язык Python, 10 класс Вложенные циклы for i in range(1, 5): for k in range(1, i+1): print( i, k ) ? Как меняются переменные? ! Переменная внутреннего цикла изменяется быстрее! К. Ю. Поляков, Е. А. Ерёмин, 2014 1 1 2 2 3 1 3 2 3 3 4 1 4 2 4 3 4 4 http: //kpolyakov. spb. ru

84 Алгоритмизация и программирование, язык Python, 10 класс Поиск простых чисел – как улучшить? 84 Алгоритмизация и программирование, язык Python, 10 класс Поиск простых чисел – как улучшить? while k <= math. sqrt(n): … ? Что плохо? count = 0 k = 2 Как ещё улучшить? k*k <= n while : if n % k == 0: выйти из цикла count += 1 while k*k <= n: k += 1 if n % k == 0: break k += 1 если вышли if k*k > n: по условию print ( n ) ? К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

85 Алгоритмизация и программирование, язык Python, 10 класс Задачи «A» : Напишите программу, которая 85 Алгоритмизация и программирование, язык Python, 10 класс Задачи «A» : Напишите программу, которая получает натуральные числа A и B (A

86 Алгоритмизация и программирование, язык Python, 10 класс Задачи «C» : Ввести натуральное число 86 Алгоритмизация и программирование, язык Python, 10 класс Задачи «C» : Ввести натуральное число N и вывести все натуральные числа, не превосходящие N и делящиеся на каждую из своих цифр. Пример: Введите N: 15 1 2 3 4 5 6 7 8 9 11 12 15 К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

87 Программирование на языке Python § 59. Процедуры К. Ю. Поляков, Е. А. Ерёмин, 87 Программирование на языке Python § 59. Процедуры К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

88 Алгоритмизация и программирование, язык Python, 10 класс Зачем нужны процедуры? print ( 88 Алгоритмизация и программирование, язык Python, 10 класс Зачем нужны процедуры? print ( "Ошибка программы" ) много раз! Процедура: define определить def Error(): print( "Ошибка программы" ) n = int ( input() ) if n < 0: вызов Error() процедуры К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

89 Алгоритмизация и программирование, язык Python, 10 класс Что такое процедура? Процедура – вспомогательный 89 Алгоритмизация и программирование, язык Python, 10 класс Что такое процедура? Процедура – вспомогательный алгоритм, который выполняет некоторые действия. • текст (расшифровка) процедуры записывается до её вызова в основной программе • в программе может быть много процедур • чтобы процедура заработала, нужно вызвать её по имени из основной программы или из другой процедуры К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

90 Алгоритмизация и программирование, язык Python, 10 класс Процедура с параметрами Задача. Вывести на 90 Алгоритмизация и программирование, язык Python, 10 класс Процедура с параметрами Задача. Вывести на экран запись целого числа (0. . 255) в 8 -битном двоичном коде. много раз! Алгоритм: 178 101100102 ? Как вывести первую цифру? 7 6 5 4 3 2 1 0 n: = 1 0 1 1 0 0 1 02 n // 128 разряды n % 128 ? Как вывести вторую цифру? К. Ю. Поляков, Е. А. Ерёмин, 2014 n 1 // 64 http: //kpolyakov. spb. ru

91 Алгоритмизация и программирование, язык Python, 10 класс Процедура с параметрами Задача. Вывести на 91 Алгоритмизация и программирование, язык Python, 10 класс Процедура с параметрами Задача. Вывести на экран запись целого числа (0. . 255) в 8 -битном двоичном коде. Решение: n k вывод k = 128 178 128 1 while k > 0: 50 64 0 print ( n // k, end = "" ) 50 32 1 n = n % k 18 16 1 k = k // 2 2 8 0 2 4 0 178 10110010 2 2 1 0 Результат зависит 0 0 от n! ! К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

92 Алгоритмизация и программирование, язык Python, 10 класс Процедура с параметрами Параметры – данные, 92 Алгоритмизация и программирование, язык Python, 10 класс Процедура с параметрами Параметры – данные, изменяющие работу процедуры. def print. Bin( n ): k = 128 локальная while k > 0: переменная print ( n // k, end = "" ) n = n % k; k = k // 2 print. Bin ( 99 ) Несколько параметров: значение параметра (аргумент) def print. Sred( a, b ): print ( (a + b)/2 ) К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

93 Алгоритмизация и программирование, язык Python, 10 класс Локальные и глобальные переменные глобальная переменная 93 Алгоритмизация и программирование, язык Python, 10 класс Локальные и глобальные переменные глобальная переменная локальная переменная a = 5 def qq(): a = 1 print ( a ) 1 qq() print ( a ) 5 a = 5 5 def qq(): print ( a ) qq() К. Ю. Поляков, Е. А. Ерёмин, 2014 a = 5 def qq(): global a a = 1 qq() print ( a ) работаем с глобальной переменной 1 http: //kpolyakov. spb. ru

94 Алгоритмизация и программирование, язык Python, 10 класс Неправильная процедура x = 5; y 94 Алгоритмизация и программирование, язык Python, 10 класс Неправильная процедура x = 5; y = 10 def sum(): print ( x+y ) sum() ? Что плохо? def sum(): print ( x+y ) 1) процедура связана с глобальными переменными, нельзя перенести в другую программу 2) печатает только сумму x и y, нельзя напечатать сумму других переменных или сумму x*y и 3 x ? Как исправить? К. Ю. Поляков, Е. А. Ерёмин, 2014 передавать данные через параметры http: //kpolyakov. spb. ru

95 Алгоритмизация и программирование, язык Python, 10 класс Правильная процедура Глобальные: x y 5 95 Алгоритмизация и программирование, язык Python, 10 класс Правильная процедура Глобальные: x y 5 10 z w 12 3 def sum(a, b): print ( a+b ) x = 5; y = 10 sum( x, y ) z=17; w=3 sum( z, w ) sum( z+x, y*w ) Локальные: a b 22 17 5 30 10 3 15 20 52 1) процедура не зависит от глобальных переменных 2) легко перенести в другую программу 3) печатает только сумму любых выражений К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

96 Алгоритмизация и программирование, язык Python, 10 класс Задачи «A» : Напишите процедуру, которая 96 Алгоритмизация и программирование, язык Python, 10 класс Задачи «A» : Напишите процедуру, которая принимает параметр – натуральное число N – и выводит на экран линию из N символов '–'. Пример: Введите N: 10 ----- «B» : Напишите процедуру, которая выводит на экран в столбик все цифры переданного ей числа, начиная с первой. Пример: Введите натуральное число: 1234 1 2 3 4 К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

97 Алгоритмизация и программирование, язык Python, 10 класс Задачи «C» : Напишите процедуру, которая 97 Алгоритмизация и программирование, язык Python, 10 класс Задачи «C» : Напишите процедуру, которая выводит на экран запись переданного ей числа в римской системе счисления. Пример: Введите натуральное число: 2013 MMXIII К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

98 Программирование на языке Python § 60. Функции К. Ю. Поляков, Е. А. Ерёмин, 98 Программирование на языке Python § 60. Функции К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

99 Алгоритмизация и программирование, язык Python, 10 класс Что такое функция? Функция – это 99 Алгоритмизация и программирование, язык Python, 10 класс Что такое функция? Функция – это вспомогательный алгоритм, который возвращает значение-результат (число, символ или объект другого типа). Задача. Написать функцию, которая вычисляет сумму цифр числа. Алгоритм: сумма = 0 пока n != 0: сумма += n % 10 n = n // 10 К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

Алгоритмизация и программирование, язык Python, 10 класс 100 Сумма цифр числа def sum. Digits( Алгоритмизация и программирование, язык Python, 10 класс 100 Сумма цифр числа def sum. Digits( n ): sum = 0 while n!= 0: sum += n % 10 передача n = n // 10 результата return sum # основная программа print ( sum. Digits(12345) ) К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

101 Алгоритмизация и программирование, язык Python, 10 класс Использование функций x = 2*sum. Digits(n+5) 101 Алгоритмизация и программирование, язык Python, 10 класс Использование функций x = 2*sum. Digits(n+5) z = sum. Digits(k) + sum. Digits(m) if sum. Digits(n) % 2 == 0: print ( "Сумма цифр чётная" ) print ( "Она равна", sum. Digits(n) ) ! Функция, возвращающая целое число, может использоваться везде, где и целая величина! Одна функция вызывает другую: def middle ( a, b, c ): mi = min ( a, b, c ) ma = max ( a, b, c ) return a + b + c - mi - ma К. Ю. Поляков, Е. А. Ерёмин, 2014 вызываются min и max ? Что вычисляет? http: //kpolyakov. spb. ru

102 Алгоритмизация и программирование, язык Python, 10 класс Задачи «A» : Напишите функцию, которая 102 Алгоритмизация и программирование, язык Python, 10 класс Задачи «A» : Напишите функцию, которая находит наибольший общий делитель двух натуральных чисел. Пример: Введите два натуральных числа: 7006652 112307574 НОД(7006652, 112307574) = 1234. «B» : Напишите функцию, которая определяет сумму цифр переданного ей числа. Пример: Введите натуральное число: 123 Сумма цифр числа 123 равна 6. К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

103 Алгоритмизация и программирование, язык Python, 10 класс Задачи «C» : Напишите функцию, которая 103 Алгоритмизация и программирование, язык Python, 10 класс Задачи «C» : Напишите функцию, которая «переворачивает» число, то есть возвращает число, в котором цифры стоят в обратном порядке. Пример: Введите натуральное число: 1234 После переворота: 4321. К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

104 Алгоритмизация и программирование, язык Python, 10 класс Как вернуть несколько значений? def divmod 104 Алгоритмизация и программирование, язык Python, 10 класс Как вернуть несколько значений? def divmod ( x, y ): d = x // y d – частное, m = x % y m – остаток return d, m a, b = divmod ( 7, 3 ) print ( a, b ) # 2 1 q = divmod ( 7, 3 ) print ( q ) # (2, 1) (2, кортеж – набор элементов К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

105 Алгоритмизация и программирование, язык Python, 10 класс Задачи «A» : Напишите функцию, которая 105 Алгоритмизация и программирование, язык Python, 10 класс Задачи «A» : Напишите функцию, которая переставляет три переданные ей числа в порядке возрастания. Пример: Введите три натуральных числа: 10 15 5 5 10 15 «B» : Напишите функцию, которая сокращает дробь вида M/N. Пример: Введите числитель и знаменатель дроби: 25 15 После сокращения: 5/3 К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

106 Алгоритмизация и программирование, язык Python, 10 класс Задачи «C» : Напишите функцию, которая 106 Алгоритмизация и программирование, язык Python, 10 класс Задачи «C» : Напишите функцию, которая вычисляет наибольший общий делитель и наименьшее общее кратное двух натуральных чисел. Пример: Введите два натуральных числа: 10 15 НОД(10, 15)=5 НОК(10, 15)=30 К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

107 Алгоритмизация и программирование, язык Python, 10 класс Логические функции Задача. Найти все простые 107 Алгоритмизация и программирование, язык Python, 10 класс Логические функции Задача. Найти все простые числа в диапазоне от 2 до 100. for i in range(2, 1001): is. Prime(i) if i - простое : i - простое print ( i ) функция, возвращающая логическое значение (True/False) К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

108 Алгоритмизация и программирование, язык Python, 10 класс Функция: простое число или нет? ? 108 Алгоритмизация и программирование, язык Python, 10 класс Функция: простое число или нет? ? Какой алгоритм? def is. Prime ( n ): k = 2 while k*k <= n and n % k != 0: k += 1 if k*k > n: return (k*k > n) return True else: return False К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

109 Алгоритмизация и программирование, язык Python, 10 класс Логические функции: использование ! Функция, возвращающая 109 Алгоритмизация и программирование, язык Python, 10 класс Логические функции: использование ! Функция, возвращающая логическое значение, может использоваться везде, где и логическая величина! n = int ( input() ) while is. Prime(n): print ( n, "– простое число" ) n = int ( input() ) К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

110 Алгоритмизация и программирование, язык Python, 10 класс Задачи «A» : Напишите логическую функцию, 110 Алгоритмизация и программирование, язык Python, 10 класс Задачи «A» : Напишите логическую функцию, которая определяет, является ли переданное ей число совершенным, то есть, равно ли оно сумме своих делителей, меньших его самого. Пример: Введите натуральное число: 28 Число 28 совершенное. Пример: Введите натуральное число: 29 Число 29 не совершенное. К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

111 Алгоритмизация и программирование, язык Python, 10 класс Задачи «B» : Напишите логическую функцию, 111 Алгоритмизация и программирование, язык Python, 10 класс Задачи «B» : Напишите логическую функцию, которая определяет, являются ли два переданные ей числа взаимно простыми, то есть, не имеющими общих делителей, кроме 1. Пример: Введите два натуральных числа: 28 15 Числа 28 и 15 взаимно простые. Пример: Введите два натуральных числа: 28 16 Числа 28 и 16 не взаимно простые. К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

112 Алгоритмизация и программирование, язык Python, 10 класс Задачи «С» : Простое число называется 112 Алгоритмизация и программирование, язык Python, 10 класс Задачи «С» : Простое число называется гиперпростым, если любое число, получающееся из него откидыванием нескольких цифр, тоже является простым. Например, число 733 – гиперпростое, так как и оно само, и числа 73 и 7 – простые. Напишите логическую функцию, которая определяет, верно ли, что переданное ей число – гиперпростое. Используйте уже готовую функцию is. Prime, которая приведена в учебнике. Пример: Введите натуральное число: 733 Число 733 гиперпростое. Пример: Введите натуральное число: 19 Число 19 не гиперпростое. К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

113 Программирование на языке Python § 61. Рекурсия К. Ю. Поляков, Е. А. Ерёмин, 113 Программирование на языке Python § 61. Рекурсия К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

114 Алгоритмизация и программирование, язык Python, 10 класс Что такое рекурсия? У попа была 114 Алгоритмизация и программирование, язык Python, 10 класс Что такое рекурсия? У попа была собака, он её любил, Она съела кусок мяса, он её убил, В землю закопал, Надпись написал: … К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

115 Алгоритмизация и программирование, язык Python, 10 класс Что такое рекурсия? Натуральные числа: • 115 Алгоритмизация и программирование, язык Python, 10 класс Что такое рекурсия? Натуральные числа: • 1 – натуральное число • если – натуральное число, то – натуральное число индуктивное определение Рекурсия — это способ определения множества объектов через само это множество на основе заданных простых базовых случаев. Числа Фибоначчи: • • при 1, 1, 2, 3, 5, 8, 13, 21, 34, … К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

116 Алгоритмизация и программирование, язык Python, 10 класс Фракталы – геометрические фигуры, обладающие самоподобием. 116 Алгоритмизация и программирование, язык Python, 10 класс Фракталы – геометрические фигуры, обладающие самоподобием. Треугольник Серпинского: К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

117 Алгоритмизация и программирование, язык Python, 10 класс Ханойские башни 1 2 3 • 117 Алгоритмизация и программирование, язык Python, 10 класс Ханойские башни 1 2 3 • за один раз переносится один диск • класть только меньший диск на больший • третий стержень вспомогательный перенести (n, 1, 3) перенести (n-1, 1, 2) 1 -> 3 перенести (n-1, 2, 3) К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

118 Алгоритмизация и программирование, язык Python, 10 класс Ханойские башни – процедура сколько откуда 118 Алгоритмизация и программирование, язык Python, 10 класс Ханойские башни – процедура сколько откуда номер def Hanoi ( n, k, m ): вспомогательного p = 6 - k - m рекурсия стержня (1+2+3=6!) Hanoi ( n-1, k, p ) print ( k, "->", m ) Hanoi ( n-1, p, m ) рекурсия ? Что плохо? ! Рекурсия никогда не остановится! К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

119 Алгоритмизация и программирование, язык Python, 10 класс Ханойские башни – процедура Рекурсивная процедура 119 Алгоритмизация и программирование, язык Python, 10 класс Ханойские башни – процедура Рекурсивная процедура (функция) — это процедура (функция), которая вызывает сама себя напрямую или через другие процедуры и функции. def Hanoi ( n, k, m ): if n == 0: return p = 6 - k - m Hanoi ( n-1, k, p ) print ( k, "->", m ) Hanoi ( n-1, p, m ) условие выхода из рекурсии # основная программа Hanoi( 4, 1, 3 ) К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

120 Алгоритмизация и программирование, язык Python, 10 класс Вывод двоичного кода числа условие выхода 120 Алгоритмизация и программирование, язык Python, 10 класс Вывод двоичного кода числа условие выхода из рекурсии def print. Bin ( n ): if n == 0: return print. Bin ( n // 2 ) print ( n % 2, end = "" ) напечатать все цифры, кроме последней вывести последнюю цифру print. Bin( 0 ) print. Bin( 1 ) print. Bin( 2 ) print. Bin( 4 ) print. Bin( 9 ) ) print. Bin( 19 ? Как без рекурсии? 10011 К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

Алгоритмизация и программирование, язык Python, 10 класс 121 Вычисление суммы цифр числа def sum. Алгоритмизация и программирование, язык Python, 10 класс 121 Вычисление суммы цифр числа def sum. Dig ( n ): sum = n % 10 последняя цифра if n >= 10: sum += sum. Dig ( n // 10 ) return sum рекурсивный вызов ? Где условие окончания рекурсии? sum. Dig( 1234 ) 4 + sum. Dig( 123 ) 4 + 3 + sum. Dig( 12 ) 4 + 3 + 2 + sum. Dig( 1 ) 4 + 3 + 2 + 1 К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

122 Алгоритмизация и программирование, язык Python, 10 класс Алгоритм Евклида. Чтобы найти НОД двух 122 Алгоритмизация и программирование, язык Python, 10 класс Алгоритм Евклида. Чтобы найти НОД двух натуральных чисел, нужно вычитать из большего числа меньшее до тех пор, пока меньшее не станет равно нулю. Тогда второе число и есть НОД исходных чисел. def NOD ( a, b ): if a == 0 or b == 0: return a + b; условие окончания рекурсии if a > b: return NOD( a - b, b ) else: return NOD( a, b – a ) рекурсивные вызовы К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

123 Алгоритмизация и программирование, язык Python, 10 класс Задачи «A» : Напишите рекурсивную функцию, 123 Алгоритмизация и программирование, язык Python, 10 класс Задачи «A» : Напишите рекурсивную функцию, которая вычисляет НОД двух натуральных чисел, используя модифицированный алгоритм Евклида. Пример: Введите два натуральных числа: 7006652 112307574 НОД(7006652, 112307574)=1234. «B» : Напишите рекурсивную функцию, которая раскладывает число на простые сомножители. Пример: Введите натуральное число: 378 = 2*3*3*3*7 К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

Алгоритмизация и программирование, язык Python, 10 класс 124 Задачи «C» : Дано натуральное число Алгоритмизация и программирование, язык Python, 10 класс 124 Задачи «C» : Дано натуральное число N. Требуется получить и вывести на экран количество всех возможных различных способов представления этого числа в виде суммы натуральных чисел (то есть, 1 + 2 и 2 + 1 – это один и тот же способ разложения числа 3). Решите задачу с помощью рекурсивной процедуры. Пример: Введите натуральное число: 4 Количество разложений: 4. К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

125 Алгоритмизация и программирование, язык Python, 10 класс Как работает рекурсия? Факториал: def Fact(N): 125 Алгоритмизация и программирование, язык Python, 10 класс Как работает рекурсия? Факториал: def Fact(N): print ( "->", N ) if N <= 1: F = 1 else: F = N * Fact ( N – 1 ) print ( "<-", N ) return F -> N = 3 -> N = 2 -> N = 1 <- N = 1 <- N = 2 <- N = 3 ? Как сохранить состояние функции перед рекурсивным вызовом? К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

126 Алгоритмизация и программирование, язык Python, 10 класс Стек – область памяти, в которой 126 Алгоритмизация и программирование, язык Python, 10 класс Стек – область памяти, в которой хранятся локальные переменные и адреса возврата. SP значение параметра адрес возврата SP Fact(3) 3 A локальная переменная F SP Fact(2) 3 A F 2 AF F SP Fact(1) 3 A К. Ю. Поляков, Е. А. Ерёмин, 2014 F 2 AF F 1 AF F http: //kpolyakov. spb. ru

127 Алгоритмизация и программирование, язык Python, 10 класс Рекурсия – «за» и «против» • 127 Алгоритмизация и программирование, язык Python, 10 класс Рекурсия – «за» и «против» • с каждым новым вызовом расходуется память в стеке (возможно переполнение стека) • затраты на выполнение служебных операций при рекурсивном вызове § программа становится более короткой и понятной § возможно переполнение стека § замедление работы ! Любой рекурсивный алгоритм можно заменить нерекурсивным! def Fact ( n ): f = 1 for i in range(2, n+1): итерационный f *= i алгоритм return f К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

128 Алгоритмизация и программирование, язык Python, 10 класс Конец фильма ПОЛЯКОВ Константин Юрьевич д. 128 Алгоритмизация и программирование, язык Python, 10 класс Конец фильма ПОЛЯКОВ Константин Юрьевич д. т. н. , учитель информатики ГБОУ СОШ № 163, г. Санкт-Петербург kpolyakov@mail. ru ЕРЕМИН Евгений Александрович к. ф. -м. н. , доцент кафедры мультимедийной дидактики и ИТО ПГГПУ, г. Пермь eremin@pspu. ac. ru К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru

Алгоритмизация и программирование, язык Python, 10 класс 129 Источники иллюстраций 1. 2. 3. 4. Алгоритмизация и программирование, язык Python, 10 класс 129 Источники иллюстраций 1. 2. 3. 4. 5. 6. 7. 8. old-moneta. ru www. random. org www. allruletka. ru www. lotterypros. com logos. cs. uic. edu ru. wikipedia. org иллюстрации художников издательства «Бином» авторские материалы К. Ю. Поляков, Е. А. Ерёмин, 2014 http: //kpolyakov. spb. ru