{ "cells": [ { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "# Управляющие выражения\n", "\n", "\n", "## Cтруктуры данных: списки" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "Любые данные в компьютере хранятся ввиде набора байт, однако человеку гораздо проще рабоать с какой-либо абстрактной моделью представляющей данные. Такие модели называются *структурами данных*, это могут быть *примитивы*, такие как число или символ, или более сложные структуры данных, состоящие из отдельных примитивов. Структуры данных очень полезны, поскольку позволяют организивать удобную и эффективную работу с данными в зависимости от их вида. Как пример сложно структуры мы уже встречали *строки* и *списки*. О последних мы поговорим в этом разделе.\n", "\n", "Списки (list) - упорядоченные изменяемые коллекции объектов произвольных типов. К элементу или диапазону элементов списка можно обращаться по номеру (нумерация с нуля). Отрицательный индекс означает, что отсчет ведется с конца списка к началу." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['a', 4, 2.5, 1, 2, 3]\n", "4\n", "[4, 2.5, 1, 2, 3]\n", "[4, 2.5]\n", "[4, 1]\n", "['a', 2.5, 2]\n", "6\n" ] } ], "source": [ "my_list = [] # создание пустого списка\n", "my_list.append('a') # добавление элемента\n", "my_list.append(4)\n", "my_list.append(2.5)\n", "my_list.extend([1, 2, 3]) # добавление списка в конец списка my_list\n", "print(my_list) \n", "print(my_list[1]) # Выбор элемента с индексом 1, ВНИМАНИЕ нумерация идет с нуля!\n", "print(my_list[1:]) # Срез списка: все элементы от номер 1 включительно до конца\n", "print(my_list[1:3]) # Срез списка\n", "print(my_list[1:5:2]) # Срез списка c шагом 2\n", "print(my_list[::2]) # Элементы списка с четных позиций\n", "print(len(my_list)) # длина списка" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "Если список состоит из сравнимых элементов, то его можно отсортировать." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[-9, -3, 1, 2, 5, 8]\n" ] } ], "source": [ "my_new_list = [-9, 5, 1, 8, -3, 2]\n", "my_new_list.sort()\n", "print(my_new_list)" ] }, { "cell_type": "markdown", "metadata": { "hideCode": true, "hideOutput": true, "hidePrompt": true, "pycharm": { "name": "#%% md\n" } }, "source": [ "## Условия и циклы" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "### Условие if" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "Для проверки условий используется логический тип (bool), который представлен двумя постоянными значениями `False` и `True`. Возможно приведение других типов в логическому с помощью операции `bool(x)`" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "c = True\n", "d = False\n", "print(c, d)\n", "print(type(c), type(d))\n", "print(bool(123))\n", "print(bool('hello'))\n", "print(bool(0))\n", "print(bool(''))\n", "print(bool())" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "Условный оператор в Pytnon провяряет значение выражения (или переменной), которой является или приводиться к логическому типу. Если выражение после `if` верно, то блок команд с отступом выполняется, если нет - пропускается." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "y is positive\n" ] } ], "source": [ "x = -4\n", "if x > 0:\n", " print('x is positive')\n", " \n", "y = 5\n", "if y > 0:\n", " print('y is positive')" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Значение переменной a автоматически сконвертировалось к логическом типу\n" ] } ], "source": [ "a = 5\n", "if a:\n", " print(\"Значение переменной a автоматически сконвертировалось к логическом типу\")\n" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "Если выражение после `if` верно, то выполняется первый блок команд, если нет - второй блок." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "negative\n" ] } ], "source": [ "x = -4\n", "if x > 0:\n", " print('positive')\n", "else:\n", " print('negative')" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "Внутри условных инструкций можно использовать любые инструкции языка Питон, в том числе и условную инструкцию. Получаем вложенное ветвление – после одной развилки в ходе исполнения программы появляется другая развилка. При этом вложенные блоки имеют больший размер отступа (например, 8 пробелов). Писать много вложенных проверок условий является плохой практикой и Python препятсвует ей. " ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Четвертая четверть\n" ] } ], "source": [ "x = 5\n", "y = -2\n", "if x > 0:\n", " if y > 0: # x > 0, y > 0\n", " print(\"Первая четверть\")\n", " else: # x > 0, y < 0\n", " print(\"Четвертая четверть\")\n", "else:\n", " if y > 0: # x < 0, y > 0\n", " print(\"Вторая четверть\")\n", " else: # x < 0, y < 0\n", " print(\"Третья четверть\")" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "Пример программы, определяющий четверть координатной плоскости, можно переписать используя “каскадную“ последовательность операцией `if...` `elif...` `else`. `elif` - сокращение для `else if`" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Вторая четверть\n" ] } ], "source": [ "x = -3\n", "y = 3\n", "if x > 0 and y > 0:\n", " print(\"Первая четверть\")\n", "elif x > 0 and y < 0:\n", " print(\"Четвертая четверть\")\n", "elif y > 0:\n", " print(\"Вторая четверть\")\n", "else:\n", " print(\"Третья четверть\")\n" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "### Цикл for" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "В цикле `for` указывается переменная и множество значений, по которому будет пробегать переменная. Множество значений может быть задано списком, кортежем, строкой или диапазоном." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1\n", "2\n", "3\n", "one\n", "two\n", "three\n" ] } ], "source": [ "for i in 1, 2, 3, 'one', 'two', 'three':\n", " print(i)" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "Функция `range()` позволяет вам генерировать ряд чисел в рамках заданного диапазона. Различные способы вызова функции:\n", "* range(stop)\n", "* range(start, stop)\n", "* range(start, stop, step)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0\n", "1\n", "2\n", "3\n", "4\n", "\n", "\n", "2\n", "3\n", "4\n", "\n", "\n", "1\n", "3\n" ] } ], "source": [ "for number in range(5):\n", " print(number)\n", "print('\\n')\n", "for number in range(2, 5):\n", " print(number)\n", "print('\\n') \n", "for number in range(1, 5, 2):\n", " print(number)" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "### Цикл while" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "Цикл `while` (“пока”) позволяет выполнить одну и ту же последовательность действий, пока проверяемое условие истинно. Условие записывается до тела цикла и проверяется до выполнения тела цикла. Как правило, цикл `while` используется, когда невозможно определить точное значение количества проходов исполнения цикла." ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1\n", "4\n", "9\n", "16\n", "25\n" ] } ], "source": [ "i = 1\n", "while i <= 5:\n", " print(i ** 2)\n", " i += 1" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "Если во время выполнения Питон встречает инструкцию `break` внутри цикла, то он сразу же прекращает выполнение этого цикла и выходит из него. Другая инструкция управления циклом — `continue` (продолжение цикла). Если эта инструкция встречается где-то посередине цикла, то пропускаются все оставшиеся инструкции до конца цикла, и исполнение цикла продолжается со следующей итерации." ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1\n", "2\n", "3\n", "4\n", "5\n", "Цикл окончен, i = 6\n" ] } ], "source": [ "i = 1\n", "while i <= 5:\n", " print(i)\n", " i += 1\n", "else:\n", " print('Цикл окончен, i =', i)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1\n", "2\n" ] } ], "source": [ "i = 1\n", "while i <= 5:\n", " print(i)\n", " i += 1\n", " if i == 3:\n", " break\n", "else:\n", " print('Цикл окончен, i =', i)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1\n", "2\n", "4\n", "5\n", "6\n", "Цикл окончен, i = 6\n" ] } ], "source": [ "i = 0\n", "while i <= 5:\n", " i += 1\n", " if i == 3:\n", " continue\n", " print(i)\n", "else:\n", " print('Цикл окончен, i =', i)" ] } ], "metadata": { "@webio": { "lastCommId": null, "lastKernelId": null }, "hide_input": false, "kernelspec": { "display_name": "Python [default]", "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.6.7" }, "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 }