commit d53224eceabab98375286a0326d2b6e87bb784b5 Author: Sergey Lemeshevsky Date: Wed Feb 19 13:25:09 2020 +0300 Первый коммит diff --git a/arithmetic.ipynb b/arithmetic.ipynb new file mode 100644 index 0000000..cef420d --- /dev/null +++ b/arithmetic.ipynb @@ -0,0 +1,892 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "# Арифметические операции\n", + "\n", + " \n", + "**С.В. Лемешевский** (email: `sergey.lemeshevsky@gmail.com`), Институт математики НАН Беларуси\n", + "\n", + "Date: **Feb 19, 2020**\n", + "\n", + "Язык Python , благодаря наличию огромного количества библиотек для решения\n", + "разного рода вычислительных задач, является конкурентом таким пакетам как Matlab и\n", + "Octave. Запущенный в интерактивном режиме, он, фактически, превращается в\n", + "мощный калькулятор. В этой главе речь пойдет об арифметических операциях,\n", + "доступных в данном языке.\n", + "\n", + "Как было сказано в предыдущей главе, посвященной типам и модели данных\n", + "Python, в этом языке существует три встроенных числовых типа данных:\n", + "* целые числа (`int`);\n", + "\n", + "* вещественные числа (`float`);\n", + "\n", + "* комплексные числа (`complex`).\n", + "\n", + "Если в качестве операндов некоторого арифметического выражения используются\n", + "только целые числа, то результат тоже будет целое число. Исключением является\n", + "операция деления, результатом которой является вещественное число.\n", + "При совместном использовании целочисленных и вещественных переменных, результат\n", + "будет вещественным.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "# Арифметические операции с целыми и вещественными числами\n", + "
\n", + "\n", + "Все эксперименты будем проводить в Python, запущенном в интерактивном\n", + "режиме.\n", + "\n", + "\n", + "**Сложение.** Складывать можно непосредственно сами числа ..." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "3 + 2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "либо переменные, но они должны предварительно быть проинициализированы." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "a = 3\n", + "b = 2\n", + "a + b" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Результат операции сложения можно присвоить другой переменной..." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "a = 3\n", + "b = 2\n", + "c = a + b\n", + "print (c)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "либо ей же самой, в таком случае можно использовать полную или сокращенную\n", + "запись, полная выглядит так:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "a = 3\n", + "b = 2\n", + "a = a + b\n", + "print (a)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "сокращенная так:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "a = 3\n", + "b = 2\n", + "a += b\n", + "print (a)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Все перечисленные выше варианты использования операции сложения могут быть\n", + "применены для всех нижеследующих операций.\n", + "\n", + "**Вычитание.**" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "4 - 2" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "a = 5\n", + "b = 7\n", + "a - b" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Деление.**" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "9 / 3" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "a = 7\n", + "b = 4\n", + "a / b" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Получение целой части от деления.**" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "9 // 3" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "a = 7\n", + "b = 4\n", + "a // b" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Получение дробной части от деления.**" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "9 % 5" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "a = 7\n", + "b = 4\n", + "a % b" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Возведение в степень.**" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "5**4" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "a = 4\n", + "b = 3\n", + "a ** b" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "\n", + "\n", + "# Работа с комплексными числами\n", + "
\n", + "\n", + "Для создания комплексного числа можно использовать функцию `complex(a, b)`, в\n", + "которую, в качестве первого аргумента, передается действительная часть, в качестве\n", + "второго – мнимая. Либо записать число в виде `a + bj`.\n", + "\n", + "Рассмотрим несколько примеров.\n", + "\n", + "Создание комплексного числа." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "z = 1 + 2j\n", + "print(z)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "x = complex ( 3 , 2 )\n", + "print (x)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Комплексные числа можно складывать, вычитать, умножать, делить и возводить в\n", + "степень." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "x + z" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "x - z" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "x * z" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "x / z" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "x ** z" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "x ** 3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "У комплексного числа можно извлечь действительную и мнимую части." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "x = 3 + 2j\n", + "x.real" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "x.imag" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Для получения комплексносопряженного число необходимо использовать метод\n", + "`conjugate()`." + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "x.conjugate()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "\n", + "\n", + "# Битовые операции\n", + "
\n", + "\n", + "В Python доступны битовые операции, их можно производить над целыми числами.\n", + "\n", + "**Побитовое И (AND).**" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + ">>> p = 9\n", + ">>> q = 3\n", + ">>> p & q\n", + "1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Побитовое ИЛИ (OR).**" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + ">>> p | q\n", + "11" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Побитовое Исключающее ИЛИ (XOR).**" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + ">>> p ^ q\n", + "10\n", + "Инверсия.\n", + ">>> ~ p\n", + "- 10" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Сдвиг вправо и влево.**" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + ">>> p << 1\n", + "18\n", + ">>> p >> 1\n", + "4" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "\n", + "\n", + "# Представление чисел в других системах счисления\n", + "
\n", + "\n", + "В своей повседневной жизни мы используем десятичную систему исчисления, но\n", + "при программирования, очень часто, приходится работать с шестнадцатеричной,\n", + "двоичной и восьмеричной.\n", + "\n", + "**Представление числа в шестнадцатеричной системе.**" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + ">>> m = 124504\n", + ">>> hex(m)\n", + "'0x1e658'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Представление числа в восьмеричной системе.**" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + ">>> oct(m)\n", + "'0o363130'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Представление числа в двоичной системе.**" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + ">>> bin(m)\n", + "'0b11110011001011000'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "\n", + "\n", + "# Библиотека (модуль) `math`\n", + "
\n", + "\n", + "В стандартную поставку Python входит библиотека math , в которой содержится\n", + "большое количество часто используемых математических функций.\n", + "\n", + "Для работы с данным модулем его предварительно нужно импортировать." + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import math" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Рассмотрим наиболее часто используемые функции.\n", + "\n", + "**Функция `math.ceil(x)`.**\n", + "\n", + "Возвращает ближайшее целое число большее, чем `x`." + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + ">>> math.ceil( 3.2 )\n", + "4" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Функция `math.fabs(x)`.**\n", + "\n", + "Возвращает абсолютное значение числа." + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + ">>> math.fabs(-7)\n", + "7.0" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Функция `math.factorial(x)`.**\n", + "\n", + "Вычисляет факториал `x`." + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + ">>> math.factorial( 5 )\n", + "120" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "** Функция `math.floor(x)`.**\n", + "\n", + "Возвращает ближайшее целое число меньшее, чем `x`." + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + ">>> math.floor( 3.2 )\n", + "3" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Функция `math.exp(x)`.**\n", + "Вычисляет `e**x`." + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + ">>> math.exp( 3 )\n", + "20.08553692318766" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Функция `math.log2(x)`.**\n", + "Логарифм по основанию `2`.\n", + "\n", + "**Функция `math.log10(x)`.**\n", + "\n", + "Логарифм по основанию 10.\n", + "\n", + "**Функция `math.log(x[, base])`.**\n", + "\n", + "По умолчанию вычисляет логарифм по основанию `e`, дополнительно можно указать\n", + "основание логарифма." + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + ">>> math.log2( 8 )\n", + "3.0\n", + ">>> math.log10( 1000 )\n", + "3.0\n", + ">>> math.log( 5 )\n", + "1.609437912434100\n", + ">>> math.log( 4 , 8 )\n", + "0.666666666666666" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Функция `math.pow(x, y)`.**\n", + "\n", + "Вычисляет значение `x` в степени `y`." + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + ">>> math.pow( 3 , 4 )\n", + "81.0" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Функция `math.sqrt(x)`.**\n", + "\n", + "Корень квадратный от `x`." + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + ">>> math.sqrt( 25 )\n", + "5.0" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Тригонометрические функции, их мы оставим без примера.**\n", + "\n", + "* `math.cos(x)`\n", + "\n", + "* `math.sin(x)`\n", + "\n", + "* `math.tan(x)`\n", + "\n", + "* `math.acos(x)`\n", + "\n", + "* `math.asin(x)`\n", + "\n", + "* `math.atan(x)`\n", + "\n", + "И напоследок пару констант.\n", + "* `math.pi` — число $\\pi$.\n", + "\n", + "* `math.e` — число $e$.\n", + "\n", + "Помимо перечисленных, модуль `math` содержит ещё много различных\n", + "функций, за более подробной информацией можете обратиться eна\n", + "официальный сайт ().\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ] + } + ], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/datatype.ipynb b/datatype.ipynb new file mode 100644 index 0000000..30af0b8 --- /dev/null +++ b/datatype.ipynb @@ -0,0 +1,495 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "# Типы и модель данных\n", + "\n", + " \n", + "**С.В. Лемешевский** (email: `sergey.lemeshevsky@gmail.com`), Институт математики НАН Беларуси\n", + "\n", + "Date: **Feb 19, 2020**\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Здесь разберем как Python работает с переменными и определим, какие\n", + "типы данных можно использовать в рамках этого языка. Подробно рассмотрим модель\n", + "данных Python, а также механизмы создания и изменения значения\n", + "переменных.\n", + "\n", + "# Кратко о типизации языков программирования\n", + "
\n", + "\n", + "Если достаточно формально подходить к вопросу о типизации языка Python, то\n", + "можно сказать, что он относится к языкам с неявной сильной динамической\n", + "типизацией.\n", + "\n", + "Неявная типизация означает, что при объявлении переменной вам не нужно\n", + "указывать её тип, при явной – это делать необходимо. В качестве примера языков с\n", + "явной типизацией можно привести Java, C++ . Вот как будет выглядеть объявление\n", + "целочисленной переменной в Java и Python.\n", + "\n", + "* Java:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " int a = 1 ;\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* Python:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "a = 1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "\n", + "\n", + "# Типы данных в Python\n", + "
\n", + "\n", + "В Python типы данных можно разделить на встроенные в интерпретатор (`built-in`) и\n", + "не встроенные, которые можно использовать при импортировании соответствующих\n", + "модулей.\n", + "\n", + "К основным встроенным типам относятся:\n", + "1. `None` (неопределенное значение переменной)\n", + "\n", + "2. Логические переменные (`Boolean Type`)\n", + "\n", + "3. Числа (`Numeric Type`)\n", + "\n", + "a. `int` – целое число\n", + "\n", + "b. `float` – число с плавающей точкой\n", + "\n", + "c. `complex` – комплексное число\n", + "\n", + "\n", + "4. Списки (`Sequence Type`)\n", + "\n", + "a. `list` – список\n", + "\n", + "b. `tuple` – кортеж\n", + "\n", + "c. `range` – диапазон\n", + "\n", + "\n", + "4. Строки (`Text Sequence Type`)\n", + "\n", + "a. `str`\n", + "\n", + "\n", + "2. Бинарные списки ( Binary Sequence Types )\n", + "\n", + "a. `bytes` – байты\n", + "\n", + "b. `bytearray` – массивы байт\n", + "\n", + "c. `memoryview` – специальные объекты для доступа к внутренним данным объекта через `protocol buffer`\n", + "\n", + "\n", + "4. Множества (`Set Types`)\n", + "\n", + "a. `set` – множество\n", + "\n", + "b. `frozenset` – неизменяемое множество\n", + "\n", + "\n", + "3. Словари (`Mapping Types`)\n", + "\n", + "a. `dict` – словарь\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "# Модель данных\n", + "
\n", + "\n", + "Рассмотрим как создаются объекты в памяти, их устройство, процесс объявления\n", + "новых переменных и работу операции присваивания.\n", + "\n", + "Для того, чтобы объявить и сразу инициализировать переменную необходимо\n", + "написать её имя, потом поставить знак равенства и значение, с которым эта\n", + "переменная будет создана.\n", + "\n", + "Например строка:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "b = 5" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Объявляет переменную `b` и присваивает ей значение `5`.\n", + "\n", + "Целочисленное значение `5` в рамках языка Python по сути своей является\n", + "*объектом*. Объект, в данном случае – это абстракция для представления данных,\n", + "данные – это числа, списки, строки и т.п. При этом, под *данными* следует понимать как\n", + "непосредственно сами объекты, так и отношения между ними (об этом чуть позже).\n", + "Каждый объект имеет три атрибута – это *идентификатор*, *значение* и *тип*.\n", + "\n", + "*Идентификатор* – это уникальный признак объекта, позволяющий отличать объекты\n", + "друг от друга, а *значение* – непосредственно информация, хранящаяся в памяти,\n", + "которой управляет интерпретатор.\n", + "\n", + "При инициализации переменной, на уровне интерпретатора, происходит\n", + "следующее:\n", + "* создается целочисленный объект `5` (можно представить, что в этот момент создается ячейка и число `5` «кладется» в эту ячейку);\n", + "\n", + "* данный объект имеет некоторый идентификатор, значение: `5`, и тип: целое число;\n", + "\n", + "* посредством оператора `=` создается ссылка между переменной `b` и целочисленным объектом `5` (переменная `b` ссылается на объект `5`).\n", + "\n", + "> **Замечание.**\n", + ">\n", + "> Имя переменной не должно совпадать с ключевыми словами интерпретатора\n", + "> Python . Список ключевых слов можно получить непосредственно в программе, для\n", + "> этого нужно подключить модуль `keyword` и воспользоваться командой\n", + "> `keyword.kwlist`." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import keyword\n", + "print(\"Python keywords: \" , keyword.kwlist)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Проверить является или нет идентификатор ключевым словом можно так:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "4\n", + " \n", + "<\n", + "<\n", + "<\n", + "!\n", + "!\n", + "C\n", + "O\n", + "D\n", + "E\n", + "_\n", + "B\n", + "L\n", + "O\n", + "C\n", + "K\n", + " \n", + " \n", + "p\n", + "y\n", + "c\n", + "o\n", + "d" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "5\n", + " \n", + "<\n", + "<\n", + "<\n", + "!\n", + "!\n", + "C\n", + "O\n", + "D\n", + "E\n", + "_\n", + "B\n", + "L\n", + "O\n", + "C\n", + "K\n", + " \n", + " \n", + "p\n", + "y\n", + "c\n", + "o\n", + "d" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "6\n", + " \n", + "<\n", + "<\n", + "<\n", + "!\n", + "!\n", + "C\n", + "O\n", + "D\n", + "E\n", + "_\n", + "B\n", + "L\n", + "O\n", + "C\n", + "K\n", + " \n", + " \n", + "p\n", + "y\n", + "c\n", + "o\n", + "d" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "False" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Для того, чтобы посмотреть на объект с каким идентификатором ссылается данная\n", + "переменная, можно использовать функцию `id()`." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + ">>> a = 4\n", + ">>> b = 5\n", + ">>> id (a)\n", + "1829984576\n", + ">>> id (b)\n", + "1829984592\n", + ">>> a = b\n", + ">>> id (a)\n", + "1829984592" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Как видно из примера, идентификатор – это некоторое целочисленное значение,\n", + "посредством которого уникально адресуется объект. Изначально переменная a\n", + "ссылается на объект `4` с идентификатором `1829984576`, переменная `b`\n", + "– на объект с `id = 1829984592`. После выполнения операции\n", + "присваивания `a = b`, переменная a стала ссылаться на тот же объект,\n", + "что и `b`.\n", + "\n", + "\n", + "\n", + "![](fig-datatype/refs.png)\n", + "\n", + "\n", + "Тип переменной можно определить с помощью функции `type()`. Пример\n", + "использования приведен ниже." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + ">>> a = 10\n", + ">>> b = \"hello\"\n", + ">>> c = ( 1 , 2 )\n", + ">>> type (a)\n", + "< class 'int' >\n", + ">>> type (b)\n", + "< class 'str' >\n", + ">>> type (c)\n", + "< class 'tuple' >" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "\n", + "\n", + "# Изменяемые и неизменяемые типы данных\n", + "
\n", + "\n", + "В Python существуют изменяемые и неизменяемые типы.\n", + "\n", + "К неизменяемым (`immutable`) типам относятся:\n", + "* целые числа (`int`);\n", + "\n", + "* числа с плавающей точкой (`float`);\n", + "\n", + "* комплексные числа (`complex`);\n", + "\n", + "* логические переменные (`bool`);\n", + "\n", + "* кортежи (`tuple`);\n", + "\n", + "* строки (`str`);\n", + "\n", + "* неизменяемые множества (`frozen set`).\n", + "\n", + "К изменяемым ( mutable ) типам относятся\n", + "* списки (`list`);\n", + "\n", + "* множества (`set`);\n", + "\n", + "* словари (`dict`).\n", + "\n", + "Как уже было сказано ранее, при создании переменной, вначале создается объект,\n", + "который имеет уникальный идентификатор, тип и значение, после этого переменная\n", + "может ссылаться на созданный объект.\n", + "\n", + "Неизменяемость типа данных означает, что созданный объект больше не\n", + "изменяется. Например, если мы объявим переменную `k = 15`, то будет создан объект\n", + "со значением `15`, типа `int` и идентификатором, который можно узнать с помощью\n", + "функции `id()`." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + ">>> k = 15\n", + ">>> id (k)\n", + "1672501744\n", + ">>> type (k)\n", + "< class 'int' >" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Объект с `id = 1672501744` будет иметь значение `15` и изменить его уже нельзя.\n", + "Если тип данных изменяемый, то можно менять значение объекта.\n", + "\n", + "Например, создадим список `[1, 2]`, а потом заменим второй элемент на\n", + "`3`." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + ">>> a = [ 1 , 2 ]\n", + ">>> id (a)\n", + "47997336\n", + ">>> a[ 1 ] = 3\n", + ">>> a\n", + "[ 1 , 3 ]\n", + ">>> id (a)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Как видно, объект на который ссылается переменная `a`, был изменен. Это можно\n", + "проиллюстрировать следующим рисунком.\n", + "\n", + "\n", + "\n", + "![](fig-datatype/mute.png)\n", + "\n", + "\n", + "В рассмотренном случае, в качестве данных списка, выступают не объекты, а\n", + "отношения между объектами. Т.е. в переменной a хранятся ссылки на объекты\n", + "содержащие числа `1` и `3`, а не непосредственно сами эти числа.\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ] + } + ], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/fig-datatype/mute.png b/fig-datatype/mute.png new file mode 100644 index 0000000..481736a Binary files /dev/null and b/fig-datatype/mute.png differ diff --git a/fig-datatype/refs.png b/fig-datatype/refs.png new file mode 100644 index 0000000..569be0f Binary files /dev/null and b/fig-datatype/refs.png differ diff --git a/fig-intro/anaconda_inst_1.png b/fig-intro/anaconda_inst_1.png new file mode 100644 index 0000000..80a561e Binary files /dev/null and b/fig-intro/anaconda_inst_1.png differ diff --git a/fig-intro/anaconda_inst_10.png b/fig-intro/anaconda_inst_10.png new file mode 100644 index 0000000..b874da6 Binary files /dev/null and b/fig-intro/anaconda_inst_10.png differ diff --git a/fig-intro/anaconda_inst_11.png b/fig-intro/anaconda_inst_11.png new file mode 100644 index 0000000..0280ae4 Binary files /dev/null and b/fig-intro/anaconda_inst_11.png differ diff --git a/fig-intro/anaconda_inst_2.png b/fig-intro/anaconda_inst_2.png new file mode 100644 index 0000000..d986d21 Binary files /dev/null and b/fig-intro/anaconda_inst_2.png differ diff --git a/fig-intro/anaconda_inst_3.png b/fig-intro/anaconda_inst_3.png new file mode 100644 index 0000000..f0b0a04 Binary files /dev/null and b/fig-intro/anaconda_inst_3.png differ diff --git a/fig-intro/anaconda_inst_4.png b/fig-intro/anaconda_inst_4.png new file mode 100644 index 0000000..b6b8632 Binary files /dev/null and b/fig-intro/anaconda_inst_4.png differ diff --git a/fig-intro/anaconda_inst_5.png b/fig-intro/anaconda_inst_5.png new file mode 100644 index 0000000..0cfa622 Binary files /dev/null and b/fig-intro/anaconda_inst_5.png differ diff --git a/fig-intro/anaconda_inst_6.png b/fig-intro/anaconda_inst_6.png new file mode 100644 index 0000000..6dd44d3 Binary files /dev/null and b/fig-intro/anaconda_inst_6.png differ diff --git a/fig-intro/anaconda_inst_7.png b/fig-intro/anaconda_inst_7.png new file mode 100644 index 0000000..12a393b Binary files /dev/null and b/fig-intro/anaconda_inst_7.png differ diff --git a/fig-intro/anaconda_inst_8.png b/fig-intro/anaconda_inst_8.png new file mode 100644 index 0000000..0a31fcd Binary files /dev/null and b/fig-intro/anaconda_inst_8.png differ diff --git a/fig-intro/anaconda_inst_9.png b/fig-intro/anaconda_inst_9.png new file mode 100644 index 0000000..5f5103d Binary files /dev/null and b/fig-intro/anaconda_inst_9.png differ diff --git a/fig-intro/check_1.png b/fig-intro/check_1.png new file mode 100644 index 0000000..d115b82 Binary files /dev/null and b/fig-intro/check_1.png differ diff --git a/fig-intro/check_2.png b/fig-intro/check_2.png new file mode 100644 index 0000000..3321061 Binary files /dev/null and b/fig-intro/check_2.png differ diff --git a/fig-intro/check_3.png b/fig-intro/check_3.png new file mode 100644 index 0000000..5e08357 Binary files /dev/null and b/fig-intro/check_3.png differ diff --git a/fig-intro/check_4.png b/fig-intro/check_4.png new file mode 100644 index 0000000..0b1cb29 Binary files /dev/null and b/fig-intro/check_4.png differ diff --git a/fig-intro/check_5.png b/fig-intro/check_5.png new file mode 100644 index 0000000..6d43b6e Binary files /dev/null and b/fig-intro/check_5.png differ diff --git a/fig-intro/check_6.png b/fig-intro/check_6.png new file mode 100644 index 0000000..bffc277 Binary files /dev/null and b/fig-intro/check_6.png differ diff --git a/fig-intro/interact_1.png b/fig-intro/interact_1.png new file mode 100644 index 0000000..6ed5634 Binary files /dev/null and b/fig-intro/interact_1.png differ diff --git a/fig-intro/interact_2.png b/fig-intro/interact_2.png new file mode 100644 index 0000000..84d1f7f Binary files /dev/null and b/fig-intro/interact_2.png differ diff --git a/fig-intro/interact_3.png b/fig-intro/interact_3.png new file mode 100644 index 0000000..6f8d07a Binary files /dev/null and b/fig-intro/interact_3.png differ diff --git a/fig-intro/interact_4.png b/fig-intro/interact_4.png new file mode 100644 index 0000000..4069d21 Binary files /dev/null and b/fig-intro/interact_4.png differ diff --git a/fig-intro/interact_5.png b/fig-intro/interact_5.png new file mode 100644 index 0000000..c5f5cf2 Binary files /dev/null and b/fig-intro/interact_5.png differ diff --git a/fig-intro/pack_1.png b/fig-intro/pack_1.png new file mode 100644 index 0000000..eb94cc1 Binary files /dev/null and b/fig-intro/pack_1.png differ diff --git a/fig-intro/python_downloads.png b/fig-intro/python_downloads.png new file mode 100644 index 0000000..7a14f77 Binary files /dev/null and b/fig-intro/python_downloads.png differ diff --git a/fig-intro/python_dwl_list_files.png b/fig-intro/python_dwl_list_files.png new file mode 100644 index 0000000..7c29aa7 Binary files /dev/null and b/fig-intro/python_dwl_list_files.png differ diff --git a/fig-intro/python_inst_1.png b/fig-intro/python_inst_1.png new file mode 100644 index 0000000..ff7ec11 Binary files /dev/null and b/fig-intro/python_inst_1.png differ diff --git a/fig-intro/python_inst_2.png b/fig-intro/python_inst_2.png new file mode 100644 index 0000000..d8d46ac Binary files /dev/null and b/fig-intro/python_inst_2.png differ diff --git a/fig-intro/python_inst_3.png b/fig-intro/python_inst_3.png new file mode 100644 index 0000000..e57c7f0 Binary files /dev/null and b/fig-intro/python_inst_3.png differ diff --git a/fig-intro/python_inst_4.png b/fig-intro/python_inst_4.png new file mode 100644 index 0000000..d64b59f Binary files /dev/null and b/fig-intro/python_inst_4.png differ diff --git a/intro.ipynb b/intro.ipynb new file mode 100644 index 0000000..27886af --- /dev/null +++ b/intro.ipynb @@ -0,0 +1,722 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "# Введение\n", + "\n", + " \n", + "**С.В. Лемешевский** (email: `sergey.lemeshevsky@gmail.com`), Институт математики НАН Беларуси\n", + "\n", + "Date: **Feb 19, 2020**\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "# Установка\n", + "
\n", + "\n", + "## Версии Python\n", + "
\n", + "\n", + "На сегодняшний день существуют две версии Python — это Python 2\n", + "и Python 3, у них отсутствует полная совместимость друг с другом. На\n", + "данный момент вторая версия Python ещё широко используется,\n", + "но, судя по изменениям, которые происходят, со временем, она останется\n", + "только для запуска старого кода. Мы будем Python 3, и, в дальнейшем,\n", + "если где-то будет встречаться слово Python, то под ним следует\n", + "понимать Python 3. Случаи применения Python 2 будут специально\n", + "оговариваться.\n", + "\n", + "## Установка Python\n", + "
\n", + "\n", + "Для установки интерпретатора Python на ваш компьютер, первое, что\n", + "нужно сделать — это скачать дистрибутив. Загрузить его можно с\n", + "официального сайта, перейдя по ссылке \n", + "\n", + "\n", + "\n", + "![](fig-intro/python_downloads.png)\n", + "\n", + "\n", + "\n", + "### Установка Python в Windows\n", + "\n", + "
\n", + "\n", + "Для операционной системы Windows дистрибутив распространяется либо в виде\n", + "исполняемого файл, либо в виде архивного файла.\n", + "\n", + "\n", + "\n", + "![](fig-intro/python_dwl_list_files.png)\n", + "\n", + "\n", + "**Порядок установки.**\n", + "\n", + "1. Запустите скачанный установочный файл.\n", + "\n", + "2. Выберете способ установки.\n", + "\n", + "\n", + "\n", + "![](fig-intro/python_inst_1.png)\n", + "\n", + "\n", + "В данном окне предлагается два варианта *Install Now* и *Customize installation*. При\n", + "выборе *Install Now*, Python установится в папку по указанному пути. Помимо самого\n", + "интерпретатора будет установлен `IDLE` (интегрированная среда разработки), `pip`\n", + "(пакетный менеджер) и документация, а также будут созданы соответствующие ярлыки\n", + "и установлены связи файлов, имеющие расширение `.py` с интерпретатором Python.\n", + "*Customize installation* – это вариант настраиваемой установки. Опция *Add python 3.* to\n", + "`PATH` нужна для того, чтобы появилась возможность запускать интерпретатор без\n", + "указания полного пути до исполняемого файла при работе в командной строке.\n", + "\n", + "1. Отметьте необходимые опций установки (доступно при выборе *Customize installation*)\n", + "\n", + "\n", + "\n", + "![](fig-intro/python_inst_2.png)\n", + "\n", + "\n", + "На этом шаге нам предлагается отметить дополнения, устанавливаемые вместе с\n", + "интерпретатором Python . Рекомендуем выбрать все опции:\n", + "\n", + "* `Documentation` – установка документаций.\n", + "\n", + "* `pip` – установка пакетного менеджера pip.\n", + "\n", + "* `tcl/tk` and `IDLE` – установка интегрированной среды разработки (`IDLE`) и библиотеки для построения графического интерфейса (`tkinter`).\n", + "\n", + "2. Выберете место установки (доступно при выборе Customize installation )\n", + "\n", + "\n", + "\n", + "![](fig-intro/python_inst_3.png)\n", + "\n", + "\n", + "Помимо указания пути, данное окно позволяет внести дополнительные\n", + "изменения в процесс установки с помощью опций:\n", + "\n", + "* `Install for all users` – Установить для всех пользователей. Если не выбрать данную опцию, то будет предложен вариант инсталляции в папку пользователя, устанавливающего интерпретатор.\n", + "\n", + "* `Associate files with Python` – Связать файлы, имеющие расширение `.py`, с Python. При выборе данной опции будут внесены изменения в Windows , позволяющие запускать Python скрипты по двойному щелчку мыши.\n", + "\n", + "* `Create shortcuts for installed applications` – Создать ярлыки для запуска приложений.\n", + "\n", + "* `Add Python to environment variables` – Добавить пути до интерпретатора Python в переменную `PATH`.\n", + "\n", + "* `Precomple standard library` – Провести прекомпиляцию стандартной библиотеки.\n", + "\n", + "Последние два пункта (`Download debugging symbols`, `Download debug\n", + "binaries`) связаны с загрузкой компонентов для отладки, их мы устанавливать не будем.\n", + "\n", + "\n", + "1. После успешной установки вас ждет следующее сообщение.\n", + "\n", + "\n", + "\n", + "![](fig-intro/python_inst_4.png)\n", + "\n", + "\n", + "### Установка Python в Linux\n", + "\n", + "
\n", + "\n", + "Чаще всего интерпретатор Python уже в входит в состав дистрибутива. Это можно\n", + "проверить набрав в терминале" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " Terminal> python\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "или" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " Terminal> python3\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "В первом случае, вы запустите Python 2 во втором – Python 3. В будущем, скорее\n", + "всего, во всех дистрибутивах Linux, включающих Python, будет входить только третья\n", + "версия. Если у вас, при попытке запустить Python, выдается сообщение о том, что он\n", + "не установлен, или установлен, но не тот, что вы хотите, то у вас есть два пути: а)\n", + "собрать Python из исходников; б) взять из репозитория.\n", + "\n", + "Например, для установки из репозитория в Ubuntu воспользуйтесь командой:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " Terminal> sudo apt-get install python3\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Установка Anaconda\n", + "
\n", + "\n", + "Для удобства запуска примеров и изучения языка Python , советуем установить на\n", + "свой ПК пакет Anaconda . Этот пакет включает в себя интерпретатор языка Python (есть\n", + "версии 2 и 3), набор наиболее часто используемых библиотек и удобную среду\n", + "разработки и исполнения, запускаемую в браузере.\n", + "\n", + "Для установки этого пакета, предварительно нужно скачать дистрибутив\n", + ".\n", + "\n", + "Есть варианты под Windows , Linux и Mac OS .\n", + "\n", + "### Установка Anaconda в Windows\n", + "\n", + "
\n", + "\n", + "1. Запустите скачанный инсталлятор. В первом появившемся окне необходимо\n", + "нажать «Next».\n", + "\n", + "\n", + "\n", + "![](fig-intro/anaconda_inst_1.png)\n", + "\n", + "\n", + "2. Далее следует принять лицензионное соглашение.\n", + "\n", + "\n", + "\n", + "![](fig-intro/anaconda_inst_2.png)\n", + "\n", + "\n", + "\n", + "3. Выберете одну из опций установки:\n", + "\n", + "\n", + "\n", + "![](fig-intro/anaconda_inst_3.png)\n", + "\n", + "\n", + "* `Just Me` – только для пользователя, запустившего установку;\n", + "\n", + "* `All Users – для всех пользователей.`\n", + "\n", + "4. Укажите путь, по которому будет установлена Anaconda.\n", + "\n", + "\n", + "\n", + "![](fig-intro/anaconda_inst_4.png)\n", + "\n", + "\n", + "5. Укажите дополнительные опции:\n", + "\n", + "\n", + "\n", + "![](fig-intro/anaconda_inst_5.png)\n", + "\n", + "\n", + "* `Add Anaconda to the system PATH environment variable` – добавить Anaconda в системную переменную `PATH`;\n", + "\n", + "* `Register Anaconda as the system Python 3` – использовать Anaconda, как интерпретатор Python 3 по умолчанию.\n", + "\n", + "Для начала установки нажмите на кнопку «Install».\n", + "\n", + "5. После этого будет произведена установка Anaconda на ваш компьютер.\n", + "\n", + "\n", + "\n", + "![](fig-intro/anaconda_inst_6.png)\n", + "\n", + "\n", + "### Установка Anaconda в Linux\n", + "\n", + "
\n", + "\n", + "Скачайте дистрибутив Anaconda для Linux, он будет иметь расширение\n", + "`.sh` , и запустите установку командой:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " Terminal> bash имя_дистрибутива.sh\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "В результате вы увидите приглашение к установке. Для продолжения\n", + "процессе нажмите «Enter».\n", + "\n", + "\n", + "\n", + "![](fig-intro/anaconda_inst_7.png)\n", + "\n", + "\n", + "2. Прочитайте лицензионное соглашение, его нужно пролистать до конца.\n", + "\n", + "\n", + "\n", + "![](fig-intro/anaconda_inst_8.png)\n", + "\n", + "\n", + "Согласитесь с ним, для этого требуется набрать в командной строке `yes`, в ответе\n", + "на вопрос инсталлятора:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " Terminal> Do you approve the license terms? [yes|no]\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "![](fig-intro/anaconda_inst_9.png)\n", + "\n", + "\n", + "3. Выберете место установки. Можно выбрать один из следующих вариантов:\n", + "\n", + "\n", + "\n", + "![](fig-intro/anaconda_inst_10.png)\n", + "\n", + "\n", + "* `Press ENTER to confirm the location` – нажмите ENTER для принятия предложенного пути установки. Путь по умолчанию для моей машины: /home/tester/anaconda3 , он представлен чуть выше данного меню.\n", + "\n", + "* `Press CTRL-C to abort the installation` – нажмите CTRL-C для отмены установки.\n", + "\n", + "* `Or specify a different location below` – или укажите другой путь в строке ниже.\n", + "\n", + "Нажмите «ENTER».\n", + "\n", + "4. После этого начнется установка.\n", + "\n", + "\n", + "\n", + "![](fig-intro/anaconda_inst_11.png)\n", + "\n", + "\n", + "## Проверка работоспособности\n", + "
\n", + "\n", + "Теперь проверим работоспособность всего того, что мы установили.\n", + "\n", + "### Проверка интерпретатора Python\n", + "\n", + "
\n", + "\n", + "Для начала протестируем интерпретатор в командном режиме. Если вы работаете\n", + "в Windows , то нажмите сочетание Win+R и в появившемся окне введите\n", + "`python`. В Linux откройте окно терминала и в нем введите `python3`\n", + "(или `python`).\n", + "\n", + "В результате Python запустится в командном режиме, выглядеть это будет\n", + "примерно так (картинка приведена для Windows, в Linux результат будет\n", + "аналогичным):\n", + "\n", + "\n", + "\n", + "![](fig-intro/check_1.png)\n", + "\n", + "\n", + "В окне введите:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "print(\"Hello, World!\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Результат должен быть следующий:\n", + "\n", + "\n", + "\n", + "![](fig-intro/check_2.png)\n", + "\n", + "\n", + "### Проверка Anaconda\n", + "\n", + "
\n", + "\n", + "Здесь и далее будем считать, что пакет Anaconda установлен в Windows, в папку\n", + "`C:\\Anaconda3`, в Linux, вы его можете найти в каталоге, который\n", + "выбрали при установке.\n", + "\n", + "Перейдите в папку `Scripts` и введите в командной строке:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " Terminal> ipython notebook\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "![](fig-intro/check_3.png)\n", + "\n", + "\n", + "Если вы находитесь в Windows и открыли папку `C:\\Anaconda3\\Scripts` через\n", + "проводник, то для запуска интерпретатора командной строки для этой папки в поле\n", + "адреса введите `cmd`.\n", + "\n", + "\n", + "\n", + "![](fig-intro/check_4.png)\n", + "\n", + "\n", + "\n", + "В результате запустится веб-сервер и среда разработки в браузере.\n", + "\n", + "\n", + "\n", + "![](fig-intro/check_5.png)\n", + "\n", + "\n", + "Создайте ноутбук для разработки, для этого нажмите на кнопку «New» (в правом углу\n", + "окна) и в появившемся списке выберете Python.\n", + "\n", + "В результате будет создана новая страница в браузере с ноутбуком. Введите в\n", + "первой ячейке команду" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "print(\"Hello, World!\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "и нажмите Alt+Enter на клавиатуре. Ниже ячейки должна появиться соответствующая надпись.\n", + "\n", + "\n", + "\n", + "![](fig-intro/check_6.png)\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "Doconce finished at Tue Feb 18 17:47:38\n", + "# Запуск программ на Python\n", + "
\n", + "\n", + "Программный код на языке Python можно записать с помощью любого\n", + "простого текстового редактора, который способен загружать и сохранять\n", + "текст либо в кодировке ASCII, либо UTF-8. По умолчанию предполагается,\n", + "что файлы с программным кодом на языке Python сохраняются в кодировке\n", + "UTF-8, надмножестве кодировки ASCII, с помощью которой можно\n", + "представить практически любой символ любого национального\n", + "алфавита. Файлы с программным кодом на языке Python обычно имеют\n", + "расширение `.py`, хотя в некоторых UNIX-подобных системах (таких как\n", + "Linux и Mac OS X) некоторые приложения на языке Python не имеют\n", + "расширения, а программы на языке Python с графическим интерфейсом, в\n", + "частности в Windows и Mac OS X, обычно имеют расширение `.pyw`. В этой\n", + "книге все время будет использоваться расширение `.py` для обозначения\n", + "консольных программ и модулей Python и расширение `.pyw` – для\n", + "программ с графическим интерфейсом. Все примеры, представленные в\n", + "книге, не требуют изменений для запуска в любой из платформ,\n", + "поддерживаемых Python 3.\n", + "\n", + "\n", + "Язык Python – это *интерпретируемый* язык. Это означает, что помимо\n", + "непосредственно самой программы, вам необходим специальный инструмент для её\n", + "запуска. Напомним, что существуют компилируемые и интерпретируемые языки\n", + "программирования. В первом случае, программа с языка высокого уровня переводится\n", + "в машинный код для конкретной платформы. В дальнейшем, среди пользователей,\n", + "она, как правило, распространяется в виде бинарного файла. Для запуска такой\n", + "программы не нужны дополнительные программные средства (за исключением\n", + "необходимых библиотек, но эти тонкости выходят за рамки нашего обсуждения).\n", + "Самыми распространенными языками такого типа являются C++ и C . Программы на\n", + "интерпретируемых языках, выполняются интерпретатором и распространяются в виде\n", + "исходного кода.\n", + "\n", + "Python может работать в двух режимах:\n", + "* интерактивный;\n", + "\n", + "* пакетный.\n", + "\n", + "## Интерактивный режим работы\n", + "
\n", + "\n", + "В интерактивный режим можно войти, набрав в командной строке" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " Terminal> python\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "или" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " Terminal> python3\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "В результате Python запустится в интерактивном режиме и будет ожидать ввод\n", + "команд пользователя.\n", + "\n", + "\n", + "\n", + "![](fig-intro/interact_1.png)\n", + "\n", + "\n", + "Если же у вас есть файл с исходным кодом на Python , и вы его хотите запустить, то\n", + "для этого нужно в командной строке вызвать интерпретатор Python и в качестве\n", + "аргумента передать ваш файл. Например, для файла с именем test.py процедура\n", + "запуска будет выглядеть так:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " Terminal> python test.py\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Откройте Python в интерактивном режиме и наберите в нем следующее:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "print(“Hello, World!”)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "И нажмите ENTER .\n", + "\n", + "В ответ на это интерпретатор выполнит данную строку и отобразит\n", + "строкой ниже результат своей работы.\n", + "\n", + "\n", + "\n", + "![](fig-intro/interact_2.png)\n", + "\n", + "\n", + "Python можно использовать как калькулятор для различных вычислений, а если\n", + "дополнительно подключить необходимые математические библиотеки, то по своим\n", + "возможностям он становится практически равным таким пакетам как Matlab, Octave и\n", + "т.п.\n", + "\n", + "Различные примеры вычислений приведены ниже. Более подробно об\n", + "арифметических операциях будет рассказано далее. \n", + "\n", + "\n", + "\n", + "![](fig-intro/interact_3.png)\n", + "\n", + "\n", + "Для выхода из интерактивного режима, наберите команду" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "exit()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "и нажмите ENTER .\n", + "\n", + "В комплекте вместе с интерпретатором Python идет IDLE (интегрированная\n", + "среда разработки). По своей сути она подобна интерпретатору, запущенному\n", + "в интерактивном режиме с расширенным набором возможностей (подсветка синтаксиса,\n", + "просмотр объектов, отладка и т.п.).\n", + "\n", + "Для запуска IDLE в Windows необходимо перейти в папку Python в меню “Пуск” и\n", + "найти там ярлык с именем «IDLE (Python 3 XX-bit)».\n", + "\n", + "\n", + "\n", + "![](fig-intro/interact_4.png)\n", + "\n", + "\n", + "В Linux оболочка IDLE по умолчанию отсутствует, поэтому ее предварительно\n", + "нужно установить. Для этого, если у вас Ubuntu , введите в командной строке (для\n", + "Python 3.4):" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " Terminal> sudo apt-get install idle-python3\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "В результате IDLE будет установлен на ваш компьютер.\n", + "Для запуска оболочки, введите:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " Terminal> idle-python3.4\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Ниже представлен внешний вид IDLE в ОС Linux.\n", + "\n", + "\n", + "\n", + "![](fig-intro/interact_5.png)\n", + "\n", + "\n", + "## Пакетный режим работы\n", + "
\n", + "\n", + "Теперь запустим Python в режиме интерпретации файлов с исходным кодом\n", + "(пакетный режим). Создайте файл с именем `test.py`, откройте его с\n", + "помощью любого текстового редактора и введите следующий код:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "a = int(input())\n", + "print(a**2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Эта программа принимает целое число на вход и выводит его квадрат. Для\n", + "запуска, наберите в командной строке" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " Terminal> python test.py\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Пример работы программы приведен в окне ниже.\n", + "\n", + "\n", + "\n", + "![](fig-intro/interact_5.png)\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ] + } + ], + "metadata": {}, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/src-intro/test.py b/src-intro/test.py new file mode 100644 index 0000000..ecca88f --- /dev/null +++ b/src-intro/test.py @@ -0,0 +1,2 @@ +a = int(input()) +print(a**2)