1 Введение в программирование на Python. Введение в программирование на Python Введение в язык Python
Скачать 315.09 Kb.
|
Введение в программирование на PythonВведение в язык PythonЯзык Python – это высокоуровневый интерпретируемый язык программирования, нацеленный на повышение продуктивности разработки и читаемости кода. Синтаксис Pythonминималистичен, и в то же время язык обладает богатой стандартной библиотекой с широким набором функций. Ввиду своей простоты и наглядности и большого количества библиотек по работе с данными Python на сегодня является одним из самых популярных языков для решения самых разных задач. Установка интерпретатора Python и необходимых модулейНаиболее простой способ установить Python с необходимыми библиотеками – скачать дистрибутив Anaconda, который уже включает всё необходимое: Python, интерактивную оболочку IPython, набор библиотек для расчётов и моделирования и т.д. Скачать дистрибутив Anaconda для своей операционной системы можно на сайте http://continuum.io. Необходимо запустить загруженный инсталлятор. При установке все настройки можно оставить поумолчанию. Можно ставить Python и не из дистрибутива Anaconda. Тогда для установки некоторых библиотек необходимо будет предварительно установить Build Tools, так как некоторые библиотеки представлены в виде исходного кода, который должен быть скомпилирован на целевой платформе. Работа с интерпретатором PythonДистрибутив Anaconda включает в себя среду Spyder. Среда позволяет редактировать скрипты Python и выполнять их, выполнять команды в консоли Python и IPython, отображает справку по функциям и параметрам функций, обладает автодополнением кода, визуальными подсказками, ведёт журнал выполненных команд, которые затем могут быть сохранены в скрипт и т.д. При первом запуске Spyder может возникнуть ошибка: Рисунок 1 Сообщение об ошибке при запуске Spyder Проблема решается следующим образом. Пусть Anaconda установлена в каталог ANACONDA_DIR (по умолчанию это c:\Users\ Вот как выглядит главное окно Spyder: Рисунок 2Главное окно Spyder В левой части расположен редактор скриптов с подсветкой синтаксиса и автодополнением. Писать код можно в нём. В правой части экрана сверху можно посмотреть информацию по переменным, расположенным в памяти, их типу и размерности. Рисунок 3Менеджер переменных Следующая вкладка позволяет просматривать структуру каталогов, выполнять операции с файлами, запускать Python для указанного каталога. Рисунок 4 Файловый менеджер Следующая вкладка отображает справку по указанному модулю или функции. Для отображения справки необходимо поставить курсор на интересующую функцию и нажать сочетание клавишCtrl+I. Рисунок 5 Отображение справки по функциям и модулям Справку по заданному модулю или функции можно получить и из консоли Python (см. про консоль ниже), выполнив команду help с параметром, например help('numpy.random.shuffle') Справа внизу располагается консоль Python, журнал выполненных команд и консоль IPython. Здесь можно вводить свои команды и экспериментировать с возможностями языка. Рисунок 6 Стандартная консоль Python Рисунок 7Журнал выполненных команд Скрипты можно создавать не только в Spyder, но и в любом текстовом редакторе. Удобно для этого использовать редактор с подсветкой синтаксиса, например, SublimeText или Notepad++. Кроме того, существуют полноценные IDE (интегрированные среды разработки с редактором кода, автодополнением, отладчиком, рефакторингом и т.д.). Одной из лучших бесплатных IDE на сегодня является PyCharm от JetBrains. Рисунок 8 Окно редактора Sublime Text Рисунок 9Окно IDE PyCharm Запустить созданный скрипт (текстовый файл с расширением .py) можно через командную строку, выполнив в ней команду: >python script.py где script.py – запускаемый скрипт. Вот пример запуска скрипта Python: Рисунок 10Запуск скрипта Pythonчерез командную строку Справка по базовым возможностям языка PythonПеременные и типы данныхВ Python, как и в любом другом языке программирования, можно объявлять переменные, массивы, словари. Например a = 10 # переменная b = [1, 2, 3] # массив c = {‘name’: ‘lemon’, ‘color’: ‘yellow’} # словарь Как уже было сказано выше, Python является динамически типизируемым языком, поэтому тип переменных может измениться. Узнать текущий тип переменной можно с помощью встроенной функции type: >>> a = 1 >>>type(a) >>> a = [1, 2, 3] >>>type(a) >>> a = {'a': 1, 'b': 2, 'c': 3} >>>type(a) >>> a = True >>>type(a) >>> Ещё одной интересной особенностью Python как динамического языка является то, что элементы массива или словаря могут хранить значения разных типов, например >>>player = {'rating': 180, 'scores': [35, 18, 41], 'active': True} >>>player['scores'] [35, 18, 41] Полезной на практике возможностью является использование кортежей – групп переменных. Например, описать человека с помощью значений роста и веста можно так: human = (182, 86) human[0] # 182 – рост human[1] # 86 - вес Кортежи могут выступать в качестве параметров функций, например, вот так создаётся единичная матрица размера 2×3 с помощью библиотеки NumPy: >>>importnumpyasnp >>> m = np.ones(shape=(2, 3), dtype=int) >>> m array([[1, 1, 1], [1, 1, 1]]) Кортежи удобны, когда нужно вернуть несколько значений из функции, например def max_(arr): max_idx, max_val = 0, 0 fori in range(len(arr)): ifarr[i] >max_val: max_val = arr[i] max_idx = i returnmax_val, max_idx res = max_([2, 5, 4, 1]) print(res[0], res[1]) Этот код выведет следующие значения: 5 1 Это максимальное значение в массиве и его индекс. Приведённый выше код интересен по нескольким причинам. Во-первых, он показывает, что можно инициализировать несколько переменных сразу (хотя такой подход не рекомендуется, так как он запутывает код): max_idx, max_val = 0, 0 Во-вторых, из примера видно, что для обозначения границ блоков кода используются не скобки или ключевые слова, а отступы. Именно эта особенность делает программы на Python наглядными. Общепринято для отступов блоков кода использовать пробелы, а не табуляцию. Настройте свой редактор соответствующим образом (Spyder поумолчанию использует пробелы). ОперацииВ Python есть все базовые операции: сложение, вычитание, умножение, деление, возведение в степень, остаток от деления, круглые скобки для управления приоритетом операций. Но есть некоторые особенности, присущие именно Python. Операция деления (/) в Python не целочисленная: >>> 5 / 2 2.5 Чтобы выполнить именно целочисленное деление, необходимо использовать два прямых слэша: >>> 5 // 2 2 Возведение в степень выполняется с помощью оператора **, например >>> 5**2 25 Операция сложения (+) для чисел даст число, для строк и массивов – выполнит их конкатенацию: >>> 3 + 4 7 >>> '3' + '4' '34' >>> [1, 2, 3] + [4, 5] [1, 2, 3, 4, 5] Управление выполнением программы в PythonУсловияУсловия в Python записываются с помощью if-else. После ключевого слова if следует условие, затем двоеточие. Код внутри блока if пишется со следующей строки с отступом. Например height = int(input('Введитерост: ')) ifheight> 180: print('Высокий') Можно использовать if в сочетании else. else в данном случае пишется с тем же отступом, что и if, после else следует двоеточие. Например height = int(input('Введитерост: ')) if height > 180: print('Высокий') else: print('Низкий') Можно использовать сочетание условий благодаря конструкции if-elif-else. Например height = int(input('Введитерост: ')) size = 'S' if height < 160: size = 'S' elif height < 170: size = 'M' elif height < 180: size = 'L' else: size = 'XL' print(size) Можно записывать сложные условия, используя ключевые слова not, and, or, проверки на равенство == и неравенство !=. if 165 < height < 175: print('Среднийрост') sun = True rain = False if sun and not rain: print('Можно выйти на прогулку') if 2 * 2 == 4 and 2 * 2 != 5: print('Прописные истины') ЦиклыВ Python есть 2 типа циклов: while и for. Цикл while выполняет выражение до тех пор, пока условие не станет истинным: whileinput('q для выхода: ') != 'q': print('Выполнение программы') Цикл for является аналогом цикла for в C++. Он позволяет выполнять заданное количество итераций, проходить по элементам коллекции. Например, вот так можно обработать все элементы массива: for item in [1, 2, 3]: print(item) Вместо массива могут быть и другие коллекции и даже строки: for letter in 'String': print(letter) Часто при решении практических задач требуется указать начальное, конечное значение счётчика и шаг изменения. Для этого необходимо воспользоваться функцией range. Если в функцию передан один параметр, то это будет конечное значение счётчика, начинающегося с 0 с шагом 1. Если 2 параметра, то это будут начальное и конечное значения счётчика. Если в функцию передан третий параметр, то он будет отвечать за шаг изменения счётчика. Вот как может выглядеть код для вывода нечётных цифр от 1 до 10: fori in range(1, 10, 2): print(i) У цикла for есть ещё альтернативная однострочная форма записи. Вот как можно переписать код из примера выше в одну строку: [print(i) for i in range(1, 10, 2)] Но такой подход чаще используют для генерации значений массивов. Пусть, например, требуется создать массив из степеней двойки. Вот как это может быть реализовано: >>>powers_of_two = [2**i for i in range(9)] >>>powers_of_two [1, 2, 4, 8, 16, 32, 64, 128, 256] В Python есть ключевые слова break и continue, смысл которых такой же, как в C++. break прерывает цикл, continue позволяет пропустить текущую итерацию и перейти к следующей. >>>for letter in 'привет': ... if letter == 'р': ... continue ... print(letter, end='') ... пивет Но в отличие от C++, в Python есть особенность. После цикла for можно указать блок else, который выполнится в том случае, если в цикле была выполнена инструкция continue или break: for letter in 'привет': if letter == 'e': break else: print('Встретилась буква е') Обработка исключенийПри работе программы могут возникнуть исключительные ситуации, например, деление на ноль или переполнение стека. Такие ситуации необходимо отлавливать и корректно обрабатывать. Для этого создан механизм исключений. Обработка исключений в Python очень похожа на обработку исключений в C++. В простейшем случае перехват исключений может быть реализован с использованием инструкций try-except: try: a = int(input('Первый множитель: ')) b = int(input('Второй множитель: ')) print('Результат: %d' %(a * b)) except Exception: print('Некорректные аргументы') Перехватывать можно разные исключения. В идеале, должен быть свой обработчик под каждый возможный тип исключений. Вот некоторые возможные исключения: ZeroDivisionError (деление на ноль), OverflowError (результат арифметической операции слишком велик для представления числа), ImportError (не удалось импортировать модуль) и т.д. Кроме ключевых слов try и except при обработке исключений могут использоваться инструкции finally и else. finally выполняет блок инструкций в любом случае, было ли исключение или нет (например, когда необходимо закрыть файл). Инструкция else выполняется в том случае, если исключения не было. Создание собственных функцийОбъявление собственных функций в Python начинается с ключевого слова def, за которым через пробел идёт имя функции, а в скобках список её параметров. После закрывающей скобки ставится двоеточие. Тело функции пишется с отступом в 2 или 4 пробела (в зависимости от принятого соглашения). Если функция должна вернуть значение, его записывают после ключевого слова return. Функция может возвращать несколько параметров (см. пример выше – функция max_). Вот пример функции, определяющей минимальное и максимальное среди переданных двух чисел: defminmax(a, b): return (a, b) if a < b else (b, a) Функции могут параметры по умолчанию. Например, если приведённую ниже функцию вызвать без параметра, она вернёт факториал 5: >>>def factorial(n=5): ... return n * factorial(n - 1) if n > 1 else 1 ... >>>factorial() 120 >>>factorial(3) 6 Импорт функций из других файловЧасто удобно бывает поместить часто используемые функции в отдельный файл, а затем подключать их в свой скрипт и использовать в работе. Ещё более распространённый случай – использование некоторых функций из сторонней библиотеки. Самый простой способ подключения внешнего файла – директива import. Например import math Чтобы теперь использовать функции из модуля math, необходимо сначала писать имя модуля, затем точку и имя функции: >>>math.sqrt(4) 2.0 Чтобы не приходилось каждый раз писать имя модуля, можно воспользоваться такой записью: frommathimport * Тогда можно будет вызывать функции напрямую без указания имени модуля: >>>sqrt(4) 2.0 Звёздочка означает, что будут импортированы все функции из модуля. Можно указать только конкретные функции: >>>frommathimportsqrt, sin >>>sin(0) 0.0 >>>cos(0) NameError: name 'cos' is not defined >>>Traceback (most recent call last): File " Но на практике такой подход не рекомендуется из-за того, что в разных модулях могут присутствовать функции с одинаковыми именами: >>>from math import * >>>fromnumpy import * >>>sqrt(4) # какая реализация используется? math или numpy? Поэтому чаще для модулей задают псевдонимы, как показано в примерах ниже: >>> import numpy as np >>> import matplotlib.pyplot as plt >>>np.sqrt(4) 2.0 КомментарииОднострочные комментарии в Python начинаются с символа #. Например # это пример однострочного комментария Многострочные комментарии заключаются в тройные кавычки (одинарные или двойные). Например deffactorial(n): ''' Рекурсивная функция вычисления факториала числа n ''' return 1 if n == 1 else n * factorial(n - 1) Этот пример показывает ряд интересных особенностей Python. Во-первых, многострочный комментарий внутри функции. Во-вторых, пример рекурсивной функции (функция factorial вызывает сама себя). В-третьих, интересная однострочная запись условия if-else, напоминающая тернарную операцию в C++. Многострочные комментарии обычно используются для документирования функций и классов, поэтому с помощью такого кода можно вывести справку по функции на экран: >>>factorial.__doc__ '\n Рекурсивная функция вычисления факториала числа n\n ' |