Основы программирования на питон для начинающих. Язык программирования Python умирает

Здравствуйте всем!

Удобочитаемый синтаксис, прост в обучении, высокоуровневый язык, Объектно-Ориентированый язык программирования (ООП) , мощный, интерактивный режим, масса библиотек. Множество иных плюсов… И это всё в одном языке.
Для начала окунёмся в возможности и узнаем, что же умеет Python?

А зачем мне твой Python?

Много начинающих программистов задают подобные вопросы. Это как с покупкой телефона, скажите, почему я должен купить этот телефон, а не этот?
Качество программного обеспечения
Для многих, в том числе и для меня, основные преимущества - это удобочитаемый синтаксис. Не много языков могут похвастаться им. Программный код на Python читается легче, что значит, многократное его использование и обслуживание выполняется гораздо проще, чем использование программного кода на других языках сценариев. Python содержит самые современные механизмы многократного использования программного кода, каким является ООП .
Библиотеки поддержки
В составе Python поставляется большое число собранных и переносимых функциональных возможностей, известных как стандартная библиотека. Эта библиотека предоставляет Вам массу возможностей, востребованных в прикладных программах, начиная от поиска текста по шаблону и заканчивая сетевыми функциями. Python допускает расширение как за счёт ваших собственных библиотек, так и за счёт библиотек, созданных другими разработчиками.
Переносимость программ
Большая часть программ на языке Python выполняется без изменений на всех основных платформах. Перенос программного кода из Linux в Windows заключается в простом копировании файлов программ с одной машины на другую. Также Python предоставляет Вам массу возможностей по созданию переносимых графических интерфейсов .
Скорость разработки
По сравнению с компилирующим, или строго типизированными языками, такими как С, С++ или Java, Python во много раз повышает производительность труда разработчика. Объем программного кода на языке Python обычно составляет треть, или даже пятую часть эквивалентного программного кода на языке С++ или Java, что означает меньший объем ввода с клавиатуры, меньшее количество времени на откладку и меньший объем трудозатрат на сопровождение. Кроме того, программы на языке Python запускаются сразу же, минуя длительные этапы компиляции и связывания, необходимые в некоторых других языках программирования, что еще больше увеличивает производительность труда программиста.

Где используется Python?

  • Компания Google использует Python в своей поисковой системе и оплачивает труд создателя Python - Гвидо ван Россума
  • Такие компании, как Intel, Cisco, Hewlett-Packard, Seagate, Qualcomm и IBM, используют Python для тестирования аппаратного обеспечения
  • Служба коллективного использования видеоматериалов YouTube в значительной степени реализована на Python
  • NSA использует Python для шифрования и анализа разведданных
  • Компании JPMorgan Chase, UBS, Getco и Citadel применяют Python для прогнозирования финансового рынка
  • Популярная программа BitTorrent для обмена файлами в пиринговых сетях написана на языке Python
  • Популярный веб-фреймворк App Engine от компании Google использует Python в качестве прикладного языка программирования
  • NASA, Los Alamos, JPL и Fermilab используют Python для научных вычислений.
и другие компании также используют этот язык.

Литература

Вот мы и познакомились поближе с языком программирования Python. Можно сказать отдельно, что плюсы Python состоят еще в том, что у него есть масса качественной литературы. Не каждый язык этим может похвастаться. К примеру язык программирования Java Script не может порадовать пользователей множеством литературы, хотя язык действительно неплохой.

Вот источники, которые помогут Вам познакомиться ближе с Python, а может и стать будущим Гвидо ван Россумом.
* Некоторые источники могут быть на английском. Не стоит этому удивляться, сейчас масса отличной литературы пишется именно на английском языке. Да и для самого программирования надо знать хотя бы базовые знания английского.

Настоятельно рекомендую прочитать первым делом книгу - Марк Лутц. Изучаем Python, 4-е издание . Книга переведена на русский язык, так что бояться не стоит, если Вы вдруг не знаете английский. Но именно четвёртое издание.

Для тех, кто знает английский, можно прочитать документацию на официальном сайте Python . Там всё довольно понятно описано.

А если же Вы более принимаете информацию по видео, то могу посоветовать уроки от компании Google, которые ведёт Ник Парланте - ученик из Стэнфорда. Шесть видеолекций на YouTube . Но в бочке мёда тут есть капля дёгтя… Ведёт он на английском языке с английскими субтитрами. Но надеюсь, что остановит это немногих.

Что делать, если я прочитал книги, но не знаю как применять знания?

Без паники!
Советую почитать книгу Марк Лутц. Программирование на Python (4-е издание) . Ранее было «изучаем», а тут «Программирование». В «Изучаем» - Вы получаете знания Python, в «Программирование» - Марк Вас учит как их применять в Ваши будущие программы. Книга очень полезная. И думаю одной её Вам хватит.

Хочу практики!

Легко.
Выше я писал о видеолекциях от Ника Парланте на YouTube, но у них есть также некие

Программирование на Python

Часть 1. Возможности языка и основы синтаксиса

Серия контента:

Стоит ли изучать Python?

Python – это один из наиболее популярных современных языков программирования. Он пригоден для решения разнообразных задач и предлагает те же возможности, что и другие языки программирования: динамичность, поддержку ООП и кросс-платформенность. Разработку Python начал Гвидо Ван Россум (Guido Van Rossum) еще в середине 1990-х годов, поэтому к настоящему времени удалось избавиться от стандартных «детских» болезней, существенно развить лучшие стороны языка и привлечь множество программистов, использующих Python для реализации своих проектов.

Многие программисты считают, что необходимо изучать только «классические» языки программирования, такие как Java или C++, так как другие языки все равно не смогут обеспечить таких же возможностей. Однако в последнее время возникло убеждение, что программисту желательно знать более одного языка, так как это расширяет его кругозор, позволяя более творчески решать поставленные задачи и повышая его конкурентоспособность на рынке труда.

Изучить в совершенстве два таких языка как Java и C++ достаточно сложно и заняло бы много времени; кроме того, многие аспекты этих языков противоречат друг другу. В то же время Python идеально подходит на роль второго языка, так как он сразу же усваивается благодаря уже имеющимся знаниям в ООП, и тому, что его возможности не конфликтуют, а дополняют опыт, накопленный при работе с другим языком программирования.

Если же программист только начинает свой путь в области разработки ПО, то Python станет идеальным «вводным» языком программирования. Благодаря своей лаконичности он позволит быстрее овладеть синтаксисом языка, а отсутствие «наследства» в виде формировавшихся на протяжении многих лет аксиом поможет быстро освоить ООП. В силу этих факторов «кривая обучения» Python будет довольно короткой, и программист сможет перейти от учебных примеров к коммерческим проектам.

Поэтому кем бы ни являлся читатель данной статьи – опытным программистом или новичком в области разработки ПО, ответом на вопрос, который является и названием этого раздела, должно стать убедительное «да».

Этот цикл статей предназначен для того, чтобы помочь успешному преодолению «кривой обучения», последовательно предоставляя информацию, начиная с самых базовых принципов языка до его продвинутых возможностей в плане интеграции с другими технологиями. В первой статье речь пойдет об основных возможностях и синтаксисе Python. В дальнейшем мы рассмотрим более сложные аспекты работы с этим популярным языком, в частности объектно- ориентированное программирование на Python.

Архитектура Python

Любой язык, неважно – для программирования или общения, состоит как минимум из двух частей – словаря и синтаксиса. Язык Python организован точно так же, предоставляя синтаксис для формирования выражений, образующих исполняемые программы, и словарь – набор функциональности в виде стандартной библиотеки и подключаемых модулей.

Как уже упоминалось, синтаксис Python достаточно лаконичный, особенно если сравнивать с Java или C++. С одной стороны – это хорошо, так как чем проще синтаксис, тем проще его изучить и тем меньше ошибок можно совершить в процессе его использования. Однако у подобных языков есть недостаток – с их помощью можно передавать самую простую информацию и нельзя выражать сложные конструкции.

К Python это не относится, так как это язык простой, но упрощенный. Дело в том, что Python является языком с более высоким уровнем абстракции, выше, например, чем у Java и C++, и позволяет передать такое же количество информации в меньшем объеме исходного кода.

Также Python является языком общего назначения, поэтому может применяться практически в любой области разработки ПО (standalone, клиент-сервер, Web-приложения) и в любой предметной области. Кроме того, Python легко интегрируется с уже существующими компонентами, что позволяет внедрять Python в уже написанные приложения.

Другая составляющая успеха Python – это его модули расширения, как стандартные, так и специфические. Стандартные модули расширения Python – это отлично спроектированная и неоднократно проверенная функциональность для решения задач, возникающих в каждом проекте по разработке ПО, обработка строк и текстов, взаимодействие с операционной системой, поддержка Web-приложений. Эти модули также написаны на языке Python, поэтому обладают его важнейшим свойством – кросс-платформенностью, позволяющей безболезненно и быстро переносить проекты с одной операционной системы на другую.

Если необходимой функциональности не оказалось в стандартной библиотеке Python, то можно создать собственный модуль расширения для его последующего неоднократного использования. Здесь стоит отметить, что модули расширения для Python можно создавать не только на самом языке Python, но и с помощью других языков программирования. В этом случае появляется возможность более эффективной реализации ресурсоемких задач, например сложных научных вычислений, однако теряется преимущество кросс-платформенности, если язык модуля расширения не является сам по себе кросс-платформенным, как Python.

Среда исполнения Python

Как известно, все кросс-платформенные языки программирования построены по одной модели: это действительно переносимый исходный код и среда исполнения (runtime environment), которая не является переносимой и специфична для каждой конкретной платформы. В эту среду исполнения обычно входит интерпретатор, который исполняет исходный код, и различные утилиты, необходимые для сопровождения приложения – отладчик, обратный ассемблер и т.д.

В среду исполнения Java дополнительно входит компилятор, так как исходный код необходимо скомпилировать в байт-код для виртуальной Java-машины. В среду исполнения Python входит только интерпретатор, который одновременно является и компилятором, однако компилирует исходный код Python непосредственно в машинный код целевой платформы.

На данный момент существуют три известных реализации среды исполнения для Python: CPython, Jython и Python.NET. Как можно догадаться из названия, первая среда реализована на языке C, вторая на языке Java, а последняя – на платформе.NET.

Среда исполнения CPython обычно называется просто Python, и когда говорят о Python, то чаще всего имеется в виду именно эта реализация. Эта реализация состоит из интерпретатора и модулей расширения, написанных на языке C, и может использоваться на любой платформе, для которой доступен стандартный компилятор C. Кроме того, существуют уже скомпилированные версии среды исполнения для различных операционных систем, включая различные версии OC Windows и различные дистрибутивы Linux. В этой и последующих статьях будет рассматриваться именно CPython, если иное не оговаривается отдельно.

Среда исполнения Jython – это реализация Python для работы с виртуальной Java-машиной (JVM). Поддерживается любая версия JVM, начиная с версии 1.2.2 (текущая версия Java – 1.6). Для работы с Jython требуется установленная Java-машина (среда исполнения Java) и определенное знание языка программирования Java. Уметь писать исходный код на языке Java не обязательно, однако придется иметь дело c JAR-файлами и Java-апплетами, а также документацией в формате JavaDOC.

Какую версию среды выбрать – зависит исключительно от предпочтений программиста, вообще же рекомендуется держать на компьютере и CPython, и Jython, так как они не конфликтуют между собой, а взаимно дополняют друг друга. Среда CPython работает быстрее, так как нет промежуточного уровня в виде JVM; кроме того, обновленные версии Python сначала выпускают именно в виде среды CPython. Однако Jython может использовать любой класс Java в качестве модуля расширения и работать на любой платформе, для которой существует реализация JVM.

Обе среды исполнения выпущены под лицензией, совместимой с известной лицензией GPL, поэтому могут использоваться для разработки как коммерческого, так и свободного или бесплатного ПО. Большая часть модулей расширения для Python также выходит в рамках лицензии GPL и может свободно применяться в любых проектах, однако существуют и коммерческие расширения или расширения с более строгими лицензиями. Поэтому при использовании Python в коммерческом проекте необходимо знать, какие ограничения существуют в лицензиях подключаемых модулей расширения.

Начало работы с Python

Прежде чем начать использовать Python, необходимо установить его среду исполнения – в данной статье это CPython и соответственно интерпретатор python. Существуют различные способы установки: опытные пользователи могут сами скомпилировать Python из его общедоступного исходного кода, также можно загрузить с Web-сайта www.python.org уже готовые исполняемые файлы для конкретной операционной системы, наконец, многие дистрибутивы Linux поставляются с уже предустановленным интерпретатором Python. В этой статье используется версия Python 2.x для ОС Windows, однако представленные примеры можно запускать на любой версии Python.

После того как программа установки развернет исполняемые файлы Python в указанный каталог, необходимо проверить значения следующих системных переменных:

  • PATH . В этой переменной должен содержаться путь к каталогу, где установлен Python, чтобы его могла найти операционная система.
  • PYTHONHOME . Эта переменная должна содержать только путь к каталогу, где установлен Python. Также в этом каталоге должен содержаться подкаталог lib, в котором будет выполняться поиск стандартных модулей Python.
  • PYTHONPATH . Переменная со списком каталогов, содержащих модули расширения, которые будут подключаться к Python (элементы списка должны разделяться системным разделителем).
  • PYTHONSTARTUP . Не обязательная переменная, определяющая путь к сценарию Python, который должен выполняться каждый раз при запуске интерактивного сеанса интерпретатора Python.

Командная строка для работы с интерпретатором имеет следующую структуру.

PYTHONHOME\python (опции) [ -с команда | файл со сценарием | - ] {аргументы}

Интерактивный режим работы Python

Если запустить интерпретатор, не указывая команды или файла со сценарием, то он запустится в интерактивном режиме. В этом режиме запускается специальная оболочка Python, в которую можно вводить отдельные команды или выражения, а их значение будет немедленно вычисляться. Это очень удобно во время изучения Python, так как можно сразу проверить правильность той или иной конструкции.

Значение вычисленного выражения сохраняется в специальную переменную с именем «Одиночное подчеркивание» (_), так что его можно использовать в последующих выражениях. Завершить интерактивный сеанс можно сочетанием клавиш Ctrl–Z в ОС Windows или Ctrl–D в ОС Linux.

Опции – это не обязательные строковые значения, которые могут изменять поведение интерпретатора во время сеанса; их значение будет рассматриваться в этой и последующих статьях. За опциями указывается либо отдельная команда, которую должен выполнить интерпретатор, либо путь к файлу, в котором содержится сценарий для выполнения. Стоит отметить, что команда может состоять из нескольких выражений, разделенных точкой с запятой, и должна быть заключена в кавычки, чтобы операционная система смогла ее корректно передать интерпретатору. Аргументы – те параметры, которые передаются для последующей обработки в исполняемый сценарий; они передаются в программу в виде строк и разделяются пробелами.

Для проверки правильности установки и работоспособности Python можно выполнить следующие команды:

c:\> python- v
c:\> python –c “import time; print time.asctime()”

Опция –v выводит версию используемой реализации Python и завершает работы, а вторая команда распечатывает на экран значение системного времени.

Писать сценарии Python можно в любом текстовом редакторе, так как они представляют собой обычные текстовые файлы, однако существуют и специальные среды разработки, предназначенные для работы с Python.

Основы синтаксиса Python

Сценарии исходного кода Python состоят из так называемых логических строк , каждая из которых в свою очередь состоит из физических строк . Для обозначения комментариев используется символ #. Комментарии и пустые строки интерпретатор игнорирует.

Далее приведен очень важный аспект, который может показаться странным программистам, изучающим Python в качестве второго языка программирования. Дело в том, что в Python нет символа, который бы отвечал за отделение выражений друг от друга в исходном коде, как, например, точка с запятой (;) в C++ или Java. Точка с запятой позволяет разделить несколько инструкций, если они находятся на одной физической строке. Также отсутствует такая конструкция, как фигурные скобки {}, позволяющая объединить группу инструкций в единый блок.

Физические строки разделяются самим символом конца строки, но если выражение слишком длинное для одной строки, то две физических строки можно объединить в одну логическую. Для этого необходимо в конце первой строки ввести символ обратного слеша (\), и тогда следующую строку интерпретатор будет трактовать как продолжение первой, однако при этом нельзя, чтобы на первой строке за символом \ находились бы другие символы, например, комментарий с #. Для выделения блоков кода используются исключительно отступы. Логические строки с одинаковым размером отступа формируют блок, и заканчивается блок в том случае, когда появляется логическая строка с отступом меньшего размера. Именно поэтому первая строка в сценарии Python не должна иметь отступа. Усвоение этих несложных правил поможет избежать большинства ошибок, связанных с освоением нового языка.

Других радикальных отличий от других языков программирования в синтаксисе Python нет. Имеется стандартный набор операторов и ключевых слов, большая часть которых уже знакома программистам, а специфические для Python будут рассматриваться в этой и последующих статьях. Также используются стандартные правила для заданий идентификаторов переменных, методов и классов – имя должно начинаться с подчеркивания или латинского символа любого регистра и не может содержать символов @, $, %. Также не может использоваться в качестве идентификатора только один символ подчеркивания (см. сноску, в которой говорится об интерактивном режиме работы).

Типы данных, используемых в Python

Типы данных, используемых в Python, также совпадают с другими языками – целые и вещественные типы данных; дополнительно поддерживается комплексный тип данных – с вещественной и мнимой частью (пример такого числа – 1.5J или 2j, где J представляет собой квадратный корень из -1). Python поддерживает строки, которые могут быть заключены в одинарные, двойные или тройные кавычки, при этом строки, как и в Java, являются immutable-объектами, т.е. не могут изменять свое значение после создания.

Есть в Python и логический тип данных bool c двумя вариантами значения – True и False. Однако в старых версиях Python такого типа данных не было, и, кроме того, любой тип данных мог быть приведен к логическому значению True или False. Все числа, отличные от нуля, и непустые строки или коллекции с данными трактовались как True, а пустые и нулевые значения рассматривались как False. Эта возможность сохранилась и в новых версиях Python, однако для повышения читаемости кода рекомендуется использовать для логических переменных тип bool. В то же время, если необходимо поддерживать обратную совместимость со старыми реализациями Python, то в качестве логических переменных стоит использовать 1 (True) или 0 (False).

Функциональность для работы с наборами данных

В Python определены три типа коллекций для хранения наборов данных:

  • кортеж (tuple);
  • список (list);
  • словарь (dictionary).

Кортеж представляет собой неизменяемую упорядоченную последовательность данных. В нем могут содержаться элементы различных типов, например другие кортежи. Кортеж определяется в круглых скобках, а его элементы разделяются запятыми. Специальная встроенная функция tuple() позволяет создавать кортежи из представленной последовательности данных.

Список – это изменяемая упорядоченная последовательность элементов. Элементы списка также разделяются запятыми, но задаются уже в квадратных скобках. Для создания списков предлагается функция list().

Словарь является хеш-таблицей, сохраняющей элемент вместе с его идентификатором-ключом. Последующий доступ к элементам выполняется тоже по ключу, поэтому единица хранения в словаре – это пара объект-ключ и связанный с ним объект-значение. Словарь – это изменяемая, но не упорядоченная коллекция, так что порядок элементов в словаре может меняться со временем. Задается словарь в фигурных скобках, ключ отделяется от значения двоеточием, а сами пары ключ/значение разделяются запятыми. Для создания словарей доступна функция dict().

В листинге 1 приведены примеры различных коллекций, доступных в Python.

Листинг 1. Виды коллекций, доступные в Python
(‘w’,‘o’,‘r’,‘l’,‘d’) # кортеж из пяти элементов (2.62,) # кортеж из одного элемента [“test”,"me"] # список из двух элементов # пустой список { 5:‘a’, 6:‘b’, 7:‘c’ } # словарь из трех элементов с ключами типа int

Определение функций в Python

Хотя Python поддерживает ООП, однако многие его возможности реализованы в виде отдельных функций; кроме того, модули расширения чаще всего делаются тоже в виде библиотеки функций. Функции также применяются и в классах, где они по традиции называются методами.

Синтаксис определения функций в Python крайне простой; с учетом изложенных выше требований:

def ИМЯ_ФУНКЦИИ(параметры): выражение № 1 выражение № 2 ...

Как видно, необходимо использовать служебное слово def, двоеточие и отступы. Вызвать функцию также очень просто:

ИМЯ_ФУНКЦИИ(параметры)

Есть только несколько моментов, специфичных для Python, которые стоит учитывать. Как и в Java, примитивные значения передаются по значению (в функцию попадает копия параметра, и она не может изменить значение, установленное до вызова функции), а сложные объектные типы передаются по ссылке (в функцию передается ссылка и она вполне может изменить объект).

Параметры могут передаваться как просто по порядку перечисления, так и по именам, в этом случае не нужно указывать при вызове те параметры, для которых есть значения по умолчанию, а передавать только обязательные или менять порядок параметров при вызове функции:

#функция, выполняющая деление нацело – с помощью оператора // def foo(delimoe, delitel): return delimoe // delitel print divide(50,5) # результат работы: 10 print divide(delitel=5, delimoe=50) # результат работы: 10

Функция в Python обязательно возвращает значение – это делается либо явно с помощью оператора return, за которым следует возвращаемое значение, либо, в случае отсутствия оператора return, возвращается константа None, когда достигается конец функции. Как видно из примеров объявлений функций, в Python нет необходимости указывать, возвращается что-либо из функции или нет, однако если в функции имеется один оператор return, возвращающей значение, то и другие операторы return в этой функции должны возвращать значения, а если такого значения нет, то необходимо явно прописывать return None.

Если функция очень простая и состоит из одной строки, то ее можно определить прямо на месте использования, в Python подобная конструкция называется лямбда-функцией (lambda). lambda-функция – это анонимная функция (без собственного имени), телом которой является оператор return, возвращающий значение некоторого выражения. Такой подход может оказаться удобным в некоторых ситуациях, однако стоит заметить, что повторное использование подобных функций невозможно («где родился, там и пригодился»).

Еще стоит описать отношение Python к использованию рекурсии. По умолчанию глубина рекурсии ограничена 1000 уровней, и когда этот уровень будет пройден, возникнет исключительная ситуация, и работа программы будет остановлена. Однако при необходимости величину этого предела можно изменить.

У функций в Python есть еще и другие интересные особенности, например документирование или возможность определения вложенных функций, однако они будут рассматриваться в следующих статьях серии на более сложных примерах.

Python 3 - это современный язык, на котором просто и приятно писать программы.

Для печати значений в Питоне есть функция print(). Внутри круглых скобок через запятую мы пишем то, что хотим вывести. Вот программа, которая делает несколько вычислений:

Print(5 + 10) print(3 * 7, (17 - 2) * 8) print(2 ** 16) # две звёздочки означают возведение в степень print(37 / 3) # один слэш - это деление с ответом-дробью print(37 // 3) # два слэша считают частное от деления нацело # это как операция div в других языках print(37 % 3) # процент считает остаток от деления нацело # это как операция mod в других языках

Для ввода данных в программу мы используем функцию input() . Она считывает одну строку.

Вот программа, которая считывает имя пользователя и приветствует его:

Пётр print("Как вас зовут?") name = input() # считываем строку и кладём её в переменную name print("Здравствуйте, " + name + "!")

Мы будем писать программы, которые считывают данные, перерабатывают их и выводят какой-то результат. При запуске на компьютере такие программы считывают данные, которые пользователь вводит с клавиатуры, а результат выводят на экран.

Попробуем написать программу, которая считывает два числа и выводит их сумму. Для этого считаем два числа и сохраним их в переменные a и b , пользуясь оператором присваивания = . Слева от оператора присваивания в программах на Питоне ставится имя переменной - например, строка из латинских букв. Справа от оператора присваивания ставится любое выражение. Имя станет указывать на результат вычисления выражения. Проиграйте эту программу и посмотрите на результаты её работы:

5 7 a = input() b = input() s = a + b print(s)

Мы видим, что программа выводит 57 , хотя в реальной жизни 5 + 7 будет 12 . Это произошло потому, что Питон в третьей строчке «сложил» две строки, а не два числа. В Питоне две строки складываются так: к первой строке приписывается вторая.

Обратите внимание, что в визуализаторе содержимое переменных a и b заключено в кавычки. Это означает, что в a и b лежат строки, а не числа.

В Питоне все данные называются объектами. Число 2 представляется объектом «число 2», строка "hello" – это объект «строка "hello" ».

Каждый объект относится к какому-то типу. Строки хранятся в объектах типа str , целые числа хранятся в объектах типа int , дробные числа (вещественные числа) - в объектах типа float . Тип объекта определяет, какие действия можно делать с объектами этого типа. Например, если в переменных first и second лежат объекты типа int , то их можно перемножить, а если в них лежат объекты типа str , то их перемножить нельзя:

First = 5 second = 7 print(first * second) first = "5" second = "7" print(first * second)

Чтобы преобразовать строку из цифр в целое число, воспользуемся функцией int() . Например, int("23") вернет число 23 .

Вот пример правильной программы, которая считывает два числа и выводит их сумму:

5 7 a = int(input()) b = int(input()) s = a + b print(s)

Пошаговая инструкция для всех, кто хочет изучить программирование на Python (или программирование вообще), но не знает, куда сделать первый шаг.

Что делать?

Мы просмотрели множество обучающих материалов и просто хороших статей и составили список того, что необходимо изучить, чтобы освоить этот язык программирования и развиваться в нем.

1. Первым делом изучите основы. Узнайте, что такое переменные, управляющие структуры, структуры данных. Эти знания необходимы без привязки к конкретному языку.

2. Займитесь изучением литературы. Начните с классики – Dive into Python . Эта книга вообще может стать настольной. Еще можно почитать Майкла Доусона «Программируем на Python » и Алексея Васильева «Python на примерах. Практический курс по программированию» . Доусон – опытный программист и преподаватель, а в книге учит программировать, создавая простые игры. В книге Васильева, напротив, больше внимания уделяется основам и теории.

4. Пройдите курс «Введение в компьютерные технологии и программирование на языке Python» от MIT.

5. Узнайте, какие библиотеки и и для каких целей используют другие питонисты. Найдите что-то интересное для себя.

6. Если вас интересуют веб-технологии, обратите внимание на фреймворки Flask и Django. Узнайте, для каких целей какой из них лучше подходит, начните изучать тот, что подходит вам.

7. Узнайте, как получать и анализировать массивы данных с отдельных сайтов, со всего Интернета и вообще откуда угодно – только старайтесь держаться в рамках закона.

8. Ищите информацию о методах машинного обучения.

9. Оптимизируйте работу с инструментами, автоматизируйте рутину и все, что еще не автоматизировано.

Куда сходить?

Несколько полезных ссылок на ресурсы, которые помогут чуть меньше гуглить и определиться, в каком направлении работать.

Полезные ресурсы

Python Tutor

Этот инструмент помогает перейти фундаментальный барьер на пути к пониманию изучаемого языка программирования: путем визуализации кода этот ресурс даст понимание того, что происходит, когда компьютер исполняет каждую строку кода.

Bucky Roberts на YouTube

Если вы не знакомы с программированием, эти туториалы очень вам помогут. Они просты для понимания и охватывают все, что может пригодиться сначала, начиная с установки языка.

Derek Banas про Python на YouTube

Дерек – программист-самоучка, и у него свой взгляд на подход к изучению языков программирования. Он делает небольшие видеообзоры на различные языки длиной в 40-60 минут, в которых рассказывает все, что нужно, чтобы в общих чертах понять назначение языка.

Corey Schafer на YouTube

У Кори хорошие видео на тему форматирования строк, генераторов, программистских терминов (комбинации и перестановки, DRY, замыкания) и многого другого, что поможет понять основные концепции.

Django Getting Started

Официальная документация по веб-фреймворку Django. Покрывает все, что нужно узнать на первых порах, от установки до первого приложения.

Введение во Flask

Видеокурс на YouTube для желающих ознакомиться с Flask, понять некоторые его тонкости и узнать, зачем он вообще нужен.

Полезные ссылки

Новичку

Python 3 для начинающих
«Укус Питона» (англ. «A Byte of Python»)

Введение


В связи с наблюдаемым в настоящее время стремительным развитием персональной вычислительной техники, происходит постепенное изменение требований, предъявляемых к языкам программирования. Все большую роль начинают играть интерпретируемые языки, поскольку возрастающая мощь персональных компьютеров начинает обеспечивать достаточную скорость выполнения интерпретируемых программ. А единственным существенным преимуществом компилируемых языков программирования является создаваемый ими высокоскоростной код. Когда скорость выполнения программы не является критичной величиной, наиболее правильным выбором будет интерпретируемый язык, как более простой и гибкий инструмент программирования.

В связи с этим, определенный интерес представляет рассмотрение сравнительно нового языка программирования Python (пайтон), который был создан его автором Гвидо ван Россумом (Guido van Rossum) в начале 90-х годов.

Общие сведения о Python. Достоинства и недостатки


Python является интерпретируемым, изначально объектно-ориентированным языком программирования. Он чрезвычайно прост и содержит небольшое число ключевых слов, вместе с тем очень гибок и выразителен. Это язык более высокого уровня нежели Pascal, C++ и, естественно C, что достигается, в основном, за счет встроенных высокоуровневых структур данных (списки, словари, тьюплы).

Достоинства языка.
Несомненным достоинством является то, что интерпретатор Python реализован практически на всех платформах и операционных системах. Первым таким языком был C, однако его типы данных на разных машинах могли занимать разное количество памяти и это служило некоторым препятствием при написании действительно переносимой программы. Python же таким недостатком не обладает.

Следующая немаловажная черта - расширяемость языка, этому придается большое значение и, как пишет сам автор, язык был задуман именно как расширяемый. Это означает, что имеется возможность совершенствования языка всеми всеми заинтересованными программистами. Интерпретатор написан на С и исходный код доступен для любых манипуляций. В случае необходимости, можно вставить его в свою программу и использовать как встроенную оболочку. Или же, написав на C свои дополнения к Python и скомпилировав программу, получить "расширенный" интерпретатор с новыми возможностями.

Следующее достоинство - наличие большого числа подключаемых к программе модулей, обеспечивающих различные дополнительные возможности. Такие модули пишутся на С и на самом Python и могут быть разработаны всеми достаточно квалифицированными программистами. В качестве примера можно привести следующие модули:

  • Numerical Python - расширенные математические возможности, такие как манипуляции с целыми векторами и матрицами;
  • Tkinter - построение приложений с использованием графического пользовательского интерфейса (GUI) на основе широко распространенного на X-Windows Tk-интерфейса;
  • OpenGL - использование обширной библиотеки графического моделирования двух- и трехмерных объектов Open Graphics Library фирмы Silicon Graphics Inc. Данный стандарт поддерживается, в том числе, в таких распространенных операционных системах как Microsoft Windows 95 OSR 2, 98 и Windows NT 4.0.
Недостатки языка.
Единственным недостатком, замеченным автором, является сравнительно невысокая скорость выполнения Python-программы, что обусловлено ее интерпретируемостью. Однако, на наш взгляд, это с лихвой окупается достоинствами языка при написании программ не очень критичных к скорости выполнения.

Обзор особенностей


1. Python, в отличие от многих языков (Pascal, C++, Java, и т.д.), не требует описания переменных. Они создаются в месте их инициализации, т.е. при первом присваивании переменной какого-либо значения. Значит, тип переменной определяется типом присваиваемого значения. В этом отношении Python напоминает Basic.
Тип переменной не является неизменным. Любое присваивание для нее корректно и это приводит лишь к тому, что типом переменной становится тип нового присваиваемого значения.

2. В таких языках как Pascal, C, C++ организация списков представляла некоторые трудности. Для их реализации приходилось хорошо изучать принципы работы с указателями и динамической памятью. И даже имея хорошую квалификацию, программист, каждый раз заново реализуя механизмы создания, работы и уничтожения списков, мог легко допустить трудноуловимые ошибки. Ввиду этого были созданы некоторые средства для работы со списками. Например, в Delphi Pascal имеется класс TList, реализующий списки; для С++ разработана библиотека STL (Standard Template Library), содержащая такие структуры как векторы, списки, множества, словари, стеки и очереди. Однако, такие средства имеются не во всех языках и их реализациях.

Одной из отличительных черт Python является наличие таких встроенных в сам язык структур как тьюплы (tuple), списки (list) и словари (dictionary), которые иногда называют картами (map). Рассмотрим их поподробней.

  1. Тьюпл . Он чем-то напоминает массив: состоит из элементов и имеет строго определенную длину. Элементами могут быть любые значения - простые константы или объекты. В отличие от массива, элементы тьюпла не обязательно однородны. А тем, что отличает тьюпл от списка (list) является то, что тьюпл не может быть изменен, т.е. мы не можем i-тому элементу тьюпла присвоить что-то новое и не можем добавлять новые элементы. Таким образом, тьюпл можно назвать списком-константой. Синтаксически тьюпл задается путем перечисления через запятую всех элементов, и все это заключено в круглые скобки:

  2. (1, 2, 5, 8)
    (3.14, ‘ string ’, -4)
    Все элементы индексируются с нуля. Для получения i-го элемента необходимо указать имя тьюпла затем индекс i в квадратных скобках. Пример:
    t = (0, 1, 2, 3, 4)
    print t, t[-1], t[-3]
    Результат : 0 4 2
    Таким образом, тьюпл можно было назвать вектором-константой, если бы его элементы всегда были однородными.
  3. Список . Хорошим, частным примером списка может служить строка (string) языка Turbo Pascal. Элементами строки являются одиночные символы, ее длина не фиксирована, имеется возможность удалять элементы или, напротив, вставлять их в любом месте строки. Элементами же списка могут быть произвольные объекты не обязательно одного и того же типа. Чтобы создать список, достаточно перечислить его элементы через запятую, заключив все это в квадратные скобки:


  4. [‘string’, (0,1,8), ]
    В отличие от тьюпла, списки можно модифицировать по своему желанию. Доступ к элементам осуществляется также как и в тьюплах. Пример:
    l = ]
    print l, l, l[-2], l[-1]
    Результат : 1 s (2,8) 0
  5. Словарь . Напоминает тип запись (record) в Pascal или структуры (structure) в С. Однако, вместо схемы "поле записи"-"значение" здесь применяется "ключ"-"значение". Словарь представляет собой набор пар "ключ"-"значение". Здесь "ключ" - константа любого типа (но преимущественно применяются строки), он служит для именования (индексирования) некоторого соответствующего ему значения (которое можно менять).

  6. Словарь создается путем перечисления его элементов (пар "ключ"-"значение", разделенных двоеточием), через запятую и заключения всего этого в фигурные скобки. Для получения доступа к некоторому значению необходимо, после имени словаря, в квадратных скобках записать соответствующий ключ. Пример:
    d = {"a": 1, "b": 3, 5: 3.14, "name": "John"}
    d["b"] = d
    print d["a"], d["b"], d, d["name"]
    Результат : 1 3.14 3.14 John
    Для добавления новой пары "ключ"-"значение" достаточно присвоить элементу с новым ключом соответствующее значение:
    d["new"] = "new value"
    print d
    Результат : {"a":1, "b":3, 5:3.14, "name":"John", "new":"new value"}

3. Python в отличие от Pascal, C, C++ не поддерживает работу с указателями, динамической памятью и адресную арифметику. В этом он похож на Java. Как известно, указатели служат источником трудноуловимых ошибок и работа с ними относится больше к программированию на низком уровне. Для обеспечения большей надежности и простоты они небыли включены в Python.

4. Одним из особенностей Python является то, как происходит присваивание одной переменной другой, т.е. когда по обе стороны от оператора "= " стоят переменные.

Следуя Тимоти Бадду (), будем называть семантикой указателей случай, когда присваивание приводит лишь к присваиванию ссылки (указателя), т.е. новая переменная становится лишь другим именем, обозначающим тот же участок памяти, что и старая переменная. При этом изменение значения, обозначаемого новой переменной, приведет к изменению значения старой, т.к. они, фактически, означают одно и то же.

Когда же присваивание приводит к созданию нового объекта (здесь объект - в смысле участка памяти для хранения значения какого-либо типа) и копированию в него содержимого присваиваемой переменной, этот случай назовем семантикой копирования . Таким образом, если при копировании действует семантика копирования, то переменные по обе стороны от знака "=" будут означать два независимых объекта с одинаковым содержанием. И здесь последующее изменение одной переменной никак не скажется на другой.

Присваивание в Python происходит следующим образом: если присваеваемый объект является экземпляром таких типов как числа или строки, то действует семантика копирования, если же в правой части стоит экземпляр класса, список, словарь или тьюпл, то действует семантика указателей. Пример:
a = 2; b = a; b = 3
print " семантика копирования: a=", a, "b=", b
a = ; b = a; b = 3
print " семантика указателей: a=", a, "b=", b
Результат :
семантика копирования: a= 2 b= 3
семантика указателей: a= b=

Для тех из вас, кто хочет знать в чем тут дело, я приведу другой взгляд на присваивание в Python. Если в таких языках как Basic, Pascal, C/C++ мы имели дело с переменными-"емкостями", и хранимыми в них константами (числовыми, символьными, строковыми - не суть важно), а операция присваивания означала "занесение" константы в присваиваемую переменную, то в Python мы уже должны работать с переменными-"именами" и именуемыми ими объектами. (Замечаете некоторую аналогию с языком Prolog?) Что же такое объект в Python? Это все то, чему можно дать имя: числа, строки, списки, словари, экземпляры классов (которые в Object Pascal и называются объектами), сами классы (!), функции, модули и т.д. Так вот, при присваивании переменной некоторого объекта, переменная становится его "именем", причем таких "имен" объект может иметь сколько угодно и все они никак не зависят друг от друга.

Теперь, объекты делятся на модифицируемые (мутируемые) и неизменные. Мутируемые - те, которые могут изменить свое "внутреннее содержание", например, списки, словари, экземпляры классов. А неизменные - такие как числа, тьюплы, строки (да, строки тоже; можно переменной присвоить новую строку, полученную из старой, но саму старую строку модифицировать не получится).

Так вот, если мы пишем a = ; b = a; b = 3 , Python это интерпретирует так:

  • дать объекту "список " имя a ;
  • дать этому объекту еще одно имя - b ;
  • модифицировать нулевой элемент объекта.

  • Вот и получилась "псевдо" семантика указателей.

    И последнее, что стоит сказать насчет этого: хотя нет возможности изменения структуры тьюпла, но содержащиеся в нем мутируемые компоненты по-прежнему доступны для модификации:

    T = (1, 2, , "string") t = 6 # так нельзя del t # тоже ошибка t = 0 # допустимо, теперь третья компонента - список t = "S" # ошибка: строки не мутируемы

    5. Весьма оригинальным является то, как в Python группируются операторы. В Pascal для этого служат операторные скобки begin-end , в C, C++, Java - фигурные скобки {}, в Basic применяются закрывающие окончания конструкций языка (NEXT, WEND, END IF, END SUB).
    В языке Python все гораздо проще: выделение блока операторов осуществляется путем сдвига выделяемой группы на один или более пробелов или символов табуляции вправо относительно заголовка конструкции к которой и будет относиться данный блок. Например:

    if x > 0: print ‘ x > 0 ’ x = x - 8 else: print ‘ x <= 0 ’ x = 0 Тем самым, хороший стиль записи программ, к которому призывают преподаватели языков Pascal, C++, Java и т.д., здесь приобретается с самого начала, поскольку, по-другому просто не получится.

    Описание языка. Управляющие конструкции



    Обработка исключительных ситуаций


    try:
    <оператор1>
    [ except [<исключение> [, <переменная>] ]:
    <оператор2>]
    [ else <оператор3>]
    Выполняется <оператор1>, если при этом возникла исключительная ситуация <исключение>, то выполняется <оператор2>. Если <исключение> имеет значение, то оно присваивается <переменной>.
    В случае успешного завершения <оператора1>, выполняется <оператор3>.
    try:
    <оператор1>
    finally:
    <оператор2>
    Выполняется <оператор1>. Если не возникло исключений, то выполняется <оператор2>. Иначе выполняется <оператор2> и немедленно инициируется исключительная ситуация.
    raise <исключение> [<значение>] Инициирует исключительную ситуацию <исключение> с параметром <значение>.

    Исключения - это просто строки (string). Пример:

    My_ex = ‘bad index’ try: if bad: raise my_ex, bad except my_ex, value: print ‘ Error ’, value

    Объявление функций



    Объявление классов



    Class cMyClass: def __init__(self, val): self.value = val # def printVal (self): print ‘ value = ’, self.value # # end cMyClass obj = cMyClass (3.14) obj.printVal () obj.value = " string now " obj.printVal () Результат:
    value = 3.14
    value = string now

    Операторы для всех типов последовательностей (списки, тьюплы, строки)


    Операторы для списков (list)


    s[i] = x i-тый элемент s заменяется на x.
    s = t часть элементов s от i до j-1 заменяется на t (t может быть также списком).
    del s удаляет часть s (также как и s = ).
    s.append (x) добавляет элемент x к концу s.
    s.count (x) возвращает количество элементов s равных x.
    s.index (x) возвращает наименьший i, такой, что s[i]==x.
    s.insert (i,j) часть s, начиная с i-го элемента, сдвигается вправо, и s[i] присваивается x.
    s.remove (x) то же, что и del s[ s.index(x) ] - удаляет первый элемент s, равный x.
    s.reverse () записывает строку в обратном порядке
    s.sort () сортирует список по возрастанию.

    Операторы для словарей (dictionary)


    Файловые объекты


    Создаются встроенной функцией open() (ее описание смотрите ниже). Например: f = open (‘mydan.dat’,‘r’) .
    Методы:

    Другие элементы языка и встроенные функции


    = присваивание.
    print [ < c1 > [, < c2 >]* [, ] ] выводит значения < c1 >, < c2 > в стандартный вывод. Ставит пробел между аргументами. Если запятая в конце перечня аргументов отсутствует, то осуществляет переход на новую строку.
    abs (x) возвращает абсолютное значение x.
    apply ( f, <аргументы>) вызывает функцию (или метод) f с < аргументами >.
    chr (i) возвращает односимвольную строку с ASCII кодом i.
    cmp (x, y) возвращает отрицательное, ноль, или положительное значение, если, соответственно, x <, ==, или > чем y.
    divmod (a, b) возвращает тьюпл (a/b, a%b), где a/b - это a div b (целая часть результата деления), a%b - это a mod b (остаток от деления).
    eval (s)
    возвращает объект, заданный в s как строка (string). S может содержать любую структуру языка. S также может быть кодовым объектом, например: x = 1 ; incr_x = eval ("x+1") .
    float (x) возвращает вещественное значение равное числу x.
    hex (x) возвращает строку, содержащую шестнадцатеричное представление числа x.
    input (<строка>) выводит <строку>, считывает и возвращает значение со стандартного ввода.
    int (x) возвращает целое значение числа x.
    len (s) возвращает длину (количество элементов) объекта.
    long (x) возвращает значение типа длинного целого числа x.
    max (s) , min (s) возвращают наибольший и наименьший из элементов последовательности s (т.е. s - строка, список или тьюпл).
    oct (x) возвращает строку, содержащую представление числа x.
    open (<имя файла>, <режим>=‘r’) возвращает файловый объект, открытый для чтения. <режим> = ‘w’ - открытие для записи.
    ord (c) возвращает ASCII код символа (строки длины 1) c.
    pow (x, y) возвращает значение x в степени y.
    range (<начало>, <конец>, <шаг>) возвращает список целых чисел, больших либо равных <начало> и меньших чем <конец>, сгенерированных с заданным <шагом>.
    raw_input ( [ <текст> ] ) выводит <текст> на стандартный вывод и считывает строку (string) со стандартного ввода.
    round (x, n=0) возвращает вещественное x, округленное до n-го разряда после запятой.
    str (<объект>) возвращает строковое представление <объекта>.
    type (<объект>) возвращает тип объекта.
    Например: if type(x) == type(‘’): print ‘ это строка ’
    xrange (<начало>, <конец>, <шаг>) аналогичен range, но лишь имитирует список, не создавая его. Используется в цикле for.

    Cпециальные функции для работы со списками


    filter (<функция>, <список>) возвращает список из тех элементов <спиcка>, для которых <функция> принимает значение "истина".
    map (<функция>, <список>) применяет <функцию> к каждому элементу <списка> и возвращает список результатов.
    reduce ( f, <список>,
    [, <начальное значение> ] )
    возвращает значение полученное "редуцированием" <списка> функцией f. Это значит, что имеется некая внутренняя переменная p, которая инициализируется <начальным значением>, затем, для каждого элемента <списка>, вызывается функция f с двумя параметрами: p и элементом <списка>. Возвращаемый f результат присваивается p. После перебора всего <списка> reduce возвращает p.
    С помощью данной функции можно, к примеру, вычислить сумму элементов списка: def func (red, el): return red+el sum = reduce (func, , 0) # теперь sum == 15
    lambda [<список параметров>] : <выражение> "анонимная" функция, не имеющая своего имени и записываемая в месте своего вызова. Принимает параметры, заданные в <списке параметров>, и возвращает значение <выражения>. Используется для filter, reduce, map. Например: >>>print filter (lambda x: x>3, ) >>>print map (lambda x: x*2, ) >>>p=reduce (lambda r, x: r*x, , 1) >>>print p 24

    Импортирование модулей



    Стандартный модуль math


    Переменные: pi , e .
    Функции (аналогичны функциям языка C):

    acos(x) cosh(x) ldexp(x,y) sqrt(x)
    asin(x) exp(x) log(x) tan(x)
    atan(x) fabs(x) sinh(x) frexp(x)
    atan2(x,y) floor(x) pow(x,y) modf(x)
    ceil(x) fmod(x,y) sin(x)
    cos(x) log10(x) tanh(x)

    Модуль string


    Функции:

    Заключение


    Благодаря простоте и гибкости языка Python, его можно рекомендовать пользователям (математикам, физикам, экономистам и т.д.) не являющимся программистами, но использующими вычислительную технику и программирование в своей работе.
    Программы на Python разрабатываются в среднем в полтора-два (а порой и в два-три) раза быстрее нежели на компилируемых языках (С, С++, Pascal). Поэтому, язык может представлять не малый интерес и для профессиональных программистов, разрабатывающих приложения, не критичные к скорости выполнения, а также программы, использующие сложные структуры данных. В частности, Python хорошо зарекомендовал себя при разработке программ работы с графами, генерации деревьев.

    Литература


    1. Бадд Т. Объектно-ориентированное программирование. - СПб.: Питер, 1997.
    2. Guido van Rossum . Python Tutorial. (www.python.org)
    3. Chris Hoffman . A Python Quick Reference. (www.python.org)
    4. Guido van Rossum . Python Library Reference. (www.python.org)
    5. Guido van Rossum . Python Reference Manual. (www.python.org)
    6. Гвидо ван Россум . Семинар по программированию на Python. (http://sultan.da.ru)