{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "74114939",
   "metadata": {},
   "source": [
    "# Лабораторная работа 7\n",
    "\n",
    "## Строки\n",
    "\n",
    "В задачах лабораторной не используйте списки и рекурсию. Условия специально указывают требуемый приём там, где он важен.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dcdb4a78",
   "metadata": {},
   "source": [
    "### Пример: ввод нескольких чисел\n",
    "\n",
    "Запустите ячейку и попробуйте разные значения. Здесь `split` разделяет ввод на части, `map` преобразует их в числа, а распаковка присваивает полученные значения переменным. Сохранять результат `split()` в переменную и обрабатывать его как список не требуется.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "7af5b661",
   "metadata": {},
   "outputs": [
    {
     "name": "stdin",
     "output_type": "stream",
     "text": [
      "Введите два целых числа через пробел:  10 25\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x = 10, y = 25\n"
     ]
    },
    {
     "name": "stdin",
     "output_type": "stream",
     "text": [
      "Введите три вещественных числа через пробел:  1.5 2 3.75\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "a = 1.5, b = 2.0, c = 3.75\n"
     ]
    }
   ],
   "source": [
    "# Введите, например: 10 25\n",
    "x, y = map(int, input('Введите два целых числа через пробел: ').split())\n",
    "print(f'x = {x}, y = {y}')\n",
    "\n",
    "# Введите, например: 1.5 2 3.75\n",
    "a, b, c = map(float, input('Введите три вещественных числа через пробел: ').split())\n",
    "print(f'a = {a}, b = {b}, c = {c}')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "19f7a466",
   "metadata": {},
   "source": [
    "## Раздел 1. Операции, срезы и методы строк\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6e107874",
   "metadata": {},
   "source": [
    "**Задача 1. Построение строк**\n",
    "\n",
    "Выполните два независимых подпункта.\n",
    "\n",
    "1. Даны целое `N (> 0)` и символ `C`. Выведите строку длины `N`, состоящую из `C`.\n",
    "2. Даны целое `M (> 0)` и символы `C1`, `C2`. Выведите строку длины `M`, состоящую из чередующихся символов и начинающуюся с `C1`. Значение `M` может быть нечётным.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "48a30d77",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 1\n",
    "n = int(input('Введите N для первой строки: '))\n",
    "\n",
    "\n",
    "# 2\n",
    "m = int(input('Введите M для второй строки: '))\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3ccb752c",
   "metadata": {},
   "source": [
    "**Задача 2. Количество гласных: цикл и методы**\n",
    "\n",
    "Дано русское предложение. Подсчитайте количество гласных букв двумя способами: сначала циклом по символам предложения, затем методом `count`. Выведите оба результата. Сравните сложность полученных подходов.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "7e736236",
   "metadata": {},
   "outputs": [],
   "source": [
    "text = input('Введите предложение: ')\n",
    "vowels = 'АаЕеЁёИиОоУуЫыЭэЮюЯя'\n",
    "\n",
    "# Способ 1: цикл по символам\n",
    "\n",
    "\n",
    "# Способ 2: цикл + count\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3786c30f",
   "metadata": {},
   "source": [
    "**Задача 3. Циклический сдвиг строки**\n",
    "\n",
    "Даны непустая строка и целое неотрицательное число `K`. Выполните циклический сдвиг строки влево на `K` позиций. Например, из `abcdef` при `K = 2` получается `cdefab`. Используйте срезы; цикл не используйте.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "9c6a7b7b",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "157d9345",
   "metadata": {},
   "source": [
    "**Задача 4. Сокращённая запись полного имени**\n",
    "\n",
    "Дана строка вида `Фамилия Имя Отчество`, состоящая ровно из трёх слов, разделённых одиночными пробелами. Получите строку вида `Фамилия И.О.`. Не используйте `split` и циклы.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "6dc031f5",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "8460c004",
   "metadata": {},
   "source": [
    "**Задача 5. Имя файла и расширение**\n",
    "\n",
    "Дано имя файла, возможно, содержащее одну или несколько точек. Выведите отдельно имя без последнего расширения и расширение без точки. Если точки нет или она является последним символом, считайте, что расширение отсутствует. Используйте `rfind`.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "39db2e73",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "f9511ba9",
   "metadata": {},
   "source": [
    "**Задача 6. Маскирование номера**\n",
    "\n",
    "Дана строка длины не менее 4, содержащая номер банковской карты без пробелов. Замените все символы, кроме последних четырёх, на `*`.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "4222eefb",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "e7692f91",
   "metadata": {},
   "source": [
    "**Задача 7. Цензор слова**\n",
    "\n",
    "Даны строка `text` и непустая подстрока `part`. Замените все непересекающиеся вхождения подстроки `part` в строке `text` на строку из звёздочек той же длины. Подстрока может быть частью более длинной последовательности символов; границы слов учитывать не нужно. Используйте метод `replace`.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "5af27779",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "9b36a2c1",
   "metadata": {},
   "source": [
    "**Задача 8. Самое длинное слово**\n",
    "\n",
    "Дана непустая строка из слов, разделённых одним или несколькими пробелами. Найдите первое самое длинное слово. Не используйте `split`; пройдите строку циклом, накапливая текущее слово посимвольно.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "5434cc8a",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "2cef1059",
   "metadata": {},
   "source": [
    "**Задача 9. Сжатие последовательностей символов**\n",
    "\n",
    "Дана непустая строка из строчных латинских букв. Сожмите её: каждую серию одинаковых символов замените символом и количеством его повторений. Например, `aaabbc` превращается в `a3b2c1`. Используйте цикл по строке.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "4b719f80",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "1ac2128b",
   "metadata": {},
   "source": [
    "**Задача 10. Проверка имени переменной**\n",
    "\n",
    "Дана строка. Проверьте, может ли она быть упрощённым именем переменной: строка непустая, начинается с буквы или `_`, а остальные символы являются буквами, цифрами или `_`. Используйте методы `isalpha`, `isalnum` и цикл.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "3d70c2ba",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "a759c7d3",
   "metadata": {},
   "source": [
    "## Раздел 2. Встроенные функции для обработки символов\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9df58323",
   "metadata": {},
   "source": [
    "**Задача 11. Диагностика кода**\n",
    "\n",
    "Дана строка-код, которая должна состоять только из цифр. Выведите позиции (начиная с 1) и значения всех недопустимых символов либо сообщение, что ошибок нет. Используйте `enumerate`: здесь одновременно нужны символ и его позиция.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "f4e92855",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "2332eda5",
   "metadata": {},
   "source": [
    "**Задача 12. Сравнение двух версий текста**\n",
    "\n",
    "Даны две строки, возможно разной длины. Выведите позиции (начиная с 1), на которых символы различаются в их общей части, и количество таких позиций. Используйте `zip`: он сразу образует пары символов и заканчивается вместе с более короткой строкой, поэтому индексы и `min` не нужны.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "b19f222a",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "fadb4db4",
   "metadata": {},
   "source": [
    "**Задача 13. Фрагмент по введённым позициям**\n",
    "\n",
    "Дана строка и два целых индекса `start`, `end`, введённые в одной строке через пробел. Получите набор символов от `start` (включительно) до `end` (невключительно). Для ввода индексов обязательно используйте `map`.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "c1d59188",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "646192ca",
   "metadata": {},
   "source": [
    "**Задача 14. Фильтрация символов**\n",
    "\n",
    "Дана строка. Используя `filter` и `lambda`, получите две новые строки: одну только из цифр исходной строки, вторую — только из знаков препинания `.`, `,`, `!`, `?`, `;`, `:`.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "1e9690b7",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "87b632e1",
   "metadata": {},
   "source": [
    "**Задача 15. Проверка пароля**\n",
    "\n",
    "Дана строка-пароль. Пароль допустим, если его длина не менее 8, все символы — буквы или цифры, и в нём есть хотя бы одна строчная буква, заглавная буква и цифра. Используйте `all`, `any` и `map`.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a54d16c1",
   "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
}
