Информатика и программирование Лекция 1 Интерпретатор. Простые типы данных. Переменные и значения. Думать правильно • How to Think Like a Computer Scientist. Learning with Python by Allen Downey, Jeffrey Elkner, Chris Meyers • От математики – формальное представление • От инженерии – разработка сложных систем • От всех естественных наук – поведенческий анализ систем http://www.python.org Гвидо ван Россум 1990/1991 Решение задач • • • • Формулировка Формализация Поиск оптимального решения Перевод решения на язык, доступный исполнителю, четко и аккуратно • Проверка корректности работы Этапы решения задачи • постановка задачи; • формализация задачи или выбор метода решения; • построение алгоритма; • составление программы на языке программирования; • отладка и тестирование программы; • исполнение программы и анализ результатов. Python • • • • • Язык высокого уровня Си-подобный синтаксис Интерпретируемый язык С хорошей переносимостью Поддерживающий разные парадигмы Языки • • • • • • Ассемблеры Процедурные языки Объектно-ориентированные языки Функциональные языки Логические языки Сценарные и скриптовые языки Языки • По типу трансляции – Ассемблеры (1:1) – Компиляторы (src -> машинный код, 1:n) – Интерпретаторы (построчное выполнение) Трансляция – перевод программы, написанной на языке программирования в исполняемый эквивалент • Компиляция – Анализ, генерация промежуточного кода, оптимизация, генерация машинного кода • Интерпретация – Исполнение на виртуальной машине, работающей с командами высокого уровня – Диалоговый режим – Построчное выполнение Режимы работы интерпретатора • Режим диалога с пользователем • Исполнение скриптового файла Режим диалога с пользователем $ 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» – psm11.py • Исполняется интерпретатором Python – Через параметр командной строки – Через IDE IDLE • IDLE • /lib/idlelib/idle.bat +/• Режим диалога – Удобен для отладки – Моментальное исполнение • Сохранение скрипта – Удобство правок и распространения – Сохранение для дальнейшего использования Что такое программа • Программа это последовательность инструкций по выполнению вычисления – Математические вычисления – Символьная обработка – Обработка графики Модель черного ящика входные данные преобразование в системе выходные данные Этапы • Input: получить данные (ввод с клавиатуры, из файла, с другого устройства ввода) • Вычисления: выполнить обработку данных, проверить необходимые условия, подготовить output • Output: вывести данные пользователю (на экран, в файл или на другое устройство вывода) Debugging Человеческий фактор ведет к ошибкам • Синтаксические ошибки • Ошибки исполнения • Семантические ошибки Синтаксические ошибки • 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 <stdio.h> int main(void) { printf("Hello, World!\n"); return 0; } Hello, World! на Python print "Hello, World!" Python: переменные и выражения Значения и типы • Переменная это способ хранить и изменять некоторое значение в оперативной памяти • Переменная и значение не тождественны var ≠ val Значение • Значение – то, с чем в конечном итоге оперирует программа • Значения бывают разных типов – Целые числа – Числа с плавающей запятой – Символы – Строки Проверка типа >>> type(’Hello, World!’) <type ’str’> >>> type(17) <type ’int’> • Не все действия, допустимые с одним типом будут допустимы с другим – Например, реверсирование строки имеет смысл, а реверсирование числа с плавающей запятой – нет. Тип определяется форматом записи >>> type(17) <type ’int’> >>> type(3.2) <type ’float’> >>> type(’17’) <type ’str’> >>> type(’3.2’) <type ’str’> Переменная • Переменная это именованная область оперативной памяти, которая может хранить и изменять свое значение. • Т.е. символьное имя, по которому может быть получено значение. В языках с четкой типизацией • Переменной изначально указывается тип значений, которые она может принимать – varA: integer; – userName: string; down to Python • Python – язык с динамической типизацией • Переменная не имеет объявления отдельного, от присвоения значения • Тип переменной определяется хранимым на конкретный момент значением • Тип переменной может меняться Присвоение >>> message = "What’s up?" >>> n = 17 >>> pi = 3.14159 • Переменная «создается» в момент первого упоминания Тип переменной >>> type(message) <type ’str’> >>> type(n) <type ’int’> >>> type(pi) <type ’float’> Имя переменной • Должно быть осмысленным • Связанным с ее значением в программе • Python – регистрозависимый язык а ≠А, myVar ≠ 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! Операторы и операнды • Оператор – специальный символ, обозначающий вычисление, действие над операндами 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’ bakedGood = ’ nut bread’ print fruit + bakedGood • Повтор (*) >>>print ’Fun’*3 FunFunFun Композиция Вывод и вычисление: print ’Number of minutes since midnight: ’, hour*60+minute Вычисление и присваивание: percentage = (minute * 100) / 60 Композиция возможна только в правой части выражения Комментарии #комментарий Код #комментарий Ввод и вывод данных 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) Ввод данных • INPUT – ввод строки с автоматическим определением типа данных • RAW_INPUT – ввод данных в строковый формат Input >>> a = input() 123 >>> type(a) <type 'int'> >>> a = input() '123' >>> type(a) <type 'str'> >>> a = input() qwe Name Error ‘qwe’ is not defined raw_input >>> a = raw_input() 123 >>> type(a) <type 'str'> >>>print a '123' >>> a = raw_input() '123' >>> type(a) <type 'str'> >>>print a "'123'" Аннотированный ввод >>> a = raw_input('Your name: ') Your name: _ Вопросы?