Главная страница
Навигация по странице:

  • Variable explorer . Окно Spyder должно принять следующий вид. Панель Variable explorer

  • IPython console . Эта консоль содержит собственное пространство имен. Поэтому панель Variable explorer

  • Операторы управления вычислительным процессом

  • Введение в научный Python-1. Введение в научный Python


    Скачать 6.2 Mb.
    НазваниеВведение в научный Python
    Дата09.01.2020
    Размер6.2 Mb.
    Формат файлаpdf
    Имя файлаВведение в научный Python-1.pdf
    ТипДокументы
    #103229
    страница3 из 22
    1   2   3   4   5   6   7   8   9   ...   22
    Jupyter Notebook популярная бесплатная интерактивная оболочка. Она позволяет объединить код, текст и графику в одном файле. Прежнее ее название – IPython Notebook. Его изменили, чтобы подчеркнуть совместимость

    22 не только с Python, но и другими языками программирования. Jupyter также включен в состав пакета Anaconda.
    Если вы установили пакета Anaconda, то Jupyter Notebook найдете в меню
    Все программы – Anaconda3 (64–bit)-Jupyter Notebook
    . При выполнении этой команды появляется окно с черным фоном и открывается браузер с закладкой, в которой находится система навигации по файлам и папкам. Черное окно – это сама программа, которая выполняет вычисления. Мы им пользоваться не будем, но и закрывать его нельзя, иначе Jupyter в браузере не будет работать. Лучше всего его свернуть.
    На открывшейся закладке браузера справа вверху нажмите кнопку
    New и выберите команду
    Python 3
    В браузере открывается новая закладка с рабочим документом Jupyter.
    В его верхней части расположены меню и элементы управления документом, а ниже – единственная пока секция ввода. Введите в ней 2+2 и нажмите кнопку
    . Вместо кнопки можно нажать комбинацию клавиш
    Shift
    – Enter
    . Ниже нашей секции появится поле с результатом, а рядом – метки In[1] и Out[1], идентифицирующие поля ввода и вывода. Кроме того, появится вторая секция.
    В ней можно ввести новую команду, но можно отредактировать код в первой

    23 секции и выполнить его заново. Если время выполнения кода большое, то вы успеете увидеть звездочку внутри метки In[*], которая означает, что система находится в процессе вычислений.
    Введите во второй секции команду
    %pylab inline
    Она является указанием среде Jupyter встраивать в его документы графику, генерируемую библиотекой Matplotlib.
    В следующей секции введите две команды (после первой строчки нажмите
    Enter
    ). x=[2,-3,5,9,4,7,-2,4] plot(x);
    Нажмите комбинацию клавиш
    Shift
    – Enter
    . Код выполнится и будет построен график ломаной. Результирующий вид документа приведен на следующем рисунке.
    Документы Jupyter Notebook состоят из секций двух типов: ячеек с кодом и текстовых ячеек. Выше были приведены примеры секций/ячеек с кодом. Чтобы в секции вводить и форматировать обычный текст, вы должны установить курсор внутрь секции и на панели инструментов в выпадающем списке выбрать тип ячейки Markdown.

    24
    Markdown – это язык разметки текста. В секции такого типа с помощью простых команд–тегов (наподобие HTML) можно форматировать текст.
    Команда
    Shift
    – Enter переводит текстовую секцию из режима редактирования в режим отображения и обратно. Изучение языка Markdown не входит в нашу задачу, однако для простых операций форматирования этого не требуется.
    Перейдите в новую секцию документа, и выберите для нее тип
    Markdown
    . Справа вверху должен появиться символ «карандаш», который означает, что вы находитесь в режиме редактирования.
    Введите в секции следующий текст
    ## Привет Физтех.
    #### Это пример форматирования текста в Jupyter Notebook.
    *Маркированный список*
    * Элемент 1 списка
    * Элемент 2 списка
    **Нумерованный список**
    1. Первый элемент
    2. Второй элемент.
    Здесь символы решеток, звездочек и двойных звездочек являются командами форматирования языка Markdown. Они управляют способом отображения последующего текста. Нажмите комбинацию клавиш
    Shift
    – Enter и вы получите отформатированную ячейку следующего вида.
    В приведенном выше коде, символы ## и #### означают представление текста, идущего следом, в виде заголовков второго (две решетки) и четвертого уровней (четыре решетки). Всего может быть 6 уровней заголовков. Между решетками и текстом должен быть пробел. Выделение и сильное выделение
    (полужирное начертание) текста выполняется заключением его между звездочками

    25
    *Маркированный список*
    или двойными звездочками
    **Нумерованный список**
    Элементы маркированного списка должны начинаться символом „*„
    (звездочка), за которым следует пробел, знаком „–„ (минус) или „+„ (плюс) тоже с последующими пробелами. Элементы нумерованного списка предваряются цифрами, причем цифра в начале строки не имеет значения, а элементы нумеруются по порядку.
    В «Markdown» ячейках можно выполнять и более сложное форматирование, помещать в них изображение, видео и любые другие данные, которые в состоянии отображать современный браузер.
    Сделаем еще несколько замечаний. Команда
    Shift
    – Enter выполняет код секции и переводит курсор в следующую ячейку, которая открывается для редактирования. Команда
    Ctrl
    – Enter делает то же самое, но не переводит фокус на другие ячейки. Команды
    Esc
    – A
    и
    Esc
    – B
    вставляют новые ячейки выше или ниже текущей. Помимо этого, вы можете возвращаться к предыдущим ячейкам и выполнять их код. При этом используются последние
    (во времени) значения переменных (объектов). Если строку кода закончить символом „;‟ (точка с запятой), то код этой строки выполняется, но результат в поле вывода не отображается. Это, в частности, полезно для графических функций, которые кроме построения графиков, выводят служебную информацию.
    Справка в Jupyter Notebook открывается из меню Help. Она содержит список быстрых клавиш (Keyboard Shortcuts), описание оболочки (Notebook
    Help), справочную информацию по языкам Markdown и Python, а также описание среды выполнения IPython, известной нам как Jupyter. Из этого меню также можно получить справку по множеству научных и технических библиотек Python.

    26
    Для того, чтобы получить информацию о функции можно поставить знак вопроса, набрать имя функции, и выполнить код ячейки.
    ?print
    В текущем окне браузера ниже окна документа откроется панель с информацией об объекте. Знак вопроса можно написать и после имени функции. import numpy as np np.linspace?
    Это сработает для любой переменной, функции, объекта или метода. Если отображенной информации недостаточно, то используйте два вопросительных знака. Исполнительная система найдет файл с исходным кодом, и ту часть в нѐм, где запрашиваемый объект определен.
    Для просмотра списка доступных методов объекта достаточно ввести его имя, поставить точку (и, если надо, несколько первых букв имени), и нажать клавишу TAB. Например, создадим массив a командой a=np.array([1,2,3,4])
    В следующей секции поставьте букву a, точку, и нажмите TAB. Вы увидите список атрибутов и методов этого объекта (массива).
    У самой программы Jupyter Notebook имеются собственные инструкции, которые начинаются со знака „%‟ (процент) и называются «магическими» командами. О многих из них мы говорили при описании возможностей консоли
    IPython. Одну из них, которая приказывает встраивать в документ графику
    Matplotlib, мы использовали выше:
    %pylab inline
    Завершение работы браузера или закрытие вкладки с Jupyter документом не останавливает работу сервера исполнительной системы. Для полной остановки следует закрыть консольное (черное) окно, ассоциированное с сервером. Оно было у нас все время свернуто или находилось на заднем плане. Завершить работу можно также из меню
    File текущего Jupyter документа, если выбрать в нем команду
    Close and Halt
    Spyder – интегрированная среда разработки и выполнения Python программ.
    Название Spyder расшифровывается как Scientific PYthon Development
    EnviRonment. Программа создавалась специально для выполнения научных расчетов и напоминает систему математических вычислений MatLab. Spyder

    27 включен в состав дистрибутива Anaconda и содержит редактор, предназначенный для разработки Python программ, а также интерпретаторы
    Python Shell и IPython, любой из которых можно использовать для выполнения команд и программ.
    Если вы установили пакета Anaconda, то Spyder вы найдете в меню
    Все программы–Anaconda3(64–bit)-Spyder
    . Его главное окно разделено на несколько панелей. Если вы не меняли настроек, то слева у вас откроется окно редактора кода, а в правой нижней части будут расположены одна над другой панели двух консолей: Python и IPython. Команды можно выполнять в любой из них. Пусть это будет стандартная консоль Python. Введите в ней следующие команды:
    >>> a=2
    >>> b=3
    >>> c=a+b
    >>> d=a**b
    В правом верхнем углу перейдите на закладку
    Variable explorer
    . Окно
    Spyder должно принять следующий вид.
    Панель
    Variable explorer
    отображает пространство имен в виде таблицы имен глобальных переменных, их типов, размеров и значений. При этом поле значений в этой таблице можно редактировать. Сделайте двойной щелчок мыши по полю
    Value
    переменной c и измените значение на 10.6. Затем в консоли выполните команду
    >>> c
    10.6

    28
    Вы видите, что тип и значение переменной изменились.
    Все команды, введенные в консоли, выполняются в отдельном процессе, который содержит свое пространство имен, и пользователь в любой момент может процесс прервать.
    Чтобы выполнить программу (файл) из консоли, следует использовать функцию runfile(„имя_файла.py‟). Например, создайте в текстовом редакторе файл со следующим кодом:
    # файл ex001.py print("Простая программа")
    Сохраните его под именем ex001.py. Затем в консоли подайте команду
    >>> runfile('ex001.py')
    Простая программа
    Файл, открытый в редакторе, можно выполнить с помощью кнопки или клавиши F5. Однако не все файлы имеет смысл открывать в редакторе.
    Чтобы получить справку по какой–либо функции (или объекту) в консоли следует выполнить команду help(имя_функции). Например,
    >>> help(list)
    Также в этой консоли действует автозавершение команд. Оно осуществляется вводом нескольких первых букв имени функции или объекта с последующим нажатием комбинации клавиш
    Ctrl
    – пробел
    . Затем в выпадающем списке с помощью клавиш управления курсором (↓ и ↑) выбирается нужное имя и нажимается клавиша
    Tab
    . В командной строке появляется выбранное вами имя.
    Если это имя функции, то следует ввести открывающую скобку, аргументы и закрывающую скобку. В принципе, ввод и редактирование команд в этой консоли выполняется аналогично Python Shell, и мы на этом останавливаться не будем.
    Теперь активизируйте вкладку
    IPython console
    . Эта консоль содержит собственное пространство имен. Поэтому панель
    Variable explorer
    очистится (она показывает пространство имен активного интерпретатора). У этой консоли функциональные возможности такие же, как у Jupyter QtConsole.
    Ввод, редактирование и выполнение команд выполняется точно так же. В ней доступны все магические команды IPython, и имеется такая же возможность отображать в документе графику.
    Обратимся к текстовому редактору. Он используется для ввода текстов программ и умеет по–разному подсвечивать код. Как сказано выше, для выполнения программы (всего кода, набранного в редакторе) следует использовать кнопку или клавишу F5.
    Кроме того, редактор обладает еще одной особенностью – можно выполнять только часть кода (мы не упоминали, но в редакторе IDLE также реализована эта возможность). Вернитесь в текстовый редактор и в файле ex001.py введите еще одну строку: print("Привет универу!"). Выделите только текст этой строки и нажмите клавишу F9. В активной консоли (в нашем случае в IPython) в строке ввода отобразится и будет выполнена выделенная команда.

    29
    In
    [1]: print("Привет универу!")
    Привет универу!
    Аналогично можно выполнять целые блоки кода. Введите в том же файле следующий код: import numpy as np import matplotlib.pyplot as plt x=[0,1,2,3,4,5,6,7] y=np.sin(x) plt.plot(x,y);
    Выделите эту часть кода и нажмите клавишу F9. Код выполнится, и панель
    IPython примет вид
    Для экономии места мы привели изображение только одной панели, а не всего окна Spyder. Таким образом, в текстовом редакторе можно любой код вводить по частям, и частями же выполнять его. Для разделения кода на части в редакторе можно использовать команду
    #%%
    Например, если в тексте файла ex001.py несколько раз вставить такую команду, то файл примет следующий вид:

    30
    Однако команда „
    #%%
    ‟ создает только видимое разбиение на блоки, проводя только разделительные линии. Никакого реального разбиения файла на ячейки не происходит.
    Можно настроить среду Spyder для работы преимущественно с IPython консолью. Для этого захватите мышью заголовок панели IPython и перетащите его, расположив консоль IPython поверх редактора. Затем, если нужно, растяните границы окна консоли. Окно Spider примет следующий вид.
    Здесь в панели IPython мы привели пример построения графика функции двух переменных. Ниже приведен его код.
    In[1]: from matplotlib.pyplot import *
    In[2]: from mpl_toolkits.mplot3d import Axes3D
    In[3]: from numpy import (linspace, meshgrid, pi, sin, sqrt)
    In[4]: u=linspace(-4*pi,4*pi,50);\ x,y=meshgrid(u,u);\ r=sqrt(x**2+y**2);\ z=sin(r)/r;\ fig=figure();\ ax=Axes3D(fig);\ ax.plot_surface(x,y,z,rstride=1,cstride=1);
    В конце каждой строки стоит символ „\‟ (обратный слэш), который является признаком продолжения строки. Точки, которые видны на рисунке и стоят слева в начале каждой строки, появляются автоматически после нажатия клавиши
    Enter
    . Можно обойтись без символа продолжения „\‟. Если в IPython
    Spyder вы желаете набрать несколько однострочных команд в одной секции, то после первой строки нужно нажать комбинацию клавиш
    Ctrl
    – Enter
    Последующие строки следует завершать нажатием клавиши
    Enter
    . Для

    31 завершения ввода всей многострочной инструкции и выполнения кода секции следует два раза нажать
    Enter
    Ввод многострочной команды в IPython консоли выполняется так же, как обычно, но отступы нужно делать от многоточий,
    In[8]:
    for n in range(1,5):
    ...:
    print(n, end=" ")
    ...: и аналогично, дважды нажимать
    Enter для завершения команды.
    1 2 3 4
    Чтобы перетащить IPython консоль обратно, надо захватить мышью верхнюю строку ее панели, в которой написано IPython console, и переместить, например, на прежнее место.
    Надеемся, что с другими панелями Spyder вы разберетесь самостоятельно, когда лучше познакомитесь с языком программирования
    Python.
    2.
    Основные языковые конструкции Python
    В этой главе мы продолжим изучения языка программирования Python. При этом будем выполнять примеры в интерпретаторе Python Shell или в консоли
    Spyder. На это будут указывать символы приглашения „>>>‟, которые мы будем использовать при записи инструкций. Однако вы уже познакомились с другими интегрированными средами разработки, и примеры можете выполнять в любой из них.
    2.1
    Типы данных и операторы управления
    Типы данных. Описания типов переменных в Python нет. Это означает, что при присваивании переменной значения интерпретатор автоматически относит переменную к одному из типов данных. Вот перечень основных типов:

    bool – логический тип данных;

    int – целые числа;

    float – вещественные числа;

    complex – комплексные числа;

    str – unicode–cтpoки;

    list – списки;

    tuple – кортежи;

    dict – словари;

    function – функции;
    Есть и другие, реже используемые, типы. Для определения типа переменной предназначена функция type().
    >>> a=45
    >>> type(a)


    32
    >>> L = [1, 3, 5]
    >>> type(L)

    Имена типов по совместительству являются функциями, преобразующими в этот тип объекты других типов (если преобразование имеет смысл).
    >>>float(2)
    2.0
    >>>int(-2.9)
    # отбрасывание дробной части
    -2
    >>> bool(23)
    # любое число, отличное от нуля, преобразуется в True
    True
    >>> bool(0)
    # ноль преобразуется в False
    False
    >>> x="321"
    # преобразование строки в целое
    >>> y=int(x); y
    321
    >>> y+100 421
    >>> z='34.123'
    >>> w=float(z); type(w)
    # преобразование строки в вещественное число

    Операторы управления вычислительным процессом. Обычно программа состоит из текстового файла, имеющего расширение имени *.py (или *.pyw для программ с оконным интерфейсом), который можно создавать в любом текстовом редакторе. В Python Shell вы можете использовать встроенный редактор, который вызывается из его меню командой
    File
    – New File
    . В Spyder тоже имеется свой редактор, окно которого обычно занимает его левую половину. Независимо от того, какой редактор используется, при написании кода программ следует придерживаться определенных правил.
    Команды программы вводятся последовательно, строка за строкой.
    Строка должна иметь вид такой, как если бы она была записана в командной строке интерпретатора. В текстовом файле программы все операторы одного уровня должны иметь один и тот же отступ или не иметь его вовсе. Вложенные операторы (тела функций, условных операторов, операторов цикла) должны иметь одинаковый отступ, если они не являются вложенными во вложенные операторы. Особенность языка Python состоит в том, что в нем отсутствуют ограничительные символы для выделения инструкций внутри блока.
    Вложенность определяется величиной отступа. Например, в следующем примере тело цикла состоит из двух операторов и они должны иметь одинаковый отступ (обычно длину табуляции). i=1 while i<5: print(i,end=" ") i+=1 1 2 3 4

    33
    Инструкции, перед которыми расположено одинаковое количество пробелов, являются телом блока (в данном случае телом цикла). Концом блока является инструкция, перед которой расположено меньшее количество пробелов. В языке Python принято использовать четыре пробела для выделения инструкций внутри блока.
    Приведенную программу вы можете ввести и выполнить в командном окне интерпретатора, если будете руководствоваться правилом, что после ввода двоеточия и нажатия клавиши
    Enter
    , следующую строку следует набирать с отступом, а концом ввода блока (концом ввода многострочной команды) является двойное нажатие клавиши
    Enter
    Инструкции программы выполняются по порядку, начиная с первой.
    Порядок выполнения может быть изменен с помощью специальных операторов цикла или условного выбора. Оператор цикла позволяет выполнить одни и те же инструкции, которые называются телом цикла, многократно. В языке
    Python используются два цикла: for и while. Цикл for применяется для перебора элементов последовательности и имеет следующий формат: for
    Элемент in
    Последовательность
    :
    тело цикла
    [
    else:
    необязательный блок, выполняемый, если не использовался оператор break
    ]
    Под термином «последовательность» здесь понимаются такие объекты как кортежи, списки, строки, словари и другие, для которых определены средства последовательного перебора их элементов.
    Простейший вид цикла – это цикл по элементам списка.
    >>> L=[10,20,30,40,50]
    >>> for x in L: print(x**2,end=" ")
    100 400 900 1600 2500
    Очень часто используются циклы по диапазонам целых чисел. for i in range(5): print(i,end=" ")
    0 1 2 3 4
    В Python 3 функция range() создает специфический объект, поддерживающий перебор его элементов в цикле. Элементы этого объекта всегда целые числа.
    Объект range позволяет получать значения элементов по индексу, отсчитываемому от 0. Функция range() имеет следующий формат:
    range([start,] stop[,step])
    Если параметр start не указан, то по умолчанию используется 0. Если параметр step не указан, то используется значение 1. Элемент с индексом start включается в последовательность, а элемент с индексом stop – нет.
    >>> r=range(5)
    # содержит элементы: 0,1,2,3,4
    >>> r[3]
    3

    34
    Чтобы из такого объекта получить список, его следует передать аргументом в функцию list().
    >>> m=range(3,8)
    >>> list(m)
    [3, 4, 5, 6, 7]
    Цикл while применяется в тех случаях, когда заранее неизвестна последовательность. Он имеет следующий формат: while условие: тело цикла изменение переменных, используемых в условии
    [
    else:
    необязательный блок, выполняемый, если не использовался оператор break
    ]
    Тело цикла while выполняется до тех пор, пока истинно условие (логическое выражение), указанное в его начале. Перед началом цикла while переменным, используемым в логическом выражении, должны быть присвоены какие–либо начальные значения.
    >>> L=[1,3,5,2,-8,4]
    >>> i=0
    >>> while L[i]>0:
    # пока элементы списка положительны print(L[i]**3,end=" ") i+=1 1 27 125 8 while L:
    # пока список не пуст print(L[0],end=" ")
    L=L[1:]
    # удаление из списка первого элемента
    1 3 5 2 -8 4
    L
    [ ]
    >>> L=[1,3,5,2,-8,4]; i=5
    >>> while i:
    # печать списка в обратном порядке print(L[i],end=" ") i-=1 4 -8 2 5 3
    Условие в последнем операторе while не содержит сравнения. На каждой итерации цикла из значения переменной (счетчика) i вычитается единица. Как только значение i станет равным нулю, цикл остановится, поскольку число 0 в логическом выражении эквивалентно значению False.
    Если тело цикла состоит из одной инструкции, то допустимо поместить ее на одной строке с основной инструкцией. for i in range(1,11): print(i)
    Если инструкция является слишком длинной, то ее можно перенести на следующую строку несколькими способами. Можно в конце строки написать

    35 символ \ (слэш), после которого должен следовать символ перевода строки.
    Другие символы (в том числе и комментарии) недопустимы.
    >>> x=78+34\
    +25
    >>> x
    137
    Точно также эти команды вы можете набрать в текстовом редакторе
    (естественно без символов приглашения >>>).
    Для продолжения инструкции на следующую строку можно поместить выражение внутри круглых скобок.
    >>> x=(15+25
    +35)
    >>> print(x)
    75
    Несколько позже мы поясним понятие кортежа, списка и словаря, определение которых помещается внутри круглых, квадратных и фигурных скобок. При задании этих объектов такие скобки можно использовать аналогично круглым, и определение кортежа, списка и словаря можно размещать на нескольких строках.
    В некоторых примерах этого параграфа (и последующих) мы не будем приводить символы приглашения >>>. Все примеры вы можете набирать в текстовом редакторе и выполнять файл примера в интерпретаторе целиком, либо можете каждую команду набирать в командной строке интерпретатора и выполнять их последовательно. Для коротких примеров это не существенно, однако примеры, содержащие более 10 строк кода, мы рекомендуем набирать в виде программ и выполнять как единое целое.
    Рассмотрим одну особенность работы циклов for. Попробуем написать цикл, который меняет элементы списка, например, возводит каждый элемент списка в квадрат.
    >>> lst=[1,2,3,4]
    >>> for elem in lst: elem=elem**2
    >>> print(lst)
    [1, 2, 3, 4]
    Список lst не изменился. Дело в том, что переменная elem на каждом шаге цикла содержит лишь копию значения текущего элемента списка. Изменить таким способом элементы списка нельзя. Чтобы изменить элементы списка, цикл должен выполняться по какому–либо другому списку, например, по списку индексов.
    >>> for i in range(len(lst)): lst[i]=lst[i]**2
    >>> print(lst)
    [1, 4, 9, 16]

    36
    Для работы с циклом for полезна функция enumerate(список). Она на каждой итерации возвращает пару объектов: значение индекса i и значение соответствующего элемента списка.
    >>>for i,x in enumerate( lst): print(i+1," ",x)
    1 1 2 4 3 9 4 16
    Оператор ветвления if позволяет в зависимости от значения логического выражения выполнить один или другой участок кода. Он имеет следующий формат: if логическое_выражение 1: блок операторов; выполняется, если логическое_выражение1 истинно
    [
    elif логическое_выражение 2: блок операторов; выполняется, если логическое_выражение 2 истинно
    ]
    [
    else
    : блок операторов; выполняется, если предыдущие логические выражения ложны
    ]
    Участков кода elif может быть несколько.
    >>> x=25
    >>> if x%2==0: print(x," - четное число") else: print(x," - нечетное число")
    25 - нечетное число
    Если блок операторов состоит из одной команды, то ее можно разместить на одной строке с заголовком оператора if.
    >>> x=34
    >>> if x%2==0: print(x," - четное число") else: print(x," - нечетное число")
    34 - четное число
    Внутри циклов часто используются операторы continue и break. Оператор continue позволяет перейти к следующей итерации цикла до завершения выполнения всех команд тела цикла
    >>> for i in range(1,10): if 41 2 3 4 8 9
    Оператор break прерывает цикла досрочно.
    >>> i=1
    >>> while True: if i>5: break

    37 print(i,end=" ") i+=1 1 2 3 4 5
    1   2   3   4   5   6   7   8   9   ...   22


    написать администратору сайта