l1.ppt
- Количество слайдов: 140
Лаптева Наталия Николаевна natalia. n. lapteva@gmail. com http: //psm 11 nir. blogspot. ru НИС + НИР Лекция 1 Python. Интерпретатор. Переменные и значения. Ветвления. Циклы.
Этапы решения задачи • постановка задачи; • формализация задачи или выбор метода решения; • Поиск оптимального решения (построение/выбор и анализ алгоритма); • составление программы на языке программирования; • отладка и тестирование программы; • исполнение программы и анализ результатов.
• Языки программирования – формальные языки, разработанные для записи выражений. • Отличия от естественных языков – Аргументы из множества, интерпретируемого исполнителем – Расположенные в строго определенном порядке – Однозначность – Краткость – Буквальность
Языки • По типу трансляции – Ассемблеры (1: 1) – Компиляторы (src -> машинный код, 1: n) – Интерпретаторы (построчное выполнение) Трансляция – перевод программы, написанной на языке программирования в исполняемый эквивалент
Языки • • • Ассемблеры Процедурные языки Объектно-ориентированные языки Функциональные языки Логические языки Сценарные и скриптовые языки
• Компиляция – Анализ, генерация промежуточного кода, оптимизация, генерация машинного кода • Интерпретация – Исполнение на виртуальной машине, работающей с командами высокого уровня – Диалоговый режим – Построчное выполнение
Python • Гвидо ван Россум • 1990/1991 • Язык высокого уровня • Интерпретируемый язык с динамической семантикой, поддерживающий как процедурную, так и объектноориентированную парадигмы
Python • Интерпретируемый язык • Динамическая типизация • Автоматическое управление памятью • Простой и читаемый синтаксис • Высокоуровневые структуры данных • Высокая скорость разработки
Python • Язык общего назначения – Сценарии сборки – Графические приложения – Игры – Веб-сайты – Скрипты текстовой обработки – Youtube, Dropbox, EVE, Instagram, Bit. Torrent • Гибкий и расширяемый язык
Python • Модули и библиотеки • Py. Pi – репозиторий модулей для питона. • Обращайте внимание на версию. Не очень хорошая совместимость «вниз» • Готовые решения и фреймворки (Django) • py 2 exe
Литература • Марк Лутц – Изучаем Python (4 -е издание) • Марк Лутц – Программируем на Python (4 -е издание) Том I / Том II (992 страницы каждый) • Бизли Д. – Python. Подробный справочник (4 -е издание) (858 страниц)
Python • Скрипт • Режим интерпретатора • IDE – IDLE – Py. Charm – Py. Scripter
Режимы работы интерпретатора • Режим диалога с пользователем • Исполнение скриптового файла
Режим диалога с пользователем $ python Python 2. 4. 1 (#1, Apr 29 2005, 00: 28: 56) Type "help", "copyright", "credits" or "license" for more information. >>> print 1 + 1 2
Режим диалога с пользователем • С «>>>» начинается ввод команды • … - знак, что интерпретатор ожидает продолжения ввода команды • Результат – сразу • Вывод значений выражений • Выход Ctrl+Z
Файл скрипта • Расширение «. py» – psm 11. py • Исполняется интерпретатором Python – Через параметр командной строки – Через IDE
IDLE • /lib/idle. bat
+/ • Режим диалога – Удобен для отладки – Моментальное исполнение • Сохранение скрипта – Удобство правок и распространения – Сохранение для дальнейшего использования
Модель черного ящика входные данные преобразование в системе выходные данные
Этапы • Input: получить данные (ввод с клавиатуры, из файла, с другого устройства ввода) • Вычисления: выполнить обработку данных, проверить необходимые условия, подготовить output • Output: вывести данные пользователю (на экран, в файл или на другое устройство вывода)
Ошибки Человеческий фактор ведет к ошибкам • Синтаксические ошибки • Ошибки исполнения • Семантические ошибки
Синтаксические ошибки • Syntax errors • Программа выполнима только при корректном синтаксисе • В отличие от естественных языков – важна точность и однозначность команд исполнителю
Ошибки исполнения • Runtime errors • Возникает только при выполнении программы • Исключение (exception) • Требуют отдельной обработки
Семантические ошибки • Semantic errors • Программа запускается и выполняется корректно • но не делает того, что требуется) • а делает что-то другое.
Поиск ошибок • Детективная и экспериментаторская работа! • Поэтапная разработка с отладкой каждого этапа • На каждом шаге – у вас работающая программа, в которую далее вносятся правки Linus Torvalds: According to Larry Greenfield, “One of Linus’s earlier projects was a program that would switch between printing AAAA and BBBB. This later evolved to Linux. ” (The Linux Users’ Guide Beta Version 1)
“Hello, World!” на Pascal PRORGAM Hello (INPUT, OUTPUT); BEGIN WRITE(“Hello, World!”) END.
“Hello, World!” на C #include
Hello, World! на Python print 'Hello, World!'
Python: переменные и выражения
Значения и типы • Переменная это способ хранить и изменять некоторое значение в оперативной памяти • Переменная и значение не тождественны var ≠ val
Значение • Значение – то, с чем в конечном итоге оперирует программа • Значения бывают разных типов – Целые числа – Числа с плавающей запятой – Символы – Строки
Проверка типа >>> type(’Hello, World!’)
Тип определяется форматом записи >>> type(17)
Переменная • Переменная это именованная область оперативной памяти, которая может хранить и изменять свое значение. • Т. е. символьное имя, по которому может быть получено значение.
В языках с четкой типизацией • Переменной изначально указывается тип значений, которые она может принимать – var. A: integer; – user. Name: string;
down to Python • Python – язык с динамической типизацией • Переменная не имеет объявления, отдельного от присвоения значения • Тип переменной определяется хранимым в конкретный момент значением • Тип переменной может меняться
>> n = 17 >>> pi =" src="https://present5.com/presentation/-76615853_329451923/image-37.jpg" alt="Присвоение >>> message = "What’s up? " >>> n = 17 >>> pi =" />
Присвоение >>> message = "What’s up? " >>> n = 17 >>> pi = 3. 14159 • Переменная «создается» в момент первого упоминания в любом месте кода
Тип переменной >>> type(message)
Имя переменной • Должно быть осмысленным • Связанным с ее значением в программе • Python – регистрозависимый язык а ≠А, my. Var ≠ myvar • Не может начинаться с цифры • Не может совпадать с ключевым словом
Зарезервированные слова and def exec if not return assert del finally import or try break elif for in pass while class else from is print yield continue except global lambda raise
Выражения • Выражение – инструкция, которую может выполнить интерпретатор языка Python – Например, присвоение message = 'Hello, PS!' – Вывод print message
Скрипт • В самом простом случае – последовательность выражений print 1 x=2 print x Output: 1 2
Интерпретатор/Скрипт • Интерпретатор позволяет вычислять значения • Скрипт – только выполнять выражения >>> message = 'Hello, World!' >>> message 'Hello, World!' >>> print message Hello, World!
Присваивание vs Действие a=5 print a a=a+1 print a ----- a=5 print a + 1 print a -----
Присваивание vs Действие a=5 print a a=a+1 print a ----5 6 a=5 print a + 1 print a ----5 6 5
Одновременное присваивание >>>a, b, c = 1, 3, 14. 3 >>>print b, c, a ?
Одновременное присваивание >>>a, b, c = 1, 3, 14. 3 >>>print b, c, a 3 14. 3 1
Операторы и операнды • Оператор – специальный символ, обозначающий вычисление, действие над операндами или выражение 20 + 32 #сложение hour - 1 #вычитание minute / 60 #целочисленное деление 5 ** 2 #возведение в степень 5 % 2 #взятие остатка hour * 60 + minute #выражение (5 + 9) * (15 - 7) #выражение с изменением порядка
Порядок операций • • • Скобки ** (2**1 + 1 = 3, 3*1**3 = 3) * , /, % +и– равные по приоритету – слева направо.
Операции со строками • Конкатенация (+) fruit = 'banana' baked. Good = ' nut bread' print fruit + baked. Good • Повтор (*) >>>print 'Fun' *3 Fun
Композиция Вывод и вычисление: print ’Number of minutes since midnight: ’, hour*60+minute Вычисление и присваивание: percentage = (minute * 100) / 60 Композиция возможна только в правой части выражения
Комментарии #комментарий Код #комментарий
Соглашение о кодировании • PEP 8 • https: //drive. google. com/file/d/0 BZV 6 AFu. Hdpsb. Xl 2 LVh. PQ 0 h. Cd. E 0/edit? usp =sharing
Ввод и вывод данных print '%c %c %c' % (1, 3, 2) print '%c %c %c' % (7, 7, 7)
Вывод данных • Вычисление выражения • Оператор print
Format Подстановка значений переменных в строки student = 'Иванов' grade = 'отл. ' print 'Cтудент {0} получил {1}'. format(student, grade) • {0} и {1} = группы подстановки для переменных из списка параметров метода format • Количество параметров >= количеству групп • Параметром может быть выражение или величина
Ввод данных • INPUT – ввод строки с автоматическим определением типа данных • RAW_INPUT – ввод данных в строковый формат
Input >>> a = input() 123 >>> type(a)
raw_input >>> a = raw_input() 123 >>> type(a)
Аннотированный ввод >>> a = raw_input('Your name: ') Your name: _
Логические выражения • Логическое выражение может иметь два значения – Истина ( True) – Ложь (False)
Обращайте внимание • Ключевым словом является True, а не true, False, а не false • x = True # ok • x = true – Name. Error: name ‘true’ is not deffined
• Один из способов записать логическое выражение это использовать операторы сравнения, которые сравнивают два значения (справа и слева) и возвращают истину или ложь
Операторы сравнения • • • == != > < >= <= равенство не равенство больше меньше больше или равно меньше или равно
Например, >>> 5 == 5 True >>> 5 == 6 False
• Сравнивать можно не только непосредственные значения, но и переменные >>> x = 5 >>> x == 5 True >>> x == 6 False
А так же переменные между собой x != y # x не равно y x > y # x больше y x < y # x меньше y x >= y # x больше или равен y x <= y # x меньше или равен y
Обращайте внимание • == оператор сравнения, • = оператор присваивания
Обращайте внимание • x == y оператор сравнения, – Возвращает True или False • x=y оператор присваивания – Всегда возвращает True и изменяет значение переменной, указанной слева
== / = • При сравнении значения переменной с значением выражения можно использовать формат записи вида >>> 4 == х False >>> 4 = x Syntax. Error: can’t assign to literal
Обращайте внимание • Операторы >= и <= не имеют обратной формы записи • => и =<
Логические операторы • not • and • or - унарный оператор - бинарные операторы
not • Инвертирует значение логического выражения • x = True • y = not x # False
AND • Логическое И • Истинно, только когда истинны оба операнда • False and False • False and True False • True and True
OR • Логическое ИЛИ • Истинно, если хотя бы один из операндов равен истине • False or False • False or True • True or False True • True or True
Особенность питона • Любое ненулевое значение воспринимается как истина.
>>> x = 5 >>> x and 1 1 >>> y = 0 >>> y and 1 0
>>> x = 5 >>> x and 6 6 >>> y = False >>> y or 'hello'
• Логический оператор в питоне может вернуть числовое значение?
Особенность питона • Логический оператор в питоне может вернуть любое значение >>> x = 5 >>> x or 1 5 >>> y = 1 >>> y and 123 >>> 'Hello World!' or y 'Hello World!'
Общее правило для and • Логический оператор and: Если первый операнд равен истине (т. е. не равен нулю, False или пустому элементу) - возвращает второй операнд, иначе – первый операнд
>>> 12 and False >>> 0 and False 0
Общее правило для or • Логический оператор or: Если первый операнд равен истине (т. е. не равен нулю, False или пустому элементу) - возвращает первый операнд, иначе – второй операнд
>>> 12 or 123 12 >>> 0 or 5 5 >>> 0 or False >>> False or 0 0
Поэтому • Сравнения с числовыми значениями лучше выполнять явно. • Присваивать результат сравнения в переменную с приведеннием к логическому типу >>> x = 15 >>> y = True >>> z = bool(x or y)
Условное выполнение • Позволяет проверить условие и изменить поведение программы в зависимости от результата проверки
Условное выполнение • Условное выполнение позволяет организовать ветвление в программе • Выполнение частей кода начинает зависеть от условий • Часть кода выполняется не во всех случаях, а в зависимости от состояния программы • Т. е. в зависимости от исходных данных
• if – условный оператор • Синтаксис if УСЛОВИЕ: действие 1 Выполняются только если условие истинно … действие n
if x > 0: print "x is positive"
Блочная структура программы HEADER: FIRST STATEMENT. . . LAST STATEMENT
Блочная структура программы HEADER: FIRST STATEMENT. . . LAST STATEMENT заголовок Вложенный бок
Особенности Питона • Вложенность блока в Питоне определяется отступами
Отступ определяет блок if grade > 3: print ‘The grade is {0}’. format(grade) print ‘Student passed the exam' if grade > 3 : print ‘The grade is {0}’. format(grade) print ‘Student passed the exam'
Альтернативы if x%2 == 0: print x, "is even" else: print x, "is odd" Первая ветвь условия Вторая ветвь условия
Множественные условия if x < y: print x, "is less than", y elif x > y: print x, "is greater than", y else: print x, "and", y, "are equal"
if choice == ’A’: function. A() elif choice == ’B’: function. B() elif choice == ’C’: function. C() else: print "Invalid choice. "
• Все условия проверяются по порядку до первого истинного • Даже если во вложенных условиях есть другие истинные ветви – выполнится только первая ветвь выполнения с истинным условием
x=1 y=2 z=3 if x < y: print ‘x!’ elif y < z: print ‘y!’ else: print ‘z!’
x=1 y=2 z=3 if x < y: print ‘x!’ elif y < z: print ‘y!’ else: print ‘z!’ True
x=1 y=2 z=3 if x < y: print ‘x!’ elif y < z: print ‘y!’ else: print ‘z!’ Output: x!
Вложенные условия • Одни проверки могут быть вложены в другие
if x == y: print x, "and", y, "are equal" else: if x < y: print x, "is less than", y else: print x, "is greater than", y
• Множественные вложенные условия усложняют читаемость кода и его проверку на корректность • Для каждой веточки условия стоит подобрать входные данные на выполнение для проверки корректности работы всех сценариев выполнения
Объединение условий if 0 < x: if x < 10: print "x is a positive single digit. " if 0 < x and x < 10: print "x is a positive single digit. " if 0 < x < 10: print "x is a positive single digit. "
Такая запись требует внимания x=1 if 0 > x > 10: print 'X is positive and less then 10!'
Условия • С помощью проверки условий организуется ветвление в программе, что позволяет сделать ее гибкой к входным данным
Итерация • При необходимости повторить действия несколько раз используются циклы • Циклическое выполнение = итеративное выполнение. • Итерация – один шаг цикла
Циклы • С условием выхода из цикла – С предусловием – С постусловием • Со счетчиком
While • Цикл с условием типа «пока» • «пока выполняется условие повторять указанные действия»
Синтаксис while условие: действие 1 … действие n
Например n=7 while n > 0: print n n = n-1 Output 7 6 5 4 3 2 1
Порядок выполнения • • • Проверка условия Если условие истинно, Выполнить действия в блоке Вернуться к проверке условия Если условие ложно, перейти к операторам после цикла
n=1 while n > 0: print n n = n-1 print 'done'
Условие выхода • Так или иначе действия внутри цикла должны привести к изменению условия выполнения цикла, • Иначе формируется бесконечный цикл
Например n=7 while n > 0: print n n = n-1 Output 7 7 7 7 7
Неисполнение тела цикла • В случае, если условие входа в цикл не выполняется, действия могут не выполниться ни одного раза
While-else while условие: действие 1 … действие n else: действия Действия в данном блоке выполнятся, когда условие станет ложно
Например n = -1 while n > 0: print n n = n-1 else: print '<= 0' Output: <= 0
Например n=7 while n > 0: print n n = n-1 else: print '<= 0' Output:
Например n=7 while n > 0: print n n = n-1 else: print '<= 0' Output: 7 6 5 4 3 2 1 <= 0
Управление выполнением цикла
Прекращение выполнения цикла • Для экстренного прекращения выполнения цикла можно – Делать ложным условие выполнения • Использовать оператор break
Например n=7 while n > 0: print n n = n-1 if n == 3: n=0 print 'После цикла n=', n Output: 7 6 5 4 После цикла n=0
Например n=7 while n > 0: print n if n == 3: n=0 n = n-1 print 'После цикла n=', n Output: 7 6 5 4 3 После цикла n=0
Например n=7 while n > 0: print n if n == 3: break n = n-1 print 'После цикла n=', n Output: 7 6 5 4 3 После цикла n=3
• Оператор break прекращает выполнение цикла без запуска блока действий в разделе else
n=7 while n > 0: print n n = n-1 if n == 3: break else: print '<= 0' Output: 7 6 5 4 3
• Переход к следующей итерации continue
n=7 while n > 0: n = n-1 if n == 3: continue else: print n else: print '<= 0' Output:
n=7 while n > 0: n = n-1 if n == 3: continue else: print n else: print '<= 0' Output: 6 5 4 2 1 <=0
n=7 while n > 0: if n == 3: continue else: print n n=n-1 else: print '<= 0' Output:
n=7 while n > 0: if n == 3: continue else: print n n=n-1 else: print '<= 0' Output: 7 6 5 4 3 3
Цикл со счетчиком • Позволяет указать количество итераций явно • Позволяет знать и использовать номер итерации
for счетчик in значения: операторы цикла
for x in (1, 3, 5, 7, 11, 13, 17, 19): print x Output 1 3 5 7 11 13 17 19
Диапазоны • Оператор range позволяет задать последовательность значений range(n) от 0 до n range(f, t) от f до t range(f, t, s) от f до t с шагом s, то есть f, f+s, f+2 s. . пока f+n*s < t (t не входит в диапазон, неравенство не строгое)
>>> x=range(10) >>> x [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> x=range(3, 7) >>> x [3, 4, 5, 6] >>> x=range(1, 11, 2) >>> x [1, 3, 5, 7, 9]
for x in range(5): print x Output 0 1 2 3 4
Переменная цикла • Менять переменную цикла в ходе выполнения бесполезно (она на каждом шаге инициализируется) for x in range(5): x += 1 Output 1 print x 2 3 4 5
Вопросы?


