{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "l9_1",
   "metadata": {},
   "source": [
    "# Списки. Занятие 1\n",
    "\n",
    "Осваиваем:\n",
    "- индексацию (прямую и отрицательную);\n",
    "- срезы `[start:stop:step]`;\n",
    "- методы `append`, `pop`, `remove`, `insert`, `index`, `count`;\n",
    "- проверку вхождения `in` / `not in`;\n",
    "- длину списка `len`.\n",
    "\n",
    "**Правило:**  пока обходимся без генераторов списков и без функций `min`, `max`, `sorted`."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "l9_2",
   "metadata": {},
   "source": [
    "## Часть 1. Базовые операции (необязательная часть для тех, кто уже знаком со списками)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "l9_10",
   "metadata": {},
   "source": [
    "**Задача 1.** Проверить, является ли введённое слово палиндромом."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "l9_11",
   "metadata": {},
   "outputs": [
    {
     "name": "stdin",
     "output_type": "stream",
     "text": [
      "Введите слово: абоба\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Палиндром? True\n"
     ]
    }
   ],
   "source": [
    "word = input('Введите слово:')\n",
    "print(f'Палиндром? {word == word[::-1]}')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "l9_19",
   "metadata": {},
   "source": [
    "**Задача 2.** Дан список `[1, 2, 3, 2, 4, 2, 5]`. Удалите из него **все** вхождения значения 2. Не используйте генераторы списков и `filter`. \n",
    "\n",
    "**Указание**: используйте `while` и `remove`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "l9_20",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "l9_22",
   "metadata": {},
   "source": [
    "**Задача 3.** Дан список целых чисел. Пользователь вводит число. Проверьте, есть ли оно в списке. Если есть — выведите его индекс. Если нет — сообщение об отсутствии."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "l9_23",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "l9_26",
   "metadata": {},
   "source": [
    "**Задача 4.** Дан список слов. В цикле запрашивайте у пользователя слова и добавляйте их только если их ещё нет в списке, попутно выводя информацию о добавлении (надпись \"Добавлено\" и текущую длину списка или \"Такое слово уже есть\"). Завершите ввод по слову `стоп`. Выведите полученный список слов."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "l9_27",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "99cf41ba-96f1-4116-a0eb-7ca76e700fa2",
   "metadata": {},
   "source": [
    "## Часть 2. Математические приложения (это уже для всех)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "l9_29",
   "metadata": {},
   "source": [
    "**Задача 5.** Пользователь вводит $N$ целых чисел по одному. Соберите их в список через `append()`. Найдите:\n",
    "1. Среднее арифметическое всех элементов;\n",
    "2. Максимальный и минимальный элементы и их индексы;\n",
    "3. Второй по величине элемент **без `sorted`** — через поиск максимума и удаление одного вхождения."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "l9_30",
   "metadata": {},
   "outputs": [],
   "source": [
    "n = int(input('Сколько чисел?'))\n",
    "a = []\n",
    "for _ in range(n):\n",
    "    a.append(int(input('Введите число:')))\n",
    "print(f'Список: {a}\\n')\n",
    "\n",
    "# 1. Среднее\n",
    "...\n",
    "\n",
    "# 2. Максимум и минимум с индексами\n",
    "...\n",
    "\n",
    "print(f'Max: {mx}, индекс {imax}')\n",
    "print(f'Min: {mn}, индекс {imin}\\n')\n",
    "\n",
    "# 3. Второй по величине\n",
    "..."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a2",
   "metadata": {},
   "source": [
    "**Задача 6.** Дано целое число $n$ (> 0). Сформировать и вывести целочисленный список размера $n$, содержащий степени двойки от первой до $n$-й: 2, 4, 8, 16, $\\ldots$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a2c",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "a12",
   "metadata": {},
   "source": [
    "**Задача 7.** Дан целочисленный список $a$ размера $n$ ($n$ — четное число). Вывести его элементы с четными номерами в порядке возрастания номеров: $a_2$, $a_4$, $\\ldots$ $a_n$. Нумерация считается с 1. Условный оператор **не использовать**."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a12c",
   "metadata": {},
   "outputs": [],
   "source": [
    "from random import randint\n",
    "n = int(input('n ='))\n",
    "a = []\n",
    "for _ in range(n):\n",
    "    a.append(randint(1, 100))\n",
    "print(f'Список: {a}')\n",
    "\n",
    "# Чётные номера — это индексы 1, 3, 5, ... (нумерация элементов с 1)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a16",
   "metadata": {},
   "source": [
    "**Задача 8.** Дан целочисленный список $a$ размера $n$. Вывести его элементы в следующем порядке: $a_1$, $a_n$, $a_2$, $a_{n-1}$, $a_3$, $a_{n-2}$, $\\ldots$ Нумерация считается с 1."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a16c",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "a21",
   "metadata": {},
   "source": [
    "**Задача 9.** Дан целочисленный список размера $n$ и целые числа $K$ и $L$ ($1 \\leqslant K \\leqslant L \\leqslant n$). Нумерация считается с 1. Найти среднее арифметическое элементов списка с номерами от $K$ до $L$ включительно."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a21c",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "a26",
   "metadata": {},
   "source": [
    "**Задача 10.** Дан целочисленный список размера $n$. Проверить, чередуются ли в нем четные и нечетные числа. Если чередуются, то вывести $0$, если нет, то вывести *порядковый номер* первого элемента, нарушающего закономерность."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a26c",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "a30",
   "metadata": {},
   "source": [
    "**Задача 11.** Дан целочисленный список размера $n$. Вывести *порядковые номера* тех элементов списка, которые больше своего правого соседа, и количество таких элементов. Найденные номера выводить в порядке их возрастания."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a30c",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "a32",
   "metadata": {},
   "source": [
    "**Задача 12.** Дан список размера $n$. Найти *порядковый номер* его первого локального минимума (локальный минимум — это элемент, который меньше любого (хотя бы одного) из своих соседей). Если у элемента нет соседей — вывести -1."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a32c",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "a43",
   "metadata": {},
   "source": [
    "**Задача 13.** Дан целочисленный список размера $N$ ($N > 0$), все элементы которого упорядочены (по возрастанию или по убыванию). Найти количество различных элементов в данном списке."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a43c",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Для упорядоченного списка достаточно сравнить каждый элемент с предыдущим\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a44",
   "metadata": {},
   "source": [
    "**Задача 14.** Дан целочисленный список размера $N$ ($N > 1$), содержащий ровно два одинаковых элемента. Найти *порядковые номера* одинаковых элементов и вывести эти номера в порядке возрастания."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a44c",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "a45",
   "metadata": {},
   "source": [
    "**Задача 15.** Дан целочисленный список размера $N$ ($N > 1$). Найти *порядковые номера* двух ближайших элементов из этого списка (т.е. элементов с наименьшим модулем разности) и вывести эти номера в порядке возрастания, а также модуль разности."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a45c",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "a47",
   "metadata": {},
   "source": [
    "**Задача 16.** Дан целочисленный список размера $N$. Найти количество различных элементов в данном списке."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a47c",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "a48",
   "metadata": {},
   "source": [
    "**Задача 17.** Дан целочисленный список размера $N$ ($N > 0$). Найти максимальное количество его одинаковых элементов. Использовать метод `count`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a48c",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "a58",
   "metadata": {},
   "source": [
    "**Задача 18.** Дан целочисленный список $a$ размера $N$. Сформировать новый список $b$ того же размера по правилу: элемент $b_k$ равен сумме элементов списка $a$ с номерами от $0$ до $k$ включительно."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a58c",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "a68",
   "metadata": {},
   "source": [
    "**Задача 19.** Дан целочисленный список размера $N$. Поменять местами его минимальный и максимальный элементы."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a68c",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "a101",
   "metadata": {},
   "source": [
    "**Задача 20.** Дан целочисленный список размера $N$ и целое число $K$ ($1 \\leqslant K \\leqslant N$). Перед элементом списка с *порядковым номером* $K$ вставить новый элемент с нулевым значением. Использовать метод `insert`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a101c",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "a103",
   "metadata": {},
   "source": [
    "**Задача 21.** Дан целочисленный список размера $N$. Вставить элемент с нулевым значением перед минимальным и после максимального элемента списка."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a103c",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "95326491-3e05-4df6-8854-e235160d1ee6",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python [conda env:base] *",
   "language": "python",
   "name": "conda-base-py"
  },
  "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.13.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
