<?xml version="1.0" encoding="utf-8" ?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:tt="http://teletype.in/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"><title>Лапочка</title><author><name>Лапочка</name></author><id>https://teletype.in/atom/solitkas</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/solitkas?offset=0"></link><link rel="alternate" type="text/html" href="https://teletype.in/@solitkas?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=solitkas"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/solitkas?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-04-19T12:01:53.325Z</updated><entry><id>solitkas:tMz1f71w8yc</id><link rel="alternate" type="text/html" href="https://teletype.in/@solitkas/tMz1f71w8yc?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=solitkas"></link><title>ЧТО ТАКОЕ API?</title><published>2022-12-27T18:38:59.148Z</published><updated>2023-01-07T14:20:46.576Z</updated><summary type="html">API (Application Programming Interface) - это интерфейс для взаимодействия между различными программными системами или сервисами. </summary><content type="html">
  &lt;p id=&quot;MeLy&quot;&gt;API (Application Programming Interface) - это интерфейс для взаимодействия между различными программными системами или сервисами. &lt;/p&gt;
  &lt;p id=&quot;beAY&quot;&gt;Как они могут общаться и передавать данные друг другу&lt;/p&gt;
  &lt;p id=&quot;xKdZ&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;8PYE&quot;&gt;API предоставляет набор специальных функций, которые могут быть вызваны из другой программы для получения данных или выполнения определенных действий.&lt;/p&gt;
  &lt;p id=&quot;liZ1&quot;&gt;Например, если у вас есть приложение для социальных сетей, вы можете использовать API этой социальной сети, чтобы получать информацию о пользователях и их постах. Также API может использоваться для взаимодействия между сайтами или сервисами, чтобы обмениваться данными и выполнять определенные действия. API обычно имеет документацию, которая описывает, как его использовать.&lt;/p&gt;
  &lt;p id=&quot;kMSO&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;aDd6&quot;&gt;REST API - это способ передавать данные между разными сервисами и системами через интернет. Оно использует стандартные методы HTTP, такие как GET, POST, PUT и DELETE, чтобы обмениваться данными.&lt;/p&gt;
  &lt;p id=&quot;48CS&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;lFRs&quot;&gt;GET - получить ресурс или коллекцию&lt;/p&gt;
  &lt;p id=&quot;ut8k&quot;&gt;POST - отправка данных&lt;/p&gt;
  &lt;p id=&quot;f5ED&quot;&gt;PUT - обновление&lt;/p&gt;
  &lt;p id=&quot;1nFP&quot;&gt;DELETE - удаление&lt;/p&gt;

</content></entry><entry><id>solitkas:XMmnRasWHUN</id><link rel="alternate" type="text/html" href="https://teletype.in/@solitkas/XMmnRasWHUN?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=solitkas"></link><title>Tracker</title><published>2022-12-23T21:18:49.196Z</published><updated>2023-02-12T12:58:29.734Z</updated><summary type="html">&lt;img src=&quot;https://img4.teletype.in/files/3d/8b/3d8b4934-adfc-4a13-91ad-3245602ac493.png&quot;&gt;Скрипт может обрабатывать команды вроде &quot;добавить новое задание&quot;, &quot;показать список заданий на сегодня&quot;, &quot;показать список заданий на неделю&quot; и т.д.</summary><content type="html">
  &lt;p id=&quot;lL9p&quot;&gt;Скрипт может обрабатывать команды вроде &amp;quot;добавить новое задание&amp;quot;, &amp;quot;показать список заданий на сегодня&amp;quot;, &amp;quot;показать список заданий на неделю&amp;quot; и т.д.&lt;/p&gt;
  &lt;p id=&quot;f71k&quot;&gt;&lt;/p&gt;
  &lt;ul id=&quot;Z0CM&quot;&gt;
    &lt;li id=&quot;afve&quot;&gt;название задания&lt;/li&gt;
    &lt;li id=&quot;0N7r&quot;&gt;описание задания&lt;/li&gt;
    &lt;li id=&quot;a021&quot;&gt;срок выполнения&lt;/li&gt;
    &lt;li id=&quot;XFqD&quot;&gt;статус выполнения (не начато, в процессе, завершено)&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;yEhA&quot;&gt;&lt;/p&gt;
  &lt;ul id=&quot;Hpbr&quot;&gt;
    &lt;li id=&quot;HugM&quot;&gt;Добавить то что задание выполнено, или нет доступных заданий&lt;/li&gt;
    &lt;li id=&quot;6oXb&quot;&gt;Посмотреть список команд -&amp;gt; или интерфейс&lt;/li&gt;
    &lt;li id=&quot;2zoK&quot;&gt;Добавить функционал ведения простой статистики, такой как количество выполненных/невыполненных задач, общее количество задач и т. д.&lt;/li&gt;
    &lt;li id=&quot;dv0E&quot;&gt;Сделать программу более интерактивной, например, путем добавления меню выбора действий (например, добавление новой задачи, просмотр списка задач, выход из программы и т. д.)&lt;/li&gt;
    &lt;li id=&quot;qwCU&quot;&gt;Добавить функционал, позволяющий пользователю указывать сроки выполнения задач и получать уведомления о просроченных задачах&lt;/li&gt;
    &lt;li id=&quot;0ApV&quot;&gt;Создать систему категорий для задач (например, работа, личные дела, хобби) и давать возможность пользователю фильтровать список задач по категориям&lt;/li&gt;
    &lt;li id=&quot;nKvL&quot;&gt;Добавить функционал приоритезации задач: пользователь может указывать, какие задачи являются приоритетными, и программа может отображать список задач в порядке приоритета.&lt;/li&gt;
    &lt;li id=&quot;GL5w&quot;&gt;Добавить функционал уведомлений: пользователь может задавать уведомления о задачах (например, напоминания о выполнении задачи в определенное время или дату), и программа будет отправлять уведомления в указанное время. Можно реализовать с помощью функций по расписанию (например, с помощью модуля &lt;code&gt;sched&lt;/code&gt; в Python).&lt;/li&gt;
    &lt;li id=&quot;IJuc&quot;&gt;возможностью добавления тегов к заданиям, чтобы было удобнее их отслеживать и фильтровать&lt;/li&gt;
    &lt;li id=&quot;KII0&quot;&gt;отображением графика выполнения заданий за определенный период времени&lt;/li&gt;
    &lt;li id=&quot;qyOQ&quot;&gt;Добавления записей в базу данных&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;1dKj&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;waaW&quot;&gt;Бонус - сделать веб сайт интерфейс или интерфейс используя PyQt5&lt;/p&gt;
  &lt;p id=&quot;32rN&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;eEaQ&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;lTYc&quot;&gt;&lt;/p&gt;
  &lt;blockquote id=&quot;YQ73&quot;&gt;ЧТО ФИКСИТЬ СЕЙЧАС&lt;/blockquote&gt;
  &lt;p id=&quot;yGUi&quot;&gt;СДЕЛАТЬ ЗАПИСЬ С НОВОГО РЯДКА ЕСЛИ КОЛЛИЧЕСТВО СИМВОЛОВ &amp;gt; n&lt;/p&gt;
  &lt;p id=&quot;qv0v&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;fzCH&quot;&gt;придумать способ записи:&lt;/p&gt;
  &lt;figure id=&quot;nT3e&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/3d/8b/3d8b4934-adfc-4a13-91ad-3245602ac493.png&quot; width=&quot;1113&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;ATSd&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/9e/5f/9e5f2a14-37c3-44fb-80a3-078d3486a030.png&quot; width=&quot;1144&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;7a7M&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/d1/fd/d1fde630-ba3c-413b-a1fd-32ed2058e2a8.png&quot; width=&quot;1132&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;YbyY&quot;&gt;так как вставляется буква, то мы и по ее индексу высчитываем в &amp;quot;edci&amp;quot;, например мы ввели d значит длина нашего словаря + индекс буквы в &amp;quot;edci&amp;quot; + 1 так как индексы с 0 &lt;/p&gt;
  &lt;figure id=&quot;cMhL&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/f9/af/f9af5e05-81df-4015-8c3a-8faec1ffadee.png&quot; width=&quot;789&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;U0vg&quot;&gt;штука добавить новое задание, мы в список добавляем еще один список, и потом проверяем по индексам есть ли в нашем временном списке такое занятие&lt;/p&gt;
  &lt;figure id=&quot;JQv4&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/7c/f2/7cf27b0c-0cb4-4cf6-992b-d7083405e911.png&quot; width=&quot;1454&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;QeUY&quot;&gt;Этапы считают по количеству записей&lt;/p&gt;
  &lt;figure id=&quot;gXVA&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/8a/bc/8abcbc8c-18d2-4f3a-9848-6c2a74a8578d.png&quot; width=&quot;1288&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;3NRL&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;h3tM&quot;&gt;Засечь текущее время &lt;/p&gt;
  &lt;figure id=&quot;1N32&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/9e/61/9e619c70-6b49-47ac-9924-de2c757a3a46.png&quot; width=&quot;971&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;Z16I&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;mcwh&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;pWI2&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;qKTZ&quot;&gt;пронумеровать их и сделать запись в файл&lt;/p&gt;
  &lt;p id=&quot;VBSx&quot;&gt;&lt;/p&gt;
  &lt;figure id=&quot;peDX&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/34/6e/346e6992-d888-4cc3-b239-367caaf6eef5.png&quot; width=&quot;1757&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;Q9D2&quot;&gt;сделать динамическое время&lt;/p&gt;
  &lt;p id=&quot;r6Ji&quot;&gt;вынести открытие файла в отдельную функцию&lt;/p&gt;
  &lt;pre id=&quot;iygM&quot;&gt;def read_tasks():
    try:
        with open(&amp;quot;tasks.txt&amp;quot;, &amp;quot;r&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as file:
            string = &amp;#x27;&amp;#x27;.join(file.readlines())
            task_list = [json.loads(line) for line in string.split(&amp;#x27;\n&amp;#x27;) if line]

            if not task_list:
                raise ValueError(&amp;quot;\nNo tasks found.\n&amp;quot;)

            return task_list
    except FileNotFoundError:
        print(&amp;quot;tasks.txt not found&amp;quot;)&lt;/pre&gt;
  &lt;p id=&quot;fzDA&quot;&gt;сделать стабильное меню или вынести на графический дизайн или в тг&lt;/p&gt;

</content></entry><entry><id>solitkas:Z4qA4zFXEnd</id><link rel="alternate" type="text/html" href="https://teletype.in/@solitkas/Z4qA4zFXEnd?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=solitkas"></link><title>Вычисления алгоритмической сложности</title><published>2022-12-22T12:41:57.045Z</published><updated>2022-12-23T12:28:49.119Z</updated><summary type="html">&lt;img src=&quot;https://img2.teletype.in/files/dd/df/dddf7868-2de7-4ffc-be89-eafc6848a98a.png&quot;&gt;Почему O(1) а не O(0) - потому что у нас хоть что-то выполняется </summary><content type="html">
  &lt;h3 id=&quot;07H4&quot;&gt;Сложность по времени:&lt;/h3&gt;
  &lt;p id=&quot;Gcho&quot;&gt;Почему O(1) а не O(0) - потому что у нас хоть что-то выполняется &lt;/p&gt;
  &lt;p id=&quot;dGmo&quot;&gt;O(1) - это самая быстрая сложность. Она означает, что алгоритм выполняется одинаково быстро, независимо от размера входных данных. Например, если вы хотите найти первый элемент в списке, то это всегда займет одно и то же время, независимо от того, сколько элементов в списке.&lt;/p&gt;
  &lt;figure id=&quot;23qh&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/dd/df/dddf7868-2de7-4ffc-be89-eafc6848a98a.png&quot; width=&quot;619&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;nEJv&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;VEl3&quot;&gt;O(n) - это линейная сложность&lt;/p&gt;
  &lt;p id=&quot;eG7m&quot;&gt;Она означает, что сложность алгоритма растет пропорционально количеству элементов в входных данных&lt;/p&gt;
  &lt;figure id=&quot;YUeq&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/66/b1/66b1ded7-10ee-45fc-ab2a-6deec3d11c69.png&quot; width=&quot;808&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;k23D&quot;&gt;O(n) - мы понимаем, что наш алгоритм максимально сделает столько шагов сколько у нас элементов&lt;/p&gt;
  &lt;p id=&quot;NcZF&quot;&gt;O - это самый худший случай (сколько максимально шагов может сделать наш алгоритм)&lt;/p&gt;
  &lt;p id=&quot;vmjg&quot;&gt;n - len(a) в самом худшем случае мы пройдем n шагов, для этого алгоритма&lt;/p&gt;
  &lt;p id=&quot;naGT&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;sXik&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;jZHb&quot;&gt;Квадратичная сложность — O(n^2)&lt;/p&gt;
  &lt;p id=&quot;luop&quot;&gt;В классической реализации речь идёт о двух вложенных циклах, когда внутренний цикл выполняется для каждого элемента внешнего цикла.&lt;/p&gt;
  &lt;p id=&quot;5Hl1&quot;&gt;Например, если у нас есть массив из 10 элементов, то для обработки этого массива алгоритму потребуется 100 операций (10 * 10).&lt;/p&gt;
  &lt;p id=&quot;UtoP&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;mPiq&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;0IWf&quot;&gt;&lt;/p&gt;
  &lt;figure id=&quot;0u9p&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/65/4f/654fc8fa-e7b0-4a88-a022-3104a454f819.png&quot; width=&quot;1920&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;NlzP&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/3e/2a/3e2a5345-9a73-4fb7-bd18-26302a5df4ac.png&quot; width=&quot;1920&quot; /&gt;
  &lt;/figure&gt;

</content></entry><entry><id>solitkas:HTvuv8sUhzM</id><link rel="alternate" type="text/html" href="https://teletype.in/@solitkas/HTvuv8sUhzM?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=solitkas"></link><title>JSONPath</title><published>2022-12-20T16:29:57.242Z</published><updated>2022-12-20T16:38:23.800Z</updated><summary type="html">JSONPath - это специальный язык запросов, который позволяет выбирать отдельные элементы из JSON-структуры по определенным критериям. Он похож на XPath, который используется для извлечения данных из XML-документов.</summary><content type="html">
  &lt;pre id=&quot;x47I&quot; data-lang=&quot;python&quot;&gt;pip install jsonpath-rw

import json
from jsonpath_rw import jsonpath, parse

# Парсинг JSON-строки и сохранение результата в виде Python-объекта
data = json.loads(&amp;#x27;{&amp;quot;store&amp;quot;:{&amp;quot;book&amp;quot;:[{&amp;quot;title&amp;quot;:&amp;quot;The Alchemist&amp;quot;,&amp;quot;price&amp;quot;:8.95}]}}&amp;#x27;)

# Создание JSONPath-выражения для извлечения значений ключа &amp;quot;title&amp;quot;
expression = parse(&amp;#x27;$.store.book[*].title&amp;#x27;)

# Извлечение значений с помощью JSONPath-выражения
titles = [match.value for match in expression.find(data)]
print(titles)  # [&amp;#x27;The Alchemist&amp;#x27;]

&lt;/pre&gt;
  &lt;p id=&quot;Lj2O&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;Cw6T&quot;&gt;JSONPath - это специальный язык запросов, который позволяет выбирать отдельные элементы из JSON-структуры по определенным критериям. Он похож на XPath, который используется для извлечения данных из XML-документов.&lt;/p&gt;
  &lt;p id=&quot;oVv9&quot;&gt;Чтобы использовать JSONPath Online Evaluator, нужно следующее:&lt;/p&gt;
  &lt;ol id=&quot;rCdw&quot;&gt;
    &lt;li id=&quot;SUY0&quot;&gt;Перейдите на сайт, на котором размещен инструмент. В поисковой строке введите &amp;quot;JSONPath Online Evaluator&amp;quot; и нажмите Enter.&lt;/li&gt;
    &lt;li id=&quot;KJIc&quot;&gt;В поле &amp;quot;Input&amp;quot; введите JSON-документ, который Вы хотите анализировать. Это может быть любая JSON-структура, например:&lt;/li&gt;
  &lt;/ol&gt;
  &lt;pre id=&quot;58tr&quot; data-lang=&quot;python&quot;&gt;{
  &amp;quot;store&amp;quot;: {
    &amp;quot;book&amp;quot;: [
      {
        &amp;quot;category&amp;quot;: &amp;quot;reference&amp;quot;,
        &amp;quot;author&amp;quot;: &amp;quot;Nigel Rees&amp;quot;,
        &amp;quot;title&amp;quot;: &amp;quot;Sayings of the Century&amp;quot;,
        &amp;quot;price&amp;quot;: 8.95
      },
      {
        &amp;quot;category&amp;quot;: &amp;quot;fiction&amp;quot;,
        &amp;quot;author&amp;quot;: &amp;quot;Evelyn Waugh&amp;quot;,
        &amp;quot;title&amp;quot;: &amp;quot;Sword of Honour&amp;quot;,
        &amp;quot;price&amp;quot;: 12.99
      },
      {
        &amp;quot;category&amp;quot;: &amp;quot;fiction&amp;quot;,
        &amp;quot;author&amp;quot;: &amp;quot;Herman Melville&amp;quot;,
        &amp;quot;title&amp;quot;: &amp;quot;Moby Dick&amp;quot;,
        &amp;quot;isbn&amp;quot;: &amp;quot;0-553-21311-3&amp;quot;,
        &amp;quot;price&amp;quot;: 8.99
      },
      {
        &amp;quot;category&amp;quot;: &amp;quot;fiction&amp;quot;,
        &amp;quot;author&amp;quot;: &amp;quot;J. R. R. Tolkien&amp;quot;,
        &amp;quot;title&amp;quot;: &amp;quot;The Lord of the Rings&amp;quot;,
        &amp;quot;isbn&amp;quot;: &amp;quot;0-395-19395-8&amp;quot;,
        &amp;quot;price&amp;quot;: 22.99
      }
    ],
    &amp;quot;bicycle&amp;quot;: {
      &amp;quot;color&amp;quot;: &amp;quot;red&amp;quot;,
      &amp;quot;price&amp;quot;: 19.95
    }
  },
  &amp;quot;expensive&amp;quot;: 10
}
&lt;/pre&gt;
  &lt;p id=&quot;8AuM&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;eEVS&quot;&gt;Например, чтобы выбрать все книги с категорией &amp;quot;fiction&amp;quot;, можно использовать следующий запрос:&lt;/p&gt;
  &lt;pre id=&quot;Wd1e&quot;&gt;$.store.book[?(@.category == &amp;#x27;fiction&amp;#x27;)]&lt;/pre&gt;
  &lt;p id=&quot;Ta2l&quot;&gt;В этом JSONPath-запросе используется фильтрующее выражение &lt;code&gt;[?(@.category == &amp;#x27;fiction&amp;#x27;)]&lt;/code&gt;, которое выбирает только те книги, у которых поле &amp;quot;category&amp;quot; равно &amp;quot;fiction&amp;quot;.&lt;/p&gt;
  &lt;p id=&quot;Ouwk&quot;&gt;Общий синтаксис фильтрующего выражения такой:&lt;/p&gt;
  &lt;pre id=&quot;M3Xq&quot;&gt;[?(&amp;lt;условие&amp;gt;)]
&lt;/pre&gt;
  &lt;p id=&quot;zZRw&quot;&gt;Где условие - это логическое выражение, которое возвращает true или false. Если условие верно, то элемент включается в результат, иначе он исключается.&lt;/p&gt;
  &lt;p id=&quot;7aT8&quot;&gt;В нашем случае условием является &lt;code&gt;@.category == &amp;#x27;fiction&amp;#x27;&lt;/code&gt;, которое сравнивает значение поля &amp;quot;category&amp;quot; со строкой &amp;quot;fiction&amp;quot;. Оператор &lt;code&gt;@&lt;/code&gt; указывает на текущий элемент (в данном случае - книгу), а оператор &lt;code&gt;==&lt;/code&gt; сравнивает два значения на равенство. Если значение поля &amp;quot;category&amp;quot; равно &amp;quot;fiction&amp;quot;, то условие верно и элемент включается в результат.&lt;/p&gt;
  &lt;p id=&quot;3Sjo&quot;&gt;&lt;/p&gt;
  &lt;ol id=&quot;IcVr&quot;&gt;
    &lt;li id=&quot;qSDg&quot;&gt;Специальный символ &lt;code&gt;$&lt;/code&gt; указывает на корневой элемент документа. Например, чтобы выбрать весь документ, можно использовать запрос &lt;code&gt;$&lt;/code&gt;.&lt;/li&gt;
    &lt;li id=&quot;5s7b&quot;&gt;Символ &lt;code&gt;@&lt;/code&gt; указывает на текущий элемент. Например, чтобы выбрать все значения поля &amp;quot;title&amp;quot;, можно использовать запрос &lt;code&gt;$.store.book[*].title&lt;/code&gt;.&lt;/li&gt;
    &lt;li id=&quot;R85h&quot;&gt;Символ &lt;code&gt;*&lt;/code&gt; означает &amp;quot;все элементы&amp;quot;. Например, чтобы выбрать все книги, можно использовать запрос &lt;code&gt;$.store.book[*]&lt;/code&gt;.&lt;/li&gt;
    &lt;li id=&quot;fvDL&quot;&gt;Символ &lt;code&gt;..&lt;/code&gt; означает &amp;quot;рекурсивно все элементы&amp;quot;. Например, чтобы выбрать все элементы во всех вложенных объектах, можно использовать запрос &lt;code&gt;$..*&lt;/code&gt;.&lt;/li&gt;
    &lt;li id=&quot;5EWd&quot;&gt;Фильтрующие выражения могут быть использованы для выборки элементов с определенными свойствами. Фильтрующие выражения выглядят так: &lt;code&gt;[?(&amp;lt;условие&amp;gt;)]&lt;/code&gt;, где условие - это логическое выражение&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;zJ20&quot;&gt;&lt;/p&gt;
  &lt;ol id=&quot;NGUY&quot;&gt;
    &lt;li id=&quot;gUgQ&quot;&gt;Символ &lt;code&gt;[&amp;lt;индекс&amp;gt;]&lt;/code&gt; позволяет выбирать элемент по его индексу в массиве. Например, чтобы выбрать вторую книгу, можно использовать запрос &lt;code&gt;$.store.book[1]&lt;/code&gt;.&lt;/li&gt;
    &lt;li id=&quot;2a3h&quot;&gt;Символ &lt;code&gt;[&amp;lt;start&amp;gt;:&amp;lt;end&amp;gt;]&lt;/code&gt; позволяет выбирать срез элементов массива. Например, чтобы выбрать вторую и третью книгу, можно использовать запрос &lt;code&gt;$.store.book[1:3]&lt;/code&gt;.&lt;/li&gt;
    &lt;li id=&quot;k7jc&quot;&gt;Символ &lt;code&gt;[-&amp;lt;n&amp;gt;]&lt;/code&gt; позволяет выбирать последние n элементов массива. Например, чтобы выбрать последние две книги, можно использовать запрос &lt;code&gt;$.store.book[-2:]&lt;/code&gt;.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;uNVr&quot;&gt;Помимо этих символов, JSONPath также поддерживает различные функции, которые можно использовать для обработки данных. Например, функция &lt;code&gt;length()&lt;/code&gt; возвращает количество элементов в массиве.&lt;/p&gt;
  &lt;p id=&quot;PuvL&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;nNJp&quot;&gt;&lt;/p&gt;
  &lt;ol id=&quot;vAXW&quot;&gt;
    &lt;li id=&quot;ERi1&quot;&gt;Выбрать все книги, у которых поле &amp;quot;category&amp;quot; равно &amp;quot;fiction&amp;quot;: &lt;code&gt;$.store.book[?(@.category == &amp;#x27;fiction&amp;#x27;)]&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;kfF1&quot;&gt;Выбрать названия всех книг: &lt;code&gt;$.store.book[*].title&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;hsu8&quot;&gt;Выбрать все цены книг: &lt;code&gt;$..price&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;BrWC&quot;&gt;Выбрать первую книгу: &lt;code&gt;$.store.book[0]&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;GxK9&quot;&gt;Выбрать последнюю книгу: &lt;code&gt;$.store.book[-1:]&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;60pf&quot;&gt;Выбрать вторую и третью книгу: &lt;code&gt;$.store.book[1:3]&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;B4RN&quot;&gt;Выбрать все книги, у которых указан идентификатор ISBN: &lt;code&gt;$.store.book[?(@.isbn)]&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;tafc&quot;&gt;Выбрать все авторы книг: &lt;code&gt;$..author&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;VkWX&quot;&gt;Выбрать все элементы во всех вложенных объектах: &lt;code&gt;$..*&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;M2Lq&quot;&gt;Выбрать количество книг: &lt;code&gt;length($.store.book)&lt;/code&gt;&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;5lue&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;DvTM&quot;&gt;Чтобы совместить оба примера запроса JSONPath, нужно объединить условия фильтрации с помощью логического оператора &lt;code&gt;AND&lt;/code&gt; (&lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt;). Получится следующий запрос:&lt;/p&gt;
  &lt;pre id=&quot;1Ne3&quot;&gt;$.store.book[?(@.price &amp;lt; 10 &amp;amp;&amp;amp; (@.category == &amp;#x27;reference&amp;#x27; || @.category == &amp;#x27;fiction&amp;#x27;))]
&lt;/pre&gt;
  &lt;p id=&quot;BTBf&quot;&gt;Этот запрос выберет все книги, у которых цена меньше 10 долларов и категория равна &amp;quot;reference&amp;quot; или &amp;quot;fiction&amp;quot;.&lt;/p&gt;
  &lt;p id=&quot;OCbR&quot;&gt;Обратите внимание, что условие &lt;code&gt;@.category == &amp;#x27;reference&amp;#x27; || @.category == &amp;#x27;fiction&amp;#x27;&lt;/code&gt; нужно обернуть в скобки, так как это объединение двух условий с помощью логического оператора &lt;code&gt;OR&lt;/code&gt;.&lt;/p&gt;
  &lt;p id=&quot;8a3w&quot;&gt;&lt;/p&gt;
  &lt;ol id=&quot;uIiK&quot;&gt;
    &lt;li id=&quot;OGyS&quot;&gt;Выбрать весь документ: &lt;code&gt;$&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;yGy1&quot;&gt;Выбрать все значения поля &amp;quot;name&amp;quot;: &lt;code&gt;$.name&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;DmUa&quot;&gt;Выбрать все элементы массива: &lt;code&gt;$.array[*]&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;89ey&quot;&gt;Выбрать первый элемент массива: &lt;code&gt;$.array[0]&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;98Pf&quot;&gt;Выбрать все элементы массива, у которых поле &amp;quot;enabled&amp;quot; равно true: &lt;code&gt;$.array[?(@.enabled)]&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;07hp&quot;&gt;Выбрать все элементы массива с четным индексом: &amp;#x60;$.array[0,2,4,6,8]&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;X3rn&quot;&gt;&lt;/p&gt;
  &lt;ol id=&quot;gTZk&quot;&gt;
    &lt;li id=&quot;qqVh&quot;&gt;Выбрать все элементы массива с нечетным индексом: &lt;code&gt;$.array[1,3,5,7,9]&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;f0Mq&quot;&gt;Выбрать второй и третий элементы массива: &lt;code&gt;$.array[1:3]&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;JcRm&quot;&gt;Выбрать последний элемент массива: &lt;code&gt;$.array[-1:]&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;ROgJ&quot;&gt;Выбрать все элементы массива, у которых поле &amp;quot;type&amp;quot; равно &amp;quot;primary&amp;quot; или &amp;quot;secondary&amp;quot;: &lt;code&gt;$.array[?(@.type == &amp;#x27;primary&amp;#x27; || @.type == &amp;#x27;secondary&amp;#x27;)]&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;mikZ&quot;&gt;Выбрать все элементы массива, у которых поле &amp;quot;type&amp;quot; равно &amp;quot;primary&amp;quot; и поле &amp;quot;enabled&amp;quot; равно true: &lt;code&gt;$.array[?(@.type == &amp;#x27;primary&amp;#x27; &amp;amp;&amp;amp; @.enabled)]&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;K0S0&quot;&gt;Выбрать все значения поля &amp;quot;name&amp;quot; у элементов массива: &lt;code&gt;$.array[*].name&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;13WG&quot;&gt;Выбрать все значения поля &amp;quot;value&amp;quot; во всех вложенных объектах: &lt;code&gt;$..value&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;0pZM&quot;&gt;Выбрать все элементы массива, у которых поле &amp;quot;name&amp;quot; содержит строку &amp;quot;item&amp;quot;: &lt;code&gt;$.array[?(@.name.contains(&amp;#x27;item&amp;#x27;))]&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;vVZo&quot;&gt;Выбрать количество элементов массива: &lt;code&gt;length($.array)&lt;/code&gt;&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;T15u&quot;&gt;&lt;/p&gt;
  &lt;ol id=&quot;qGeu&quot;&gt;
    &lt;li id=&quot;wcG6&quot;&gt;Выбрать все элементы массива, у которых поле &amp;quot;name&amp;quot; начинается со строки &amp;quot;item&amp;quot;: &lt;code&gt;$.array[?(@.name.startsWith(&amp;#x27;item&amp;#x27;))]&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;kgLb&quot;&gt;Выбрать все элементы массива, у которых поле &amp;quot;name&amp;quot; заканчивается строкой &amp;quot;item&amp;quot;: &lt;code&gt;$.array[?(@.name.endsWith(&amp;#x27;item&amp;#x27;))]&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;YFoK&quot;&gt;Выбрать все элементы массива, у которых поле &amp;quot;value&amp;quot; является числом: &lt;code&gt;$.array[?(@.value.isNumber())]&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;A1RS&quot;&gt;Выбрать все элементы массива, у которых поле &amp;quot;value&amp;quot; является строкой: &lt;code&gt;$.array[?(@.value.isString())]&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;4EFJ&quot;&gt;Выбрать все элементы массива, у которых поле &amp;quot;value&amp;quot; является логическим значением: &lt;code&gt;$.array[?(@.value.isBoolean())]&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;ELPg&quot;&gt;Выбрать все элементы массива, у которых поле &amp;quot;value&amp;quot; является массивом: &lt;code&gt;$.array[?(@.value.isArray())]&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;C026&quot;&gt;Выбрать все элементы массива, у которых поле &amp;quot;value&amp;quot; является объектом: &lt;code&gt;$.array[?(@.value.isObject())]&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;BIN8&quot;&gt;Выбрать все элементы массива, у которых поле &amp;quot;value&amp;quot; является null: &lt;code&gt;$.array[?(@.value.isNull())]&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;DiQr&quot;&gt;Выбрать первый элемент массива с помощью функции head(): &lt;code&gt;$.array[0]&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;7ltq&quot;&gt;Выбрать все элементы массива, кроме первого с помощью функции tail(): &lt;code&gt;$.array[1:]&lt;/code&gt;&lt;/li&gt;
  &lt;/ol&gt;

</content></entry><entry><id>solitkas:v8xAmRsujb3</id><link rel="alternate" type="text/html" href="https://teletype.in/@solitkas/v8xAmRsujb3?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=solitkas"></link><title>Исключения в Python и немного о try-except и raise</title><published>2022-12-13T15:12:04.848Z</published><updated>2022-12-18T13:30:41.032Z</updated><summary type="html">&lt;img src=&quot;https://img1.teletype.in/files/c9/2c/c92c6ca8-d18e-4c7e-8a7f-6498e992d7bd.png&quot;&gt;try-except-finally нужны чтоб отловить возникшую проблему в коде, и как-то ее отработать </summary><content type="html">
  &lt;p id=&quot;lZ8H&quot;&gt;try-except-finally нужны чтоб отловить возникшую проблему в коде, и как-то ее отработать &lt;/p&gt;
  &lt;blockquote id=&quot;wuyE&quot;&gt;&lt;strong&gt;Этот механизм называется перехват исключений &lt;/strong&gt;&lt;/blockquote&gt;
  &lt;p id=&quot;MCZQ&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;1EEh&quot;&gt;Конструкция try работает таким образом:&lt;/p&gt;
  &lt;ul id=&quot;S53S&quot;&gt;
    &lt;li id=&quot;cQTW&quot;&gt;сначала выполняются выражения, которые записаны в блоке try&lt;/li&gt;
    &lt;li id=&quot;sewx&quot;&gt;если при выполнения блока try не возникло никаких исключений, блок except пропускается, и выполняется дальнейший код&lt;/li&gt;
    &lt;li id=&quot;GCus&quot;&gt;если во время выполнения блока try в каком-то месте возникло исключение, оставшаяся часть блока try пропускается&lt;/li&gt;
    &lt;ul id=&quot;82Om&quot;&gt;
      &lt;li id=&quot;GygI&quot;&gt;если в блоке except указано исключение, которое возникло, выполняется код в блоке except&lt;/li&gt;
      &lt;li id=&quot;WdEM&quot;&gt;если исключение, которое возникло, не указано в блоке except, выполнение программы прерывается и выдается ошибка&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;p2Yx&quot;&gt;Обратите внимание, что строка &lt;code&gt;Cool!&lt;/code&gt; в блоке try не выводится:&lt;/p&gt;
  &lt;pre id=&quot;uZtX&quot; data-lang=&quot;python&quot;&gt;In [4]: try:
   ...:     print(&amp;quot;Let&amp;#x27;s divide some numbers&amp;quot;)
   ...:     2/0
   ...:     print(&amp;#x27;Cool!&amp;#x27;)
   ...: except ZeroDivisionError:
   ...:     print(&amp;quot;You can&amp;#x27;t divide by zero&amp;quot;)
   ...:
Let&amp;#x27;s divide some numbers
You can&amp;#x27;t divide by zero&lt;/pre&gt;
  &lt;p id=&quot;g8wd&quot;&gt;&lt;/p&gt;
  &lt;h3 id=&quot;G8DN&quot;&gt;&lt;strong&gt;Вывести нашу ошибку &lt;/strong&gt;&lt;/h3&gt;
  &lt;figure id=&quot;rVvP&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/c9/2c/c92c6ca8-d18e-4c7e-8a7f-6498e992d7bd.png&quot; width=&quot;754&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;iVW1&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/64/48/64489ffb-27d7-4e80-ad4a-2950675dfc0e.png&quot; width=&quot;592&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;y0a0&quot;&gt;В конструкции try/except может быть много except, если нужны разные действия в зависимости от типа ошибки.&lt;/p&gt;
  &lt;p id=&quot;Q2a9&quot;&gt;Например, скрипт divide.py делит два числа введенных пользователем:&lt;/p&gt;
  &lt;pre id=&quot;esPi&quot; data-lang=&quot;python&quot;&gt;# -*- coding: utf-8 -*-

try:
    a = input(&amp;quot;Введите первое число: &amp;quot;)
    b = input(&amp;quot;Введите второе число: &amp;quot;)
    print(&amp;quot;Результат: &amp;quot;, round(float(a)/float(b), 2))
except ValueError:
    print(&amp;quot;Пожалуйста, вводите только числа&amp;quot;)
except ZeroDivisionError:
    print(&amp;quot;На ноль делить нельзя&amp;quot;)&lt;/pre&gt;
  &lt;p id=&quot;IUH8&quot;&gt;В данном случае исключение &lt;strong&gt;ValueError&lt;/strong&gt; возникает, когда пользователь ввел строку вместо числа, во время перевода строки в число.&lt;/p&gt;
  &lt;p id=&quot;yKOQ&quot;&gt;Исключение ZeroDivisionError возникает в случае, если второе число было равным 0.&lt;/p&gt;
  &lt;p id=&quot;4YqJ&quot;&gt;Если нет необходимости выводить различные сообщения на ошибки ValueError и ZeroDivisionError, можно сделать так:&lt;/p&gt;
  &lt;pre id=&quot;cbyR&quot; data-lang=&quot;python&quot;&gt;# -*- coding: utf-8 -*-

try:
    a = input(&amp;quot;Введите первое число: &amp;quot;)
    b = input(&amp;quot;Введите второе число: &amp;quot;)
    print(&amp;quot;Результат: &amp;quot;, int(a)/int(b))
except (ValueError, ZeroDivisionError):
    print(&amp;quot;Что-то пошло не так...&amp;quot;)&lt;/pre&gt;
  &lt;p id=&quot;lXN9&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;Kror&quot;&gt;В блоке except можно не указывать конкретное исключение или исключения. В таком случае будут перехватываться все исключения.&lt;/p&gt;
  &lt;p id=&quot;BWuw&quot;&gt;&lt;strong&gt;Это делать не рекомендуется!&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;6h8V&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;KT7t&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;MG9q&quot;&gt;raise&lt;/h2&gt;
  &lt;p id=&quot;sTXA&quot;&gt;raise используем чтобы бросить исключение самостоятельно, при этом можно указать какое конкретно исключение бросить. Если не указать то будет брошено последнее упавшее исключение (важно чтобы оно было!)&lt;/p&gt;
  &lt;p id=&quot;E3ky&quot;&gt;Проверяем условие, если что-то неправильно кидаем ошибку &lt;/p&gt;
  &lt;figure id=&quot;IADW&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/43/df/43df9000-a718-4f7f-9723-0e3948b3cdd7.png&quot; width=&quot;684&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;VC9I&quot;&gt;Закинуть ошибку в мейн&lt;/p&gt;
  &lt;figure id=&quot;w4G3&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/73/6b/736b3e2e-8cc9-422d-809a-dfd29beaef28.png&quot; width=&quot;820&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;MoZN&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;ucaQ&quot;&gt;try/except/else&lt;/h2&gt;
  &lt;p id=&quot;60cl&quot;&gt;В конструкции try/except есть опциональный блок else. Он выполняется в том случае, если не было исключения.&lt;/p&gt;
  &lt;p id=&quot;8Ajk&quot;&gt;Например, если необходимо выполнять в дальнейшем какие-то операции с данными, которые ввел пользователь, можно записать их в блоке else&lt;/p&gt;
  &lt;pre id=&quot;hjN2&quot; data-lang=&quot;python&quot;&gt;# -*- coding: utf-8 -*-

try:
    a = input(&amp;quot;Введите первое число: &amp;quot;)
    b = input(&amp;quot;Введите второе число: &amp;quot;)
    result = int(a)/int(b)
except (ValueError, ZeroDivisionError):
    print(&amp;quot;Что-то пошло не так...&amp;quot;)
else:
    print(&amp;quot;Результат в квадрате: &amp;quot;, result**2)&lt;/pre&gt;
  &lt;p id=&quot;p2BY&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;K4XR&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;2Bwf&quot;&gt;try/except/finally&lt;/h2&gt;
  &lt;p id=&quot;b61e&quot;&gt;НО важно понимать, что файналли это не какой то волшебный блок, исключение может упасть и там, нужно обдумывать логику этого блока (например не использовать переменные, которые могли не быть созданы)&lt;/p&gt;
  &lt;p id=&quot;XX3t&quot;&gt;Блок finally - это еще один опциональный блок в конструкции try. Он выполняется &lt;strong&gt;всегда&lt;/strong&gt;, независимо от того, было ли исключение или нет.&lt;/p&gt;
  &lt;p id=&quot;Kd28&quot;&gt;Сюда ставятся действия, которые надо выполнить в любом случае. Например, это может быть закрытие файла.&lt;/p&gt;
  &lt;p id=&quot;ezPl&quot;&gt;Файл divide_ver4.py с блоком finally:&lt;/p&gt;
  &lt;pre id=&quot;47ZS&quot; data-lang=&quot;python&quot;&gt;# -*- coding: utf-8 -*-

try:
    a = input(&amp;quot;Введите первое число: &amp;quot;)
    b = input(&amp;quot;Введите второе число: &amp;quot;)
    result = int(a)/int(b)
except (ValueError, ZeroDivisionError):
    print(&amp;quot;Что-то пошло не так...&amp;quot;)
else:
    print(&amp;quot;Результат в квадрате: &amp;quot;, result**2)
finally:
    print(&amp;quot;Вот и сказочке конец, а кто слушал - молодец.&amp;quot;)&lt;/pre&gt;
  &lt;p id=&quot;eCYa&quot;&gt;Проверка:&lt;/p&gt;
  &lt;pre id=&quot;eITG&quot;&gt;$ python divide_ver4.py
Введите первое число: 10
Введите второе число: 2
Результат в квадрате:  25
Вот и сказочке конец, а кто слушал - молодец.

$ python divide_ver4.py
Введите первое число: qwerewr
Введите второе число: 3
Что-то пошло не так...
Вот и сказочке конец, а кто слушал - молодец.

$ python divide_ver4.py
Введите первое число: 4
Введите второе число: 0
Что-то пошло не так...
Вот и сказочке конец, а кто слушал - молодец.&lt;/pre&gt;

</content></entry><entry><id>solitkas:iC2xJUczdM3</id><link rel="alternate" type="text/html" href="https://teletype.in/@solitkas/iC2xJUczdM3?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=solitkas"></link><title>Что нужно знать о библиотеке collections в Python</title><published>2022-12-13T12:41:26.839Z</published><updated>2022-12-13T12:43:41.390Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img1.teletype.in/files/07/5f/075f961c-ddb7-4ad5-86b8-bcfefad79169.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://img1.teletype.in/files/0c/90/0c90a8c0-fbee-4d89-a6a8-45f3e74f76c5.png&quot;&gt;ChainMap нужен для логического (не объединяем физически) объединения словарей для поиска информации, физического копирования словарей не происходит и если изменить один из исходников, то изменении отобразится и в chainMap. Удобен для поиска информации, но при изменениях меняется первый словарь в наборе.</summary><content type="html">
  &lt;pre id=&quot;6GRk&quot;&gt;from collections import ChainMap&lt;/pre&gt;
  &lt;p id=&quot;NqFb&quot;&gt;ChainMap нужен для &lt;strong&gt;логического&lt;/strong&gt; (не объединяем физически) объединения словарей для поиска информации, физического копирования словарей не происходит и если изменить один из исходников, то изменении отобразится и в chainMap. Удобен для поиска информации, но при изменениях меняется первый словарь в наборе.&lt;/p&gt;
  &lt;figure id=&quot;sivZ&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/0c/90/0c90a8c0-fbee-4d89-a6a8-45f3e74f76c5.png&quot; width=&quot;713&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;nxoy&quot;&gt;Но при его изменениях будет изменять только первый словарь &lt;/p&gt;
  &lt;figure id=&quot;Z0Wg&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/80/47/80476b2e-0d03-40f5-afb8-0db72663e264.png&quot; width=&quot;778&quot; /&gt;
  &lt;/figure&gt;
  &lt;pre id=&quot;nnMT&quot;&gt;from collections import namedtuple&lt;/pre&gt;
  &lt;p id=&quot;O3SZ&quot;&gt;Именованный кортеж, очень удобно, можно обращаться и по индексу и по ключу&lt;/p&gt;
  &lt;figure id=&quot;cIWI&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/1c/8a/1c8aaa90-c48b-411a-ab06-7fb55bf04de1.png&quot; width=&quot;819&quot; /&gt;
  &lt;/figure&gt;

</content></entry><entry><id>solitkas:3SbJYwaUrgZ</id><link rel="alternate" type="text/html" href="https://teletype.in/@solitkas/3SbJYwaUrgZ?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=solitkas"></link><title>Сollections defaultdict python</title><published>2022-12-09T11:21:31.143Z</published><updated>2022-12-13T12:26:20.041Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img3.teletype.in/files/ec/17/ec17ddac-227a-4ed1-88dd-1eb97dc30ca9.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://img3.teletype.in/files/a2/e9/a2e94d1f-7099-4c4b-b970-11ff960a5ca1.png&quot;&gt;defaultdict нужен для создания словаря со значением по умолчанию. Значение подставляется при обращении к несуществующему ключу, что позволяет не писать лишней логики. В остальном аналогичен обычному словарю</summary><content type="html">
  &lt;p id=&quot;WZN5&quot;&gt;defaultdict нужен для создания словаря со значением по умолчанию. Значение подставляется при обращении к несуществующему ключу, что позволяет не писать лишней логики. В остальном аналогичен обычному словарю&lt;/p&gt;
  &lt;p id=&quot;bgB6&quot;&gt;При обращении к несуществующему ключу кидает ошибку&lt;/p&gt;
  &lt;figure id=&quot;HZaE&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/a2/e9/a2e94d1f-7099-4c4b-b970-11ff960a5ca1.png&quot; width=&quot;805&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;2PF4&quot;&gt;А если мы хотим чтоб он создавался то используем:&lt;/p&gt;
  &lt;p id=&quot;ck2u&quot;&gt;from collections import defaultdict&lt;/p&gt;
  &lt;p id=&quot;3X9x&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;fxZj&quot;&gt;Если ключа нет то он создастся с каким либо значение по умолчанию, так как мы указали тип int то вызовется функция int() которая возвращает 0&lt;/p&gt;
  &lt;figure id=&quot;jEAQ&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/b3/02/b30265b0-fcb1-45cb-8e54-5e26b5f49143.png&quot; width=&quot;777&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;wzXx&quot;&gt;Сделали значения по умолчанию список, так как ключа &amp;quot;s&amp;quot; нет в нашем словаре, то создался пустой список&lt;/p&gt;
  &lt;figure id=&quot;89vT&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/0d/30/0d303e32-4f86-411d-86cb-e72a7b75fc5f.png&quot; width=&quot;713&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;Tnne&quot;&gt;Также можно создавать пару ключ-значение&lt;/p&gt;
  &lt;figure id=&quot;CPrS&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/fe/e0/fee0b336-5875-47c3-b9c0-deb811b9bf94.png&quot; width=&quot;713&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;Ucds&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;1CMG&quot;&gt;&lt;strong&gt;Или указывать что будет создаваться по умолчанию&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;BWz3&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/06/9f/069ffd2d-b3ad-46ce-a03c-edc7e3bd78db.png&quot; width=&quot;848&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;EUIz&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;GtFY&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;mUzA&quot;&gt;Теперь где это пригодится &lt;/h2&gt;
  &lt;p id=&quot;Vj84&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;PcnA&quot;&gt;Проверяем есть ли ключ то добавляем элемент, если нет создаем ключ и добавляем элемент&lt;/p&gt;
  &lt;figure id=&quot;nxEp&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/84/8b/848b9f63-a4dd-4c61-a1cf-cda37b775ddd.png&quot; width=&quot;1004&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;mUkC&quot;&gt;Посчитать сумму количества элементов, берется имя и по этому ключу считается общее количество &lt;/p&gt;
  &lt;figure id=&quot;fVoa&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/68/e4/68e4375f-3732-49a6-a956-6281ddfd1cd7.png&quot; width=&quot;761&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;PZ5L&quot;&gt;&lt;/p&gt;
  &lt;h3 id=&quot;rely&quot;&gt;Или добавить все элементы по ключу в один список&lt;/h3&gt;
  &lt;figure id=&quot;3m9u&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/73/d1/73d1e455-36c6-45e3-9429-f520a9c27e01.png&quot; width=&quot;933&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;Tyga&quot;&gt;другой метод&lt;/p&gt;
  &lt;figure id=&quot;wCHU&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://telegra.ph/file/8cfe472167e8a79e947f3.png&quot; width=&quot;772&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;pyZt&quot;&gt;&lt;/p&gt;
  &lt;h3 id=&quot;f79o&quot;&gt;Или добавить из этого списка только уникальные элементы &lt;/h3&gt;
  &lt;figure id=&quot;JpUc&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/0a/cb/0acb1395-d9d4-47fa-9757-0550d6e95458.png&quot; width=&quot;770&quot; /&gt;
  &lt;/figure&gt;

</content></entry><entry><id>solitkas:wOAyeEJdPKh</id><link rel="alternate" type="text/html" href="https://teletype.in/@solitkas/wOAyeEJdPKh?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=solitkas"></link><title>Новые фишки</title><published>2022-12-07T11:59:49.282Z</published><updated>2022-12-12T12:31:30.689Z</updated><summary type="html">&lt;img src=&quot;https://img3.teletype.in/files/68/c1/68c13e20-34b5-45db-aa78-1ef11db1a2cb.png&quot;&gt;Вспоминаем что метод sorted() возвращает отсортированный список и методом   &quot; &quot;. join мы это все объединяем </summary><content type="html">
  &lt;p id=&quot;P35S&quot;&gt;Вспоминаем что метод sorted() возвращает отсортированный список и методом   &amp;quot; &amp;quot;. join мы это все объединяем &lt;/p&gt;
  &lt;figure id=&quot;uMxV&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/68/c1/68c13e20-34b5-45db-aa78-1ef11db1a2cb.png&quot; width=&quot;581&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;Q7kJ&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;vIuU&quot;&gt;Найти пропущенную цифру в массиве, для этого делаем множество, находим минимальное максимальное этого числа, делаем диапазон и проверяем есть ли цифры из этого диапазона в нашем массиве&lt;/p&gt;
  &lt;figure id=&quot;8QMQ&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/8d/83/8d833e30-505e-45dc-b084-0be575538c94.png&quot; width=&quot;646&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;KFf0&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;ma5y&quot;&gt;Вспоминаем zip и преобразовать список из кортежей в список из других списков&lt;/p&gt;
  &lt;figure id=&quot;6Kiy&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/47/2e/472e95c8-836e-454e-a53f-3f89b332231b.png&quot; width=&quot;809&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;pqWN&quot;&gt;Найти среднюю длину массива&lt;/p&gt;
  &lt;figure id=&quot;NuKe&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/62/55/62550b77-4993-4237-a962-647f9858d6ef.png&quot; width=&quot;557&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;6syI&quot;&gt;Соединить из двух слов только первые и посчитать время выполнения функции&lt;/p&gt;
  &lt;figure id=&quot;ZpJP&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/ba/af/baaf68a0-b5a6-4141-a29e-22d5a8b1e66b.png&quot; width=&quot;918&quot; /&gt;
  &lt;/figure&gt;

</content></entry><entry><id>solitkas:jWYYKCMiOZI</id><link rel="alternate" type="text/html" href="https://teletype.in/@solitkas/jWYYKCMiOZI?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=solitkas"></link><title>codewars</title><published>2022-12-03T14:10:03.670Z</published><updated>2022-12-25T13:45:32.169Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img3.teletype.in/files/2d/c7/2dc78844-271f-460c-9231-a0adaff9322a.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://img4.teletype.in/files/7e/2b/7e2b8a40-caed-44bb-978b-366084b18625.png&quot;&gt;Посчитать количество четных букв в строке</summary><content type="html">
  &lt;p id=&quot;D4At&quot;&gt;Посчитать количество четных букв в строке&lt;/p&gt;
  &lt;figure id=&quot;LDEy&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/7e/2b/7e2b8a40-caed-44bb-978b-366084b18625.png&quot; width=&quot;733&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;O572&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/f5/48/f5483a7e-d0c7-4108-bd4f-8e98e9719afa.png&quot; width=&quot;677&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;xSXS&quot;&gt;&lt;/h3&gt;
  &lt;p id=&quot;v1qj&quot;&gt;Вот функция, которая проверяет наличие дублей в массиве:&lt;/p&gt;
  &lt;figure id=&quot;34zp&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/77/3c/773cabc9-6646-4326-a3a3-bbe0edaef9e7.png&quot; width=&quot;843&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;XJH5&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;X9IF&quot;&gt;Чтобы посчитать количество четных букв в строке, можно использовать следующую функцию:&lt;/p&gt;
  &lt;figure id=&quot;QX1w&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/5c/7e/5c7e9abe-64e4-4978-999d-e82f11ac85a9.png&quot; width=&quot;779&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;LnbA&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;v3fP&quot;&gt;Программа, которая принимает на вход список строк и выводит строку, содержащую наибольшее количество уникальных символов. Вот как это может выглядеть:&lt;/p&gt;
  &lt;figure id=&quot;ROrp&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/fe/92/fe9236a8-6484-42d8-995d-9b1e00addde0.png&quot; width=&quot;961.3377483443709&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;MHAb&quot;&gt;Или &lt;/p&gt;
  &lt;figure id=&quot;NFH9&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/f2/67/f2675815-e781-4c47-af10-4fb605268042.png&quot; width=&quot;684&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;VBoS&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;HPju&quot;&gt;Reverse a String using Python&lt;/p&gt;
  &lt;figure id=&quot;xnao&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/fb/c7/fbc7a9cf-179d-41de-be2f-7fb6396d5165.png&quot; width=&quot;745&quot; /&gt;
  &lt;/figure&gt;

</content></entry><entry><id>solitkas:rvpJQ6NsEXn</id><link rel="alternate" type="text/html" href="https://teletype.in/@solitkas/rvpJQ6NsEXn?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=solitkas"></link><title>Функция факториал, повторения базы</title><published>2022-12-01T12:32:48.205Z</published><updated>2022-12-01T12:34:08.958Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img2.teletype.in/files/9c/e4/9ce4af0e-be1b-4f00-8d94-f8400ac37990.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://img4.teletype.in/files/39/27/39274a28-260d-456c-a98b-b99fa3cdf425.png&quot;&gt;</summary><content type="html">
  &lt;pre id=&quot;913j&quot; data-lang=&quot;python&quot;&gt;# Факториал
math.factorial(3)

def fact(n):
    count = 1
    for i in range(1, n + 1):
        count *= i
    return count


def new_fact(n):
    if n == 1: return 1
    return n * fact(n - 1)


test = [i ** 2 for i in range(10)]

def number():
    x, y = 4, 3
    print(x / y)
    print(x // y)  # Целочисленное деление (делим на 10, чтоб убрать последнюю цифру)
    print(x % y)  # Деление по модулю - Остаток при делении (делим на 10, чтоб получить последнюю цифру)

    print(math.pow(2, 2))

# Тип данных boolean тесно связан с int (потому что True - 1, False - 0)
# Bool наследуется от int

def string():
    print(&amp;quot;another&amp;quot;.find(&amp;quot;other&amp;quot;))
    print(&amp;quot;cheat&amp;quot;.replace(&amp;quot;c&amp;quot;, &amp;quot;n&amp;quot;))
    print(len(&amp;quot;cheat&amp;quot;))
    print(&amp;quot;ear&amp;quot; in &amp;quot;rear&amp;quot;)

    print(&amp;quot;ear me&amp;quot;.title())
    print(&amp;quot;ear&amp;quot;.startswith(&amp;quot;e&amp;quot;))
    print(&amp;quot; ear&amp;quot;.strip())

    # Конкатенация
    print(&amp;quot;me&amp;quot; + &amp;quot;love&amp;quot;)

    new = &amp;quot; hi &amp;quot;.rstrip()
    new = new.lstrip()
    print(new)&lt;/pre&gt;
  &lt;figure id=&quot;hVCo&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/39/27/39274a28-260d-456c-a98b-b99fa3cdf425.png&quot; width=&quot;1034&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;A5zG&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/48/fe/48fed570-dbe1-450a-8248-e815628b2d08.png&quot; width=&quot;906&quot; /&gt;
  &lt;/figure&gt;

</content></entry></feed>