{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "e8a1d898",
   "metadata": {},
   "source": [
    "# 23-05 · Преобразование температуры\n",
    "\n",
    "Практика к разделу [«Проект 23-5: Приложение для преобразования температуры»](../../site/chapters/glava-23/23-05-temperatura.html). Полный файл — `projects/tkinter/temperature-converter/temperature_converter.py`."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f6f47eff",
   "metadata": {},
   "source": [
    "## Цель\n",
    "\n",
    "Проверить формулы перевода на известных опорных точках и симулировать ввод пользователя."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "65c421f9",
   "metadata": {},
   "source": [
    "## Рабочий пример"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "430e62d0",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-14T20:59:49.971575Z",
     "iopub.status.busy": "2026-08-14T20:59:49.971438Z",
     "iopub.status.idle": "2026-08-14T20:59:50.125381Z",
     "shell.execute_reply": "2026-08-14T20:59:50.124976Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'C': 0, 'F': 32.0, 'K': 273.15}\n",
      "{'C': 100, 'F': 212.0, 'K': 373.15}\n",
      "{'C': 0.0, 'F': 32.0, 'K': 273.15}\n",
      "{'C': -273.15, 'F': -459.66999999999996, 'K': 0.0}\n"
     ]
    }
   ],
   "source": [
    "import sys\n",
    "\n",
    "sys.path.insert(0, \"../../projects/tkinter/temperature-converter\")\n",
    "import temperature_converter as tc\n",
    "\n",
    "print(tc.preobrazovat(0, \"C\"))\n",
    "print(tc.preobrazovat(100, \"C\"))\n",
    "print(tc.preobrazovat(32, \"F\"))\n",
    "print(tc.preobrazovat(0, \"K\"))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "adeb7aa8",
   "metadata": {},
   "source": [
    "## Проверка результата"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "8be0919b",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-14T20:59:50.126711Z",
     "iopub.status.busy": "2026-08-14T20:59:50.126526Z",
     "iopub.status.idle": "2026-08-14T20:59:50.129336Z",
     "shell.execute_reply": "2026-08-14T20:59:50.128951Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Верно: 0°C = 32°F = 273.15K, 100°C = 212°F, 0K = -273.15°C (абсолютный ноль).\n"
     ]
    }
   ],
   "source": [
    "r = tc.preobrazovat(0, \"C\")\n",
    "assert abs(r[\"F\"] - 32) < 1e-9\n",
    "assert abs(r[\"K\"] - 273.15) < 1e-9\n",
    "\n",
    "r = tc.preobrazovat(100, \"C\")\n",
    "assert abs(r[\"F\"] - 212) < 1e-9\n",
    "\n",
    "r = tc.preobrazovat(0, \"K\")\n",
    "assert abs(r[\"C\"] - (-273.15)) < 1e-9\n",
    "\n",
    "print(\"Верно: 0°C = 32°F = 273.15K, 100°C = 212°F, 0K = -273.15°C (абсолютный ноль).\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7e777bce",
   "metadata": {},
   "source": [
    "## Эксперимент — симулируем ввод через поле и кнопку"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "b5ebd265",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-14T20:59:50.130375Z",
     "iopub.status.busy": "2026-08-14T20:59:50.130267Z",
     "iopub.status.idle": "2026-08-14T20:59:50.133056Z",
     "shell.execute_reply": "2026-08-14T20:59:50.132641Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "На экране: 100.0°C = 212.0°F = 373.1K\n",
      "Верно: нажатие «Преобразовать» обновляет надпись на экране.\n"
     ]
    }
   ],
   "source": [
    "tc.pole_vvoda.insert(0, \"100\")\n",
    "tc.edinica.set(\"C\")\n",
    "tc.na_preobrazovat_nazhali()\n",
    "\n",
    "print(\"На экране:\", tc.rezultat_text.get())\n",
    "assert \"212.0\" in tc.rezultat_text.get()\n",
    "print(\"Верно: нажатие «Преобразовать» обновляет надпись на экране.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d6852579",
   "metadata": {},
   "source": [
    "## Задание ★ Базовая практика\n",
    "\n",
    "Введите текст вместо числа и убедитесь, что приложение не падает, а показывает понятное сообщение."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "69988223",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-14T20:59:50.134084Z",
     "iopub.status.busy": "2026-08-14T20:59:50.133977Z",
     "iopub.status.idle": "2026-08-14T20:59:50.169656Z",
     "shell.execute_reply": "2026-08-14T20:59:50.169212Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Верно: некорректный ввод обрабатывается без падения программы.\n"
     ]
    }
   ],
   "source": [
    "tc.pole_vvoda.delete(0, \"end\")\n",
    "tc.pole_vvoda.insert(0, \"не число\")\n",
    "tc.na_preobrazovat_nazhali()\n",
    "\n",
    "assert tc.rezultat_text.get() == \"Введите число\"\n",
    "print(\"Верно: некорректный ввод обрабатывается без падения программы.\")"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Cartesian Python 3.14",
   "language": "python",
   "name": "cartesian-python314"
  },
  "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.14.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
