Занятие 5. Введение в программирование 4-5 октября ФББ МГУ имени М.В.Ломоносова 2013 год Зачем нам программировать? 1 Привычные данные: То, с чем работает биоинформатик: ??! Программирование Биология 7-8: Животные, под ред М.А. Козлова. http://www.ncbi.nlm.nih.gov/nuccore Программировать - это научить компьютер Исполнительный, но знающий (пока) только некоторые вещи ребёнок (1) Узнать, что умеет компьютер: какие команды он понимает и что делает в ответ на них Источник картинки: http://en.wikipedia.org/ (2) Научиться объяснять компьютеру, исходя из его «знаний» 2 Язык программирования Язык программирования интерфейс между человеком и компьютером Существует много языков программирования, со своими особенностями синтаксиса (правил написания и употребления команд): • С++ • Java •… • Python мы будем учить Python 2.7 3 Python – скриптовой язык Скрипт (от англ. script) = (в этом блоке) программа на языке Python в виде текстового файла Интерпретатор Python: • построчный разбор; • перевод команд на «язык компьютера»; • передача компьютеру. #Yeaah, my 1st script! a = 5 foo = 100 Dibrova_pr5.1.py Имя скрипта Расширение (обычно нечто указывающее на его назначение) (.py ассоциируется Windows с запуском интерпретатора) 4 Оператор присвоения значения 5 a = 5 Присвоим переменной a значение 5. Это значит, что пока не указано обратное, говоря а мы подразумеваем 5 6 = a Ошибка! Скрипт не будет работать, поскольку 6 – это фиксированное число (константа), мы не можем заявить, что оно равно a a = 6 Теперь значение переменной a равно 6 foo = 100 Присвоим переменной foo значение 100. Говорим foo, подразумеваем 100 a = foo Подставляем в правую часть вместо foo число 100, получаем аналогичное строчкам (1) и (3) утверждение: теперь a – это 100 foo = 0 foo изменилось, оно равно 0, а осталось равным 100 Арифметические Оператор операторы • Работают с парой чисел, одно пишется слева, другое справа от оператора • Результат – число • При работе с переменными сперва подставляют их значения • Порядок выполнения операций регулируется с помощью круглых скобок, как в алгебре a = 3 5 + 4 (a + 4)*2 6 Действие + Числа слева и справа от оператора складываются - Число справа от оператора вычитается из числа слева от него * Числа слева и справа от оператора перемножаются / Число слева от оператора делится на число справа от оператора % Число слева делится на число справа, а возвращается остаток от деления ** Число слева от оператора возводится в степень справа от оператора Компьютер получил 9, но результат не сохранил Компьютер получил 14, но результат не сохранил, переменная a не изменялась a = (a + 4)*2 Компьютер получил 14, и теперь a равно 14 a += 3 К значению переменной a прибавляется 3 Что мы научились делать: • Сохранить в памяти число, приписав его к какой-то переменной: a = 4 b = 7 # a - число # b - число • Сделать арифметическое вычисление, используя константы и значения переменные: c = (a / 2) + 3*(b - 4) d = 5 + 7 – 11 # с – число # d – число 7 Функции в программировании 8 Действием нескольких операторов можно легко сымитировать действие алгебраической функции: f ( x, y) 5 x 3 y 7 2 x y f x f = = = = = 10 3 4 5*(x ** 2) + 9*y + 7 3 3 5*(x ** 2) + 9*y + 7 y = 91 3 f = 5*(x ** 2) + 9*y + 7 А если мы ошиблись в формуле, теперь надо будет исправить ее в 100500 местах кода? А если мы вообще решили эту функцию сменить, попробовать другую?! Решение: задать функцию, а потом вызывать ее, когда потребуется Задание функции Слово синтаксиса языка, объясняющее, что сейчас будет задана новая функция Имя функции (любое) Список аргументов в круглых скобках, через запятую. Имена аргументов - любые Двоеточие далее начинается тело def myFunc (x, y): функции, ее команды Тело функции f = 5*(x ** 2) + 3*y + 7 (! пишется с Команда завершения тела отступом: табуляция return f или 4 пробела) функции (и указание того значения, которое функция возвращает) def lalala(foo, z): nya = 5*(foo ** 2) + 3*z + 7 return nya 9 10 Вызов функции def myFunc (x, y): f = 5*(x ** 2) + 3*y + 7 return f Задание функции a = myFunc (4, 5) b = myFunc (3, 2) Вызов функции с разными аргументами • При задании функции никакие команды не выполняются, но скрипт теперь «знает», что такая функция существует • При вызове функции в ее переменные-аргументы подставляются конкретные значения и вычисляется значение функции Строки 11 • Со строками оператор присвоения значения работает почти точно так же. • Но чтобы отличать строки от текста команд или названия переменных, строки заключают в кавычки: a = "Text" a = "Text" b = "Foo" c = a + b Пока не указано обратное, говоря а мы подразумеваем “Text”, то есть попросту a – это “Text” Оператор сложения для строчек дописывает одну строчку к другой. Так, в этом примере c будет равно “TextFoo”. ! Арифметические операторы вычитания, умножения и деления не работают для строчек Типы переменных • Итак, в Python есть различение типов переменных: • int – тип для целых чисел (от англ. integer – целый); • float – тип для дробных чисел переменных (от англ. floating point value – число с плавающей точкой) • str – тип для строк (от англ. string – строка) a = 5 - создается новый объект – переменная типа int - имя этого объекта a - этому объекту присваивается значение 5 Целое число является неизменяемым типом данных. Для данных таких типов a = a + 5 значит: “теперь именем a называется новый объект. Его тип int, значение 10” 12 Оператор подстановки • Оператор подстановки %: значение переменной справа от него будет поставлено в место, указанное в левой строке символом % и первой буквой нужного типа: %i – подставить как целое число %f – подставить дробное число (6 символов после запятой по умолчанию) %.3f – подставить дробное число с 3 символами после запятой %s – подставить в виде строки d = 5 e = "Value %i is the best" % d e = "Value " + str(d) + " is the best" 13 Еще несколько полезных 14 функций для строк и чисел v = 5 a = float(v) v = 5 a = type(v) str(x) (также int(x), float(x)) • 1 аргумент • возвращает аргумент, приведенный к типу, название которого указано в имени функции type(foo) • аргументом может быть любая переменная • возвращает тип переменной этой переменной s = raw_input("Enter your name: ") raw_input(string) • Выводит на экран консоли строку-аргумент в качестве приглашения к вводу с клавиатуры (любая последовательность символов + enter) • Возвращает введенную последовательность Как увидеть результат? 15 • Скрипт может выдать результаты работы на экран или в виде текстового файла • Это делается с помощью вызова встроенной команды print: (! не настоящая функция в Python 2.7) Автоматический переход на новую строчку value = 5 b = "Yes" print "Hello World!" print a print "a =", a, " b =", b Разделение на печати пробелом параметров, разделенных запятыми