Язык программирования Python
Глава 1. Путь программы
Цель этой книги - научить вас думать, как специалист в области информатики. Этот способ мышления сочетает в себе некоторые из лучших особенностей математики, инженерии и естественных наук. Как математики, программисты используют формальные языки для обозначения идеи (в частности вычислений). Как инженеры, они разрабатывают вещи, собирают компоненты в системы и оценивают компромиссные решения среди альтернатив. Как ученые, они наблюдают за поведением сложных систем, формами гипотез, а также проверяют прогнозы.
Единственный наиболее важный навык для программиста – решение проблем. Решение проблем означает способность формулировать проблемы, мыслить творчески о решениях, и выражать решение четко и точно. Как выясняется, процесс обучения на программе является прекрасной возможностью практиковать навыки решения проблем. Вот почему эта глава называется «Путь программы.»
С одной стороны, вы будете учиться программировать, что уже полезный навык сам по себе. С другой стороны, вы будете использовать программирование как средство для достижения цели. По ходу дела эта цель будет становиться отчетливее.
Язык программирования Python
Язык программирования, который вы будете изучать - Python (Питон). Python является примером языка высокого уровня; другими языками высокого уровня, о которых вы могли слышать, являются C, C++, Perl и Java.
Как логично следует из названия «язык высокого уровня», имеются также языки низкого уровня, иногда называемые как «машинные языки» или «языки сборки». Грубо говоря, компьютеры могут выполнять только программы, написанные на языках низкого уровня. Таким образом, программы, написанные на языке высокого уровня должны быть обработаны, прежде чем они могут выполняться. Эта дополнительная обработка занимает некоторое время, что является небольшим недостатком языков высокого уровня.
Но преимущества огромны. Во-первых, намного легче программировать на языке высокого уровня. Написание программ на языке высокого уровня занимает меньше времени, они короче и легче читаются и они, скорее всего, будут правильными. Во-вторых, языки высокого уровня являются переносимыми, а это означает, что они могут работать на разных типах компьютеров с небольшим количеством или без каких-либо модификаций. Программы низкого уровня могут работать только на одном виде компьютеров и должны быть переписаны, чтобы выполняться на другом виде компьютеров.
Благодаря этим преимуществам, почти все программы пишутся на языках высокого уровня. Низкоуровневые языки используются только для нескольких специализированных приложений.
Существует два вида программ перевода языков высокого уровня на языки низкого уровня: интерпретаторы и компиляторы. Интерпретатор читает программу на высоком уровне и выполняет его, а это означает, что он делает то, что говорит эта программа. Он обрабатывает программу в короткий срок, поочередно читая строки и выполняя вычисления.
Компилятор читает программу и переводит ее полностью на язык низкого уровня, прежде чем программа начнет работать. В этом случае программа высокого уровня называется исходным кодом, а транслированная (переведенная) программа называется объектным кодом или исполняемым файлом. Единожды скомпилированную программу вы можете выполнять повторно без дальнейшего перевода.
Python считается интерпретируемым языком, потому что программы Python выполняются интерпретатором. Есть два способа использования интерпретатора: в режиме командной строки и режиме сценария. В режиме командной строки, вы вводите программу Python и интерпретатор печатает результат:
$ 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
Первая строка этого примера является командой, которая запускает интерпретатор Python. Следующие две строки представляют собой сообщения от интерпретатора. Третья строка начинается с >>>, которая является подсказкой интерпретатора о готовности к принятию команды. Мы набрали print 1 + 1, а интерпретатор ответил 2.
В качестве альтернативы, вы можете написать программу в файл и использовать интерпретатор для выполнения содержимого файла. Такой файл называется сценарием. Например, мы использовали текстовый редактор, чтобы создать файл с именем latoya.py со следующим содержанием:
print 1 + 1
По соглашению, файлы, содержащие программы Python, имеют имена, которые заканчиваются .py.
Чтобы выполнить программу, мы должны указать интерпретатору имя сценария:
$ python latoya.py 2
В других средах разработки детали выполнения программ могут отличаться. Кроме того, большинство программ являются более интересными, чем эта.
Большинство примеров в этой книге выполняются в командной строке. Работа в командной строке удобна для разработки программ и тестирования, потому что вы можете набирать программы и выполнять их немедленно. После того, как у вас будет рабочая программа, вы должны сохранить его в сценарий, так что вы можете выполнить или изменить его в будущем.
1.2 Что такое программа?
Программа представляет собой последовательность команд, которая определяет, как выполнять вычисления. Расчет может быть чем-то математическим, например, решение системы уравнений или нахождение корней многочлена, но он также может выполнять символьные вычисления, такие как поиск и замена текста в документе или (как ни странно) составление программы.
Детали выглядят по-разному на разных языках, но несколько базовых команд появляются практически в каждом языке:
input - ввод данных с клавиатуры, файла или какого-либо другого устройства. output - отображение данных на экране или отправка данных в файл или другое устройство. math выполняет базовые математические операции, такие как сложение и умножение. conditional execution выполняет проверку на условное выполнение определенных условий и выполнение соответствующей последовательности операторов. repetition - выполнение какого-то действия неоднократно, как правило, с некоторыми вариациями.
Верьте или нет, это в значительной степени все, что есть по нему. Каждая программа, которую вы когда-либо использовали, независимо от того, насколько она сложна, состоит из инструкций, которые выглядят более или менее подобно этим. Таким образом, мы можем описать программирование как процесс разделения большой и сложной задачи на более мелкие и более мелкие подзадачи, пока эти подзадачи недостаточно просты, чтобы быть выполненными одной из этих основных инструкций.
Это может быть немного расплывчато, но мы вернемся к этой теме позже, когда мы будем говорить об алгоритмах.
1.3 Что такое отладка?
Программирование представляет собой сложный процесс, и так как он делается людьми, это часто приводит к ошибкам. По эксцентричным причинам, ошибками программирования называются багами, а процесс их отслеживания и коррекции называют отладкой.
Три вида ошибок могут возникнуть в программе: синтаксические ошибки, ошибки выполнения и смысловые ошибки. Полезно провести различие между ними для того, чтобы находить их быстрее.
Синтаксические ошибки
Python может выполнить программу, только если программа синтаксически правильна; в противном случае процесс терпит неудачу и возвращает сообщение об ошибке. Синтаксис относится к структуре программы и правилам этой структуры. Например, на английском языке, предложение должно начинаться с заглавной буквы и заканчиваться точкой. эта фраза содержит синтаксическую ошибку. Также и здесь
Для большинства читателей, несколько ошибок синтаксиса не является серьезной проблемой, поэтому мы можем читать поэзию э.э. каммингса без получения сообщений об ошибках. Python не так снисходителен. Если есть одна ошибка синтаксиса в любом месте в вашей программе, Python выдаст сообщение об ошибке и завершит работу, и вы не сможете запустить программу. В течение первых нескольких недель вашей карьеры программирования вы, вероятно, потратите много времени отслеживая ошибки синтаксиса. Однако по мере приобретения опыта вы будете делать меньше ошибок и находить их быстрее.
Ошибки выполнения
Второй тип ошибки - ошибка выполнения, называемая так потому, что ошибка не появляется, пока вы не запустите программу. Эти ошибки также называются исключениями, потому что они, как правило, показывают, что произошло что-то исключительное (и плохое).
Ошибки выполнения очень редки в простых программах, которые вы увидите в первых нескольких главах, так что может быть пройдет какое-то время, прежде чем вы столкнетесь с ними.
Семантические ошибки
Третий тип ошибок - семантические ошибки. Если в вашей программе есть семантическая ошибка, она будет работать успешно, в том смысле, что компьютер не будет генерировать сообщения об ошибках, но она будет делать неправильные вещи. Она будет делать что-то другое. В частности, она будет делать то, что вы сказали ей делать.
Проблема заключается в том, что программа, которую вы написали, не является программой, которую вы хотели написать. Смысл программы (его семантика) является неправильным. Выявление семантических ошибок может быть сложным, потому что оно требует от вас работы в обратном направлении: посмотрев на выход программы, пытаться выяснить, что она делает.
Экспериментальная отладка
Одним из наиболее важных навыков, которые вы приобретете, является отладка. Хотя это может быть неприятным, отладка является одним из самых интеллектуально богатых, сложных и интересных частей программирования.
В некотором смысле, отладка как детективная работа. Вы столкнулись с подсказкой, и вы должны вывести процессы и события, которые привели к результатам, которые вы видите.
Отладка также подобна экспериментальной науке. После того, как у вас есть представление о том, что происходит не так, вы измените вашу программу и попытаетесь снова. Если гипотеза верна, то вы можете предсказать результат модификации, и вы делаете шаг навстречу к работающей программе. Если ваша гипотеза была ошибочной, вам придется предложить новую. Как отметил Шерлок Холмс, «Если исключить невозможное, то все что останется и будет правдой, сколь бы невероятным оно ни казалось.» (А. Конан Дойл, Знак четырех)
Для некоторых людей программирование и отладка - одно и то же. То есть, программирование — это процесс постепенной отладки программы, пока она не сделает то, что вы хотите. Идея состоит в том, что вы должны запускать программу, которая делает что-то, и делать маленькие модификации, отлаживая их по ходу дела, таким образом у вас всегда будет работающая программа.
Например, Linux является операционной системой, которая содержит тысячи строк кода, но это началось как простая программа, которую Линус Торвальдс использовал для изучения чипа Intel 80386. По словам Ларри Гринфилда, «одним из ранних проектов Линуса была программа, которая переключалась между печатью AAAA и BBBB. Позже это превратилось в Linux. « (Руководство пользователей Linux, Бета-версия 1)
В последующих главах будет сделано больше указаний об отладке и других методах программирования.