{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Повторяем пройденное"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 1. Кто ошибся?\n",
    "\n",
    "Студенты Иванов, Петров и Сидоров пытались запрограммировать вычисление по формуле\n",
    "$$\n",
    "y = \\frac{1}{2x}\n",
    "$$\n",
    "Вот что у них получилось:  \n",
    "Иванов: \n",
    "`y = 1/2*x`  \n",
    "Петров:\n",
    "`y = 1/(2*x)`  \n",
    "Сидоров:\n",
    "`y = 1/2/x`  \n",
    "\n",
    "Кто ошибся? Кто справился?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Проверяем:\n",
    "x = 2.0\n",
    "print(1/2*x, 1/(2*x), 1/2/x)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 2. Что выведет этот код?\n",
    "```python\n",
    "x = 5\n",
    "print(1<x<6)\n",
    "```\n",
    " **A**. `True`  \n",
    " **B**. `False`  \n",
    " **C**. `Ошибка`  \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Проверяем:\n",
    "x = 5\n",
    "print(1<x<6)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 3. Что выведет этот код?\n",
    "```python\n",
    "x = 5\n",
    "print(1<x>4)\n",
    "```\n",
    " **A**. `True`  \n",
    " **B**. `False`  \n",
    " **C**. `Ошибка`  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Проверяем:\n",
    "x = 5\n",
    "print(1<x>4)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 4. Что выведет этот код?\n",
    "```python\n",
    "print(1<5 and 1/0>5)\n",
    "```\n",
    " **A**. `True`  \n",
    " **B**. `False`  \n",
    " **C**. `Ошибка` "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Проверяем:\n",
    "print(1<5 and 1/0>5)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 5. Что выведет этот код?\n",
    "```python\n",
    "print(1<5 or 1/0>5)\n",
    "```\n",
    " **A**. `True`  \n",
    " **B**. `False`  \n",
    " **C**. `Ошибка` "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Проверяем:\n",
    "print(1<5 or 1/0>5)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 6. Что выведет этот код?\n",
    "```python\n",
    "print(1<5 and 'hello')\n",
    "```\n",
    " **A**. `True`  \n",
    " **B**. `False`  \n",
    " **D**. `hello`   \n",
    " **D**. `Ошибка` "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Проверяем:\n",
    "print(1<5 and 'hello')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<hr>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Условный оператор\n",
    "\n",
    "До сих пор написанные нами программы имели **линейную структуру**:  \n",
    "операторы выполнялись последовательно, один за другим.\n",
    "\n",
    "Вспомним, например, задачу     \n",
    "**Begin14**. Дана длина $L$ окружности. Найти ее радиус $R$ и площадь $S$ круга, ограниченного этой окружностью, учитывая, что $L = 2πR$,    $S = πR^2$. В качестве значения $π$ использовать 3.14.\n",
    "\n",
    "\n",
    "\n",
    "Но жизнь, к сожалению, как правило, не такая линейная. И все время подсовывает задачи выбора:\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "**Условный оператор** `if-elif-else` (его иногда называют оператором ветвления)  $-$ это основной инструмент выбора в Python. \n",
    "Он позволяет определить, какое действие следует выполнить программе в зависимости от значения переменных в момент проверки условия.\n",
    "\n",
    "**Вариант 1:**\n",
    "\n",
    "```python\n",
    "if a>0:\n",
    "    print('число положительно')\n",
    "    b = a**0.5\n",
    "    print('квадратный корень =', b)\n",
    "```    \n",
    "Обратите внимание на двоеточие и пробелы!\n",
    "\n",
    "**Вариант 2:**\n",
    "\n",
    "```python\n",
    "if a>0:\n",
    "    print('число положительно')\n",
    "    b = a**0.5\n",
    "    print('квадратный корень =', b)\n",
    "else:\n",
    "    print('число отрицательно')\n",
    "    print('корень извлечь не удается')\n",
    "```    \n",
    "\n",
    "**Вариант 3:**\n",
    "\n",
    "```python\n",
    "if a>0:\n",
    "    print('число положительно')\n",
    "    b = a**0.5\n",
    "    print('квадратный корень =', b)\n",
    "elif a==0:\n",
    "    print('число равно нулю')\n",
    "    print('квадратный корень =', 0)\n",
    "else:\n",
    "    print('число отрицательно')\n",
    "    print('корень извлечь не удается')\n",
    "```    \n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x: -34\n",
      "|x| = 34\n"
     ]
    }
   ],
   "source": [
    "# в качестве примера посмотрите на программу, вычисляющую модуль числа:\n",
    "x = int(input(\"x: \"))\n",
    "if x>=0:\n",
    "    print('|x| =', x)\n",
    "else:    \n",
    "    print('|x| =', -x)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Переходим к решению задач"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Знак числа**. Функция ${\\rm sign}(x)$ (знак числа) определена так: \n",
    "$$\n",
    "\\left\\{\n",
    "\\begin{array}{ll}\n",
    "{\\rm sign}(x) = 1,& если \\ x > 0, \\\\\n",
    "{\\rm sign}(x) = -1,& если \\ x < 0, \\\\\n",
    "{\\rm sign}(x) = 0,& если \\ x = 0. \\\\\n",
    "\\end{array}\n",
    "\\right.\n",
    "$$\n",
    "Для данного числа $x$ выведите значение ${\\rm sign}(x)$.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x: 0\n",
      "0\n"
     ]
    }
   ],
   "source": [
    "# Решение\n",
    "x = float(input(\"x: \"))\n",
    "if x>0:\n",
    "    sign = 1\n",
    "elif x<0:\n",
    "    sign = -1\n",
    "else:\n",
    "    sign = 0\n",
    "print(sign)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**If9**. Даны две переменные вещественного типа: $a$, $b$. Перераспределить значения данных переменных так, чтобы в $a$ оказалось меньшее из значений, а в $b$ — большее. Вывести новые значения переменных $a$ и $b$.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "a: 1\n",
      "b: 10\n",
      "1.0 10.0\n"
     ]
    }
   ],
   "source": [
    "# Решение\n",
    "a = float(input(\"a: \"))\n",
    "b = float(input(\"b: \"))\n",
    "if a>b:\n",
    "    a,b = b,a\n",
    "print(a,b)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**If4**. Даны три целых числа. Найти количество положительных чисел в исходном наборе. \n",
    "\n",
    "*Помните, что у любой задачи есть как минимум три решения? 😁*"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "a: 5\n",
      "b: 7\n",
      "c: 9\n",
      "3\n",
      "3\n",
      "3\n"
     ]
    }
   ],
   "source": [
    "a = int(input(\"a: \"))\n",
    "b = int(input(\"b: \"))\n",
    "c = int(input(\"c: \"))\n",
    "\n",
    "# Решение 1\n",
    "if a>0 and b>0 and c>0:\n",
    "    print(3)\n",
    "elif (a>0 and b>0) or (a>0 and c>0) or (b>0 and c>0):\n",
    "    print(2)\n",
    "elif a>0 or b>0 or c>0:\n",
    "    print(1)\n",
    "else:\n",
    "    print(0)\n",
    "    \n",
    "# Решение 2\n",
    "k = 0\n",
    "if a>0:\n",
    "    k += 1\n",
    "if b>0:\n",
    "    k += 1\n",
    "if c>0:\n",
    "    k += 1\n",
    "print(k)    \n",
    "# Решение 3\n",
    "k = int(a>0) + int(b>0) + int(c>0)\n",
    "print(k)\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "int(True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**If13**. Даны три числа. Найти среднее из них (т. е. число, расположенное между наименьшим и наибольшим)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "a: 7\n",
      "b: 1\n",
      "c: 26\n",
      "7.0\n",
      "7.0\n"
     ]
    }
   ],
   "source": [
    "a = float(input(\"a: \"))\n",
    "b = float(input(\"b: \"))\n",
    "c = float(input(\"c: \"))\n",
    "# Решение 1\n",
    "if b<a<c or c<a<b:\n",
    "    print(a)\n",
    "elif a<b<c or c<b<a:\n",
    "    print(b)\n",
    "else:\n",
    "    print(c)\n",
    "\n",
    "# Решение 2\n",
    "print(a+b+c - min(a,b,c) - max(a,b,c))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**If18**. Даны три целых числа, одно из которых отлично от двух других, равных между собой. Определить порядковый номер числа, отличного от остальных. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "a: 5\n",
      "b: 7\n",
      "c: 5\n",
      "2\n"
     ]
    }
   ],
   "source": [
    "# Решение\n",
    "a = int(input(\"a: \"))\n",
    "b = int(input(\"b: \"))\n",
    "c = int(input(\"c: \"))\n",
    "if b==c:\n",
    "    print(1)\n",
    "elif a==c:\n",
    "    print(2)\n",
    "else:\n",
    "    print(3)\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**If22**. Даны координаты точки, не лежащей на координатных осях $OX$ и $OY$. Определить номер координатной четверти, в которой находится данная точка."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "x = float(input(\"x: \"))\n",
    "y = float(input(\"y: \"))\n",
    "# Решение1\n",
    "if x>0 and y>0:\n",
    "    print(1)\n",
    "elif x<0 and y>0:\n",
    "    print(2)\n",
    "elif x<0 and y<0:\n",
    "    print(3)\n",
    "else:\n",
    "    print(4)\n",
    "    \n",
    "# Решение 2 ?\n",
    "if x>0:\n",
    "    if y>0:\n",
    "        print(1)\n",
    "    else:\n",
    "        print(4)\n",
    "else:\n",
    "    if y>0:\n",
    "        print(2)\n",
    "    else:\n",
    "        print(3)\n",
    "    \n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Квадратное уравнение**. Решить уравнение \n",
    "$$ax^2 + bx + c = 0,$$ \n",
    "заданное коэффициентами $a$, $b$, $c$ ($a\\neq0$)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Решение\n",
    "a = float(input(\"a: \"))\n",
    "b = float(input(\"b: \"))\n",
    "c = float(input(\"c: \"))\n",
    "d = b*b - 4*a*c\n",
    "if d>0:\n",
    "    x1 = (-b-d**0.5)/(2*a)\n",
    "    x2 = (-b+d**0.5)/(2*a)\n",
    "    print(x1, x2)\n",
    "elif d==0:\n",
    "    print(-b/(2*a))\n",
    "else:\n",
    "    print('корней нет')\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "\n",
    "**Коровы**. Задано $n$ $-$ число коров, пасущихся на лугу. Продолжите фразу “На лугу пасется...” одним из возможных продолжений: “$n$ коров”, “$n$ корова”, “$n$ коровы”, правильно склоняя слово “корова”. Например,\n",
    "- На лугу пасется 1 корова.\n",
    "- На лугу пасется 2 коровы.\n",
    "- На лугу пасется 50 коров."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Сколько коров (<100) пасется на лугу? 71\n",
      "На лугу пасется 71 корова\n"
     ]
    }
   ],
   "source": [
    "# Решение\n",
    "n = int(input(\"Сколько коров (<100) пасется на лугу? \"))\n",
    "print(f\"На лугу пасется {n} \", end=\"\")\n",
    "k = n%10\n",
    "if k==1 and n!=11:\n",
    "    print('корова')\n",
    "elif 11<=n<=20 or 5<=k<=9 or k==0:\n",
    "    print('коров')\n",
    "else:\n",
    "    print('коровы')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Задача Хоттабыча**. Игрок команды «Зубило», за которую болеет Волька,  бьет по воротам команды «Шайба», за которую болеет Хоттабыч. \n",
    "\n",
    "\n",
    "\n",
    "Коварный волшебник, зная, координату пересечения траектории полета мяча и лицевой линии, $x$, передвигает штанги ворот (меняет координаты $p1$, $p2$). Но Волька, слегка овладевший волшебными навыками, подправляет траекторию мяча и меняет координату $x$ по правилу: если мяч слева от ворот, то он отправляется в левую штангу (а потом в ворота), если мяч справа от ворот, то он отправляется в правую штангу, а если мяч летит в ворота, то его траектория не меняется.  \n",
    "\n",
    "По заданным числам $x$, $p1$, $p2$ определите новое значение координаты $x$ после «колдовства» Вольки.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Решение\n",
    "x = float(input(\"x: \"))\n",
    "p1 = float(input(\"p1: \"))\n",
    "p2 = float(input(\"p2: \"))\n",
    "if x<p1:\n",
    "    x = p1\n",
    "elif x>p2:\n",
    "    x = p2\n",
    "\n",
    "\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "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.11.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
