{ "cells": [ { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "![](https://mipt.ru/upload/medialibrary/829/rus_text_prozrachnaya_podlozhka.png)" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "# Введение в Python и работа с Jupyter Notebook\n", "\n", "\n", "Рабочая тетрадь Jupyter Notebook состоит из последовательного набора ячеек, которые могут содержать код, текст, картинки (для того чтобы увидеть как вставить картинку, дважды щелкните по логотипу Физтеха выше), таблицы, формулы или даже интерактивные элементы. " ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "## Hello World!\n", "Для того что бы выполнить код, написанный в ячейке, нужно выбрать ячейчу и нажать `Shift+Enter`, при этом после ячейки (эта зона называется `Out`) появится результат работы ячейки." ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Hello World!\n" ] } ], "source": [ "print(\"Hello World!\") # Функция print выводит текст в `Out` ячейки" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "# Эта строка -- комментарий. То, что здесь написано, не будет выполняться как код. \n", "# print(\"Я не печатаюсь\")" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "## Калькулятор\n", "\n", "Код на Python состоит из так называемых *выражений*, в `Out` ячейки будет показано значение последнего *выражения*." ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/plain": [ "6" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "2+2*2 # Шесть или восемь? Что надо сделать чтобы получить восемь?" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/plain": [ "(1-2j)" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "2+2*2 # Значение этого выражение не будет выведено в `Out`\n", "(2+1j)*(-1j) # Встроена поддержка комплексных чисел" ] }, { "cell_type": "code", "execution_count": 61, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/plain": [ "2.8284271247461903" ] }, "execution_count": 61, "metadata": {}, "output_type": "execute_result" } ], "source": [ "2**1.5 # Возведение в степень" ] }, { "cell_type": "code", "execution_count": 63, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Деление нацело: 4\n", "Остаток от деления: 3\n" ] } ], "source": [ "print(\"Деление нацело: \", 23 // 5)\n", "print(\"Остаток от деления: \", 23 % 5)" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/plain": [ "180443894485522835714954192172999280028845717532682776236340940102536698145222569108484463188835141501257568786614496374890490631237110580592001682129147574651845715171456148359301092015447205623057495772659564027213301182232076238590331900681806078027178740976490955033321310868454820309128358774485790967770683032944024352558539124788679067434454263656340662912379366253271751953736731074819372491000795297394853010105837025484346139393089929535058486260828830048634323191537485125711757553017086494262086507174576160642886415424336562785001644174485982226421972489721110767356064962137106505728778418700556641023076586539800506459911177905554903899443902042199874341653922049139720885160820424705059531702449496414152206583904252440335125073512355264351679192059781951740756716496372272101373104569806788535169770019927578333904122000732663242308371786294445444694565563343590247938552086658203292972070407426713686306344322058332865613102498986620473134625473086906778038872631750464721441869000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Python поодерживает длинную арифметику для целых чисел\n", "# Иначе говоря длина целых чисел ограничена только \n", "# размером оперативной памяти вашего компьютера\n", "1234567890**123" ] }, { "cell_type": "code", "execution_count": 70, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/plain": [ "(1, 5.0)" ] }, "execution_count": 70, "metadata": {}, "output_type": "execute_result" } ], "source": [ "abs(-1), abs(3+4j) # Модуль числа\n" ] }, { "cell_type": "code", "execution_count": 62, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/plain": [ "'Двойный кавычки не отличаются от одинарных'" ] }, "execution_count": 62, "metadata": {}, "output_type": "execute_result" } ], "source": [ "\"Двойный кавычки не отличаются от одинарных\"" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "## Объявление переменных и функций" ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "some_variable = 1 # Объявляем переменную, переменым лучше давать значащие имена" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1\n" ] } ], "source": [ "print(some_variable) # Объявленная переменная доступна из любой ячейки" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/plain": [ "1" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "some_variable # Для втодополнения имени переменной можно использовать клавишу `Tab`" ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "a = \"Строка\"" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Строка\n" ] } ], "source": [ "print(a)" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "Чтобы вывести данные в определенном формате, используется так называемое форматирование строк, есть несколько разных методво форматирования." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "a = 3.14\n", "b = 3.145\n", "Привет! 5\n" ] } ], "source": [ "a = 3.14\n", "print(f\"a = {a}\") # `f`- форматирование\n", "b = 3.14525436356546\n", "print(f\"b = {b:.4}\") # `f`- форматирование, с ограничением числа значащих цифр\n", "my_string = \"Привет\"\n", "my_number = 5\n", "print(\"%s! %d\" % (my_string, my_number)) # `%`-форматирование, счиатется устаревшим\n", "# Далее будут даны ещё методы форматирования" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "Для ввода данных в программу можно использовать функцию input(). Она считывает одну строку. Применение этой функции в интереснов основном при написании отдельных программ, а не работе в рабочих тетрадях." ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1\n", "1\n" ] } ], "source": [ "a = input()\n", "print(a)" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "Функции — это такие участки кода, которые изолированы от остальный программы и выполняются только тогда, когда вызываются. Код с объявлением функции должен быть вызван раньше кода в котором вызвается функция, поэтому ячейку с функций крайне желательно располагать раньше ячейки с вызовом функции (иначе нельзя будет исполнять ячейки последовательно). В круглых скобках после названия функции пичется список параметров, `return` возвращает некоторое значение. " ] }, { "cell_type": "code", "execution_count": 43, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "def to_fahrenheit_degree(celsius_degree):\n", " \"\"\"\n", " Эта функцию принимает температуру в градусах Цельсия и переводит её в градусы Фаренгейта\n", " Пригодится при работе с имперским оборудованием\n", " \"\"\"\n", " return (9/5)*celsius_degree + 32" ] }, { "cell_type": "code", "execution_count": 44, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "10 градусов Цельсия это 50.0 градусов Фаренгейта\n", "20 градусов Цельсия это 68.0 градусов Фаренгейта\n", "30 градусов Цельсия это 86.0 градусов Фаренгейта\n" ] } ], "source": [ "data = [10,20,30] # Результаты измерений в градусах Цельсия сохранены в списке - одном из типов коллекций (наборов элементов) предоставляемых Python\n", "for element in data: # Так называемы цикл for-each - в переменную element по очередно записываются элементы набора data\n", " print(element, \"градусов Цельсия это\" , to_fahrenheit_degree(element), \"градусов Фаренгейта\")\n", " \n", "# Больше о циклах и коллекциях будет написано в следующих разделах пмс " ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "Обратите внимание что входным типом данных были целые числа, а выходным чилса с плавающей точкой.\n", "\n", "Также обращу ваше внимание на текст:\n", "```\n", " \"\"\"\n", " Эта функцию принимает температуру в градусах Цельсия и переводит её в градусы Фаренгейта\n", " Пригодится при работе с имперским оборудованием\n", " \"\"\"\n", "```\n", "приведенный в начале функции `to_fahrenheit_degree` - это так называемый `docstring` - строка содержащая документацию по функции, для обращения в данной документации используется встроенная функция `help`." ] }, { "cell_type": "code", "execution_count": 45, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Help on function to_fahrenheit_degree in module __main__:\n", "\n", "to_fahrenheit_degree(celsius_degree)\n", " Эта функцию принимает температуру в градусах Цельсия и переводит её в градусы Фаренгейта\n", " Пригодится при работе с имперским оборудованием\n", "\n" ] } ], "source": [ "help(to_fahrenheit_degree)" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "В хорошо оформленных библиотеках функция `help` позволяет получить исчерпывающую справку об работе функции (на английском языке конечно). " ] }, { "cell_type": "code", "execution_count": 46, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Help on built-in function print in module builtins:\n", "\n", "print(...)\n", " print(value, ..., sep=' ', end='\\n', file=sys.stdout, flush=False)\n", " \n", " Prints the values to a stream, or to sys.stdout by default.\n", " Optional keyword arguments:\n", " file: a file-like object (stream); defaults to the current sys.stdout.\n", " sep: string inserted between values, default a space.\n", " end: string appended after the last value, default a newline.\n", " flush: whether to forcibly flush the stream.\n", "\n" ] } ], "source": [ "help(print)" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "Функция может и не заканчиваться инструкцией `return`, при этом функция вернет значение `None`" ] }, { "cell_type": "code", "execution_count": 47, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "qwe!\n", "None\n" ] } ], "source": [ "def my_print(x):\n", " print(x + '!')\n", " \n", "print(my_print('qwe'))" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "Функция может содержать необязательные аргументы, которые будут принимать значение по умолчанию, если пользователь не передал их значение." ] }, { "cell_type": "code", "execution_count": 48, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "5\n", "6\n" ] } ], "source": [ "def add(a, b, c=2): # c - необязательный аргумент\n", " return a + b + c\n", "print(add(1, 2))\n", "print(add(1, 2, 3))" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "## Подключение дополнительных библиотек\n", "\n", "При написаннии программ не обойти без использования сторонних или даже ваших собсвенных библиотек с кодом. Python ищет библиотеки по определенным путям, включая директорию в которой мы сейчас расположены. Стандратная билиотека Python содрежит много полезных при написании программ функций и классов, а дистрибутив Anaconda предоставлет большое множество библиотке для научного программирования.\n", "\n", "В качесве примера рассмотрим использование стандартной математической билиотеки." ] }, { "cell_type": "code", "execution_count": 49, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "import math # Подключение билотеки по её полному имени" ] }, { "cell_type": "code", "execution_count": 50, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/plain": [ "1.0" ] }, "execution_count": 50, "metadata": {}, "output_type": "execute_result" } ], "source": [ "math.log(math.e) # Обращение к элементам библиотеки" ] }, { "cell_type": "code", "execution_count": 51, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/plain": [ "2.9999999999999996" ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "source": [ "math.log(1000, 10) # Кто не прогуливал лекции по информатике, тот сможет объяснить почему результат оказался не равным 3.0" ] }, { "cell_type": "code", "execution_count": 52, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/plain": [ "['__doc__',\n", " '__file__',\n", " '__loader__',\n", " '__name__',\n", " '__package__',\n", " '__spec__',\n", " 'acos',\n", " 'acosh',\n", " 'asin',\n", " 'asinh',\n", " 'atan',\n", " 'atan2',\n", " 'atanh',\n", " 'ceil',\n", " 'copysign',\n", " 'cos',\n", " 'cosh',\n", " 'degrees',\n", " 'e',\n", " 'erf',\n", " 'erfc',\n", " 'exp',\n", " 'expm1',\n", " 'fabs',\n", " 'factorial',\n", " 'floor',\n", " 'fmod',\n", " 'frexp',\n", " 'fsum',\n", " 'gamma',\n", " 'gcd',\n", " 'hypot',\n", " 'inf',\n", " 'isclose',\n", " 'isfinite',\n", " 'isinf',\n", " 'isnan',\n", " 'ldexp',\n", " 'lgamma',\n", " 'log',\n", " 'log10',\n", " 'log1p',\n", " 'log2',\n", " 'modf',\n", " 'nan',\n", " 'pi',\n", " 'pow',\n", " 'radians',\n", " 'sin',\n", " 'sinh',\n", " 'sqrt',\n", " 'tan',\n", " 'tanh',\n", " 'tau',\n", " 'trunc']" ] }, "execution_count": 52, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dir(math) # Функция dir позволяет узнать какие имена используются в библиотеке" ] }, { "cell_type": "code", "execution_count": 53, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "import math as m # Можно вместо полного имени использовать псевдоним,\n", " # наиболее популярные билиотеки имеют общепринятые псевдонимы" ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/plain": [ "1.2246467991473532e-16" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" } ], "source": [ "m.sin(m.pi) # Очень близко, но из=за конечной точности все же не ноль\n" ] }, { "cell_type": "code", "execution_count": 55, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "from math import cos, tan # Можно импортировать одно или несколько имен" ] }, { "cell_type": "code", "execution_count": 56, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/plain": [ "-0.9999987317275395" ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cos(3.14)" ] }, { "cell_type": "code", "execution_count": 57, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "# Самый плохой вариант - импортирует все имена из билиотеки, \n", "# при этом возмозможно перекрытие имен (смотри код далее)\n", "from math import *" ] }, { "cell_type": "code", "execution_count": 58, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/plain": [ "-1.0" ] }, "execution_count": 58, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cos(pi)" ] }, { "cell_type": "code", "execution_count": 59, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "pi = 4 # Согласно приказу Минобрнауки значение числа пи принять равным 4" ] }, { "cell_type": "code", "execution_count": 60, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/plain": [ "-0.6536436208636119" ] }, "execution_count": 60, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cos(pi)" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "Поскольку поиск подобных ошибок затруднен использование синтаксиса `from module import *` крайне не желательно." ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.3" }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": false, "sideBar": false, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": false, "toc_window_display": false } }, "nbformat": 4, "nbformat_minor": 2 }