<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Обучение языку программирования Python]]></title><description><![CDATA[<h2>Введение</h2>
<p dir="auto"><img src="/assets/uploads/files/ad/3d/c2/1771234055264-3a5096ff-6304-4e01-95ae-0e0e104731dc-image-resized.webp" alt="3a5096ff-6304-4e01-95ae-0e0e104731dc-image.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">И так, всем здравствуйте! Меня зовут <em>Кирилл Дворянинов</em> и в этом треде я собираю для себя и для вас компактный, но по‑возможности полный вводный курс по Python. Я не пытаюсь написать еще одну «великую книгу» на сотни страниц - здесь будет только то, что реально нужно, без лишней теории и кругов вокруг да около.</p>
<p dir="auto">По профессии я веб-разработчик, моя базовая «родная» среда - JavaScript и веб‑стек. Python мне понадобился как второй рабочий инструмент: для автоматизации, мелких скриптов, бэкенда и задач, где JS чувствуется уже не так удобно. Я не позиционирую себя как гуру Python; это честный конспект пути разработчика из JS‑мира, который системно осваивает еще один язык и параллельно документирует все по шагам начиная с самого простого понимая.</p>
<p dir="auto">Если совсем коротко, Python - это универсальный язык программирования общего назначения с простым синтаксисом и упором на читаемость кода. На нем пишут бэкенды, скрипты для автоматизации, инструменты анализа данных и машинного обучения, игры, утилиты и еще кучу всего, от домашних скриптов до серьезных сервисов. За счет динамической типизации и лаконичного синтаксиса многие вещи на Python пишутся быстрее и «короче», чем на классических C‑подобных языках.</p>
<p dir="auto"><strong>Подход который я буду использовать в этом материале простой</strong>:</p>
<ul>
<li>минимум лирики, максимум практики;</li>
<li>объяснять так, чтобы было понятно человеку с базовыми представлениями о программировании, а не с двумя высшими по матанализу;</li>
<li>не переписывать документацию, а помогать ее понимать.</li>
</ul>
<p dir="auto">В своем материале я начну с самого фундамента: установки Python, базовых типов и значений, работы с числами и далее по нарастающи. Это та основа, без которой дальше в коде все равно будет больно и непонятно. На всех следующих шагах я буду придерживаться одного принципа: коротко (<em>но не мало</em>), по делу и с живыми примерами, чтобы после каждой части можно было не просто выучить новые слова, а сразу написать и запустить рабочий код.</p>
<h3>Содержание</h3>
<ul>
<li><a href="https://forum.exlends.com/topic/508/obuchenie-yazyku-programmirovaniya-python/2" target="_blank" rel="noopener noreferrer">Установка Python и работа с venv</a></li>
<li><a href="https://forum.exlends.com/topic/508/obuchenie-yazyku-programmirovaniya-python/3" target="_blank" rel="noopener noreferrer">Часть 1 - Типы, значения и переменные</a></li>
<li><a href="https://forum.exlends.com/topic/508/obuchenie-yazyku-programmirovaniya-python/4" target="_blank" rel="noopener noreferrer">Часть 2 - Числа</a></li>
<li><a href="https://forum.exlends.com/topic/508/obuchenie-yazyku-programmirovaniya-python/5" target="_blank" rel="noopener noreferrer">Часть 3 - Условия</a></li>
<li><a href="https://forum.exlends.com/topic/508/obuchenie-yazyku-programmirovaniya-python/6" target="_blank" rel="noopener noreferrer">Часть 4 - Текстовые строки</a><br />
<em>Новые части будут добавляться по мере написания материала</em></li>
</ul>
<blockquote>
<p dir="auto">Задать вопросы можете в чате на форуме, по почте - <code>kdvoryaninov@yandex.ru</code> или в телеграме <code>@kdvoryaninov</code></p>
</blockquote>
]]></description><link>https://forum.exlends.ru/topic/508/obuchenie-yazyku-programmirovaniya-python</link><generator>RSS for Node</generator><lastBuildDate>Wed, 20 May 2026 08:25:22 GMT</lastBuildDate><atom:link href="https://forum.exlends.ru/topic/508.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 14 Feb 2026 09:41:23 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Обучение языку программирования Python on Thu, 19 Feb 2026 22:25:06 GMT]]></title><description><![CDATA[<h2>Часть 4 - Текстовые строки</h2>
<p dir="auto">Из предыдущих частей мы уже видел с вами строки, но в этой части поговорим о них более детально и начнем с основ.<br />
Для того что бы создать строку в языке Python нам необходимо обернуть ее в одинарные или двойные кавычки:</p>
<pre><code class="language-python">"Строка"
'Строка'
</code></pre>
<p dir="auto">Интерпретатор выводит строки в одинарных кавычках, но обрабатываются любые.</p>
<p dir="auto">И так разберемся для чего же у нас есть возможность использовать разные кавычки для строк, основная идея в том что бы использовать те или иные кавычки в сами строках, взглянем на пример:</p>
<pre><code class="language-python">"Вот строка, а вот текст в 'кавычках'"

'Тоже самое, но "наоборот"'
</code></pre>
<p dir="auto">Также допускается использование трех кавычек:</p>
<pre><code class="language-python">"""Строка"""

'''Строка'''
</code></pre>
<p dir="auto">Но у них есть особенность - это работа с многострочным текстом, к примеру четверостишье Бунина:</p>
<pre><code class="language-python">text = """В сухом лесу стреляет длинный кнут,
В кустарнике трещат коровы,
И синие подснежники цветут,
И под ногами лист шуршит дубовый.
"""
</code></pre>
<p dir="auto">Между делом, есть разница между выводом через интерпретатор и функцию <code>print()</code>. Скопируйте код выше в интерпретатор - увидите:</p>
<pre><code class="language-text">'В сухом лесу стреляет длинный кнут,\nВ кустарнике трещат коровы,\nИ синие подснежники цветут,\nИ под ногами лист шуршит дубовый.\n'
</code></pre>
<p dir="auto">Заметили <code>\n</code>? Это символ переноса строки, о нем мы поговорим позже.</p>
<p dir="auto">А если вывести через <code>print()</code>:</p>
<pre><code class="language-python">print("В сухом", 'лесу', """стреляет""", '''длинный кнут''')
</code></pre>
<p dir="auto">Получим: <code>В сухом лесу стреляет длинный кнут</code>. Функция <code>print()</code> добавляет пробелы между аргументами.</p>
<p dir="auto">Наконец, нам могут понадобиться пустые строки, они создаются любым из способов:</p>
<pre><code class="language-python">''
""
''' '''
""" """
</code></pre>
<hr />
<h3>Функция str()</h3>
<p dir="auto">У Python есть отдельная функция которая умеет создавать строку из другого типа данных - <code>str()</code>:</p>
<pre><code class="language-python">str(98.6)
# '98.6'

str(1.0e4)
# '10000.0'

str(True)
# 'True'
</code></pre>
<hr />
<h3>Escape последовательность</h3>
<p dir="auto">Как и обещал ранее, подробнее об обратном слеше <code>\</code> - это escape-последовательность внутри строк. Символ, стоящий перед <code>\</code>, получает особое значение. Наиболее распространённая последовательность <code>\n</code> обозначает переход на новую строку. Благодаря ей можно создать многострочные строки из однострочных. Взглянем на пример:</p>
<pre><code class="language-python">text = 'Один, \nДва, \nТри.'

print(text)
# Один,
# Два,
# Три.
</code></pre>
<p dir="auto">Кроме того в Python есть последовательность табуляции <code>\t</code> которая помогает выравнивать текст:</p>
<pre><code class="language-python">print('\tабв')
    абв

print('а\tбв')
а    бв

print('аб\tв')
аб    в

print('абв\t')
абв
</code></pre>
<blockquote>
<p dir="auto">В последнем примере табуляция есть, но увидеть мы ее не сможем</p>
</blockquote>
<p dir="auto">Рассмотрим еще один пример последовательности, но уже для работы с кавычками <code>\'</code> и <code>\"</code>:</p>
<pre><code class="language-python">text = "\" Раз! \" Два! \" Три! \""
'" Раз! " Два! " Три! "'

print(text)
" Раз! " Два! " Три! "
</code></pre>
<p dir="auto">Может возникнуть ситуации когда нам понадобится обратный слеш в тексте, для этого используем просто два слеша подряд вот так:</p>
<pre><code class="language-python">text = "Вот \\ - слеш"
print(text)
# Вот \ - слеш
</code></pre>
<hr />
<h3>Объединение строк символом +</h3>
<p dir="auto">Почти как с числами, только наоборот: для строк можно использовать оператор сложения <code>+</code>, который объединяет две и более строки в одну:</p>
<pre><code class="language-python">'Первый ' + 'Второй'
# 'Первый Второй'

'Первый' + 'Второй'
# 'ПервыйВторой'

'Первый' + ' ' + 'Второй'
# 'Первый Второй'
</code></pre>
<p dir="auto">Строки можно даже объединять без оператора, просто расположив их одну за другой:</p>
<pre><code class="language-python">"Первый " "Второй"
# 'Первый Второй'
</code></pre>
<hr />
<h3>Размножение строк</h3>
<p dir="auto">Точно также как и с оператором <code>+</code> мы можем использовать оператор умножения <code>*</code>, попробуй ввести в интерпретатор следующий код по строчно:</p>
<pre><code class="language-python">one = "Один " * 3 + '\n'
two = "Два " * 4 + '\n'
three = "Три."

print(one + one + two, three)
</code></pre>
<p dir="auto">Напоминаю про приоритеты, что бы первым будет выполняться оператор умножения <code>*</code> так как он имеет более высокий приоритет.</p>
<hr />
<h3>Извлечение символов при помощи []</h3>
<p dir="auto">Переходим к более интересной работе со строками, для того что бы получить один символ из нашей строки необходимо указать его индекс в квадратных скобках <code>[]</code>, напомню что в языке Python есть смещение и мы начинаем с <code>[0]</code>:</p>
<pre><code class="language-python">string = "абвгд"
string[0]
# а

string[-1]
# д

string[2]
# в
</code></pre>
<p dir="auto">Стоит учесть следующее - если мы укажем индекс больше длины строки, то получим исключение:<br />
<img src="/assets/uploads/files/46/51/94/1771167693695-0677e478-1037-4e6e-a20a-bd48c458253d-image.webp" alt="0677e478-1037-4e6e-a20a-bd48c458253d-image.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">Строки являются неизменными по этому если мы попробуем по индексу задать новое значение то получим исключение:</p>
<pre><code class="language-python">name = 'Kirill'
name[0] = 'R'
</code></pre>
<p dir="auto"><img src="/assets/uploads/files/6e/06/e5/1771167852157-d43d70bd-ae42-4f9d-b1c5-835b6b81bcbe-image.webp" alt="d43d70bd-ae42-4f9d-b1c5-835b6b81bcbe-image.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">И тут на помощь приходят новые функции  <code>replace()</code> и <code>slice()</code>, про них поговорим позже. А пока взглянем на код:</p>
<pre><code class="language-python">name = 'Kirill'
name.replace('K', 'R')
# 'Ririll'

'R' + name[1:]
# Ririll
</code></pre>
<p dir="auto">Помните про неизменность? Интерпретатор не меняет значение у переменной, а лишь выводит результат замены.</p>
<hr />
<h3>Подстроки и разделение</h3>
<p dir="auto">Из строк можно извлекать подстроки, другими словами - часть строки. Такой проем очень похож на регулярные выражения, они кстати очень часто используются в JavaScript, хотя в Python они тоже есть, но работа с подстроками и разделением совершенно иная.</p>
<p dir="auto">Нам необходимо задать разделение при помощи квадратных скобок, смещения подстроки в начале и смещение в конце подстроки, а также опционально можно задать шаг между ними. В подстроках будут включены символы расположенные от точки на которую мы указываем смещение начало и до точки указываемой в конце.</p>
<p dir="auto">От теории к практике - подробнее:</p>
<ul>
<li><code>[:]</code> возвращает всю последовательность целиком (фактически срез от начала до конца)</li>
<li><code>[начало:]</code> берет элементы, начиная с позиции начало, и до самого конца</li>
<li><code>[:конец]</code> берет элементы от начала и до позиции конец - 1 (правая граница не включается)</li>
<li><code>[начало:конец]</code> извлекает фрагмент от позиции начало до позиции конец - 1 (правая граница также не включается)</li>
<li><code>[начало:конец:шаг]</code> извлекает элементы от начало до конец - 1, выбирая каждый шаг элемент (то есть берутся позиции начало, начало + шаг, начало + 2*шаг и т. д., пока не достигнем конец)</li>
</ul>
<p dir="auto">Как в предыдущих материалах я описывал смещение происходит слева на право и начинается с 0 и далее, а справа на лево -1, -2 и т.д. Если мы не укажем оператору <code>[:]</code> начало, по умолчанию будет использовать 0, а если не указать конец то будет использовать конец строки.</p>
<p dir="auto">Хватит теории, сейчас поймем все на практике, напишем простую строку:</p>
<pre><code class="language-python">text = "привет"

print(text[:])
# привет
</code></pre>
<p dir="auto">Если мы используем оператор <code>[:]</code> без аргументов, то это аналогично что начало у нас 0 и конец до конца строки.<br />
А вот таким образом мы можем получить всем символы, начиная с 2:</p>
<pre><code class="language-python">text = "привет"
print(text[2:])
ивет
</code></pre>
<p dir="auto">А теперь попробуем указать конец:</p>
<pre><code class="language-python">text = "привет"
print(text[2:5])
# иве
</code></pre>
<p dir="auto">Помните про <s>массивы</s> списки? Представьте что наше слово привет это список - <code>["п","р","и","в","е","т"]</code><br />
У каждого символа/буквы есть свой индекс - <code>п=0, р=1</code> Так Вам будем проще ориентироваться.</p>
<p dir="auto">Теперь попробуем задать начало с отрицанием:</p>
<pre><code class="language-python">text = "привет"
print(text[-2:])
# ет
</code></pre>
<p dir="auto">Поняли что произошло? Произошел реверс, то есть наше начало пошло с конца, попробуй поэтапно начиная с -1 увеличить до -6, и в конечно итоге мы выведем наше <code>привет</code>.</p>
<p dir="auto">А теперь попробуем начало задать положительным числом, а конец отрицательным:</p>
<pre><code class="language-python">text = "привет"
print(text[1:-1])
# риве
</code></pre>
<p dir="auto">Мы начали с индекса 1 и закончили индексом -1 тем самым отсекли первый и последний символ.</p>
<p dir="auto">А теперь попробуем сделать числа все отрицательными:</p>
<pre><code class="language-python">text = "привет"
print(text-2:-1])
# е
</code></pre>
<p dir="auto">Напоминаю про списки и индексы, <code>-2=е</code> а <code>-1=т</code> Мы начали наше разделение с символа <code>е</code> и закончили на символе <code>т</code> - он не включается в вывод, так как является концом.</p>
<p dir="auto">Теперь попробуем увеличить шаг:</p>
<pre><code class="language-python">text = "привет"
print(text::2])
# пие
</code></pre>
<p dir="auto">А теперь мы начали с индекса <code>0</code> он же символ <code>п</code> и продолжаем до конца строки, но в этот раз мы перепрыгиваем через один символ так как указали последним аргументом <code>2</code>.</p>
<p dir="auto">Мы также можем объединить все:</p>
<pre><code class="language-python">text = "привет"
print(text[1:6:2])
# рвт
</code></pre>
<p dir="auto">Тут мы начали с <code>1=р</code>, закончили <code>6=т</code> и сделал шаг между ними в 2.</p>
<p dir="auto">Взглянем еще на такой пример:</p>
<pre><code class="language-python">text = "привет"
print(text[1::2])
# рвт
</code></pre>
<p dir="auto">Получим тоже самое что и в предыдущем, но в чем же разница? А разница в том что мы выводим каждый 2 символ начиная с <code>1=р</code>.</p>
<p dir="auto">Мы также можем начинать с каждого второго символа, начиная с 0 до 6(конца):</p>
<pre><code class="language-python">text = "привет"
print(text[:6:2])
# пие
</code></pre>
<p dir="auto">И на этом еще не все, мы также можем поставить начало и шаг отрицательным, взглянем:</p>
<pre><code class="language-python">text = "привет"
print(text[-1::-1])
# тевирп
</code></pre>
<p dir="auto">Таким образом Python позволяет передвигаться в обратную сторону, но этот же результат мы можем получить без назначения начало -1, сделав просто шаг -1:</p>
<pre><code class="language-python">text = "привет"
print(text[::-1])
# тевирп
</code></pre>
<p dir="auto">Сам по себе оператор разделения <code>[:]</code> лоялен к различным смещениями в отличии от поиска по индексу (списки) <code>[]</code>.<br />
Если мы укажем смещение меньше чем начало строки то оно обработается как 0, а если укажем смещение больше чем конец строки то обработается как -1. Взглянем на пример:</p>
<pre><code class="language-python">text = "привет"
print(text[-7:])
# привет

print(text[:50])
# привет
</code></pre>
<h3>Измерение длины строк - функция len()</h3>
<p dir="auto"><em>Материал будет добавлен по мере написания</em></p>
]]></description><link>https://forum.exlends.ru/post/1406</link><guid isPermaLink="true">https://forum.exlends.ru/post/1406</guid><dc:creator><![CDATA[kirilljsx]]></dc:creator><pubDate>Thu, 19 Feb 2026 22:25:06 GMT</pubDate></item><item><title><![CDATA[Reply to Обучение языку программирования Python on Sun, 15 Feb 2026 11:39:01 GMT]]></title><description><![CDATA[<h2>Часть 3 - Условия</h2>
<p dir="auto">И так наконец-то мы боле менее подготовлены к следующему этапу - структурированию кода при помощи операторов - <code>if</code>, <code>elif</code>, <code>else</code>. И сразу приступим писать код, в качестве примера возьмем переменную с булевым значением. Ах да, также рекомендую начинать работать не в интерпретаторе, а через IDE и привыкать писать код в файлах. Создайте файл <code>main.py</code> и давайте напишем следующий код:</p>
<pre><code class="language-python">title = True

if title:
    print("Title is True")
else:
    print("Title is False")
</code></pre>
<p dir="auto">После того как напишите коде, сохраните файле и вызовите его через консоль - <code>python3 main.py</code><br />
Если все корректно, то увидите в консоли строку - <strong>Title is True</strong></p>
<p dir="auto"><img src="/assets/uploads/files/e1/1f/23/1771108846112-8f979e4b-d2bc-470c-8e00-37474780e4cb-image.webp" alt="8f979e4b-d2bc-470c-8e00-37474780e4cb-image.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">Теперь подробнее про операторы <code>if</code> и <code>else</code> - эти операторы проверяют является ли значение нашего выражения равным True и выводит сообщение - Title is True. А если значение ложь (False) то выведет - Title is False. Надеюсь логика понятная тут ничего сложного нету.</p>
<p dir="auto">Давайте напишем пример чуть-чуть посложнее, мы можем использовать проверку столько раз сколько захотим этого:</p>
<pre><code class="language-python">title = True
titleOne = True

if title:
    if titleOne:
        print("TitleOne is True")
    else:
        print("TitleOne is False")
else:
    if titleOne:
        print("TitleOne is True")
    else:
        print("TitleOne is False")
</code></pre>
<p dir="auto">Обратите внимание на отступы - в Python они не косметика, а синтаксис. Интерпретатор по количеству пробелов понимает, где заканчивается блок <code>if</code> и начинается вложенный.</p>
<p dir="auto"><a href="http://legacy.python.org/dev/peps/pep-0008/" target="_blank" rel="noopener noreferrer">PEP 8</a> (стандарт стиля) требует ровно 4 пробела на уровень - без табов. В примере:</p>
<ul>
<li>Первый <code>if title</code>: проверяет <code>title (True)</code>, входит в блок.</li>
<li>Python видит следующие строки с +4 пробела - они “прикреплены” к этому <code>if</code>.</li>
<li>Вложенный <code>if titleOne</code>: имеет +8 пробелов от начала - его пара <code>else</code> на том же уровне.</li>
</ul>
<p dir="auto">Без отступов мы получим ошибку - <code>IndentationError</code>. Это делает код читаемым и строгим.</p>
<p dir="auto">Идем дальше и разберем пример еще сложнее, и так нам нужно проверить больше двух вариантов. Мы будем использовать операторы в определенной последовательности - <code>if</code> для первого варианта, <code>elif</code> (он же <code>else if</code> - иначе если) для промежуточных вариантов и <code>else</code> для последнего:</p>
<pre><code class="language-python">color = "blue"

if color == "red":
    print("The color is red.")
elif color == "green":
    print("The color is green.")
elif color == "purple":
    print("The color is purple.")
else:
    print("The color is not red, green, or purple.")
</code></pre>
<p dir="auto">Важный момент: ни один <code>if/elif</code> не сработал (<code>color ≠ red/green/purple</code>), поэтому выполняется финальный <code>else</code> - выводит “The color is not…”. Штатная логика: <code>else</code> ловит все неподходящие случаи. Без <code>else</code> код просто завершится молча.</p>
<p dir="auto">Обратим внимание на оператор <code>==</code> который проверяет равенство, по мимо него есть и другие:</p>
<ul>
<li>равенство (==)</li>
<li>неравенство (!=)</li>
<li>меньше (&lt;)</li>
<li>меньше или равно (&lt;=)</li>
<li>больше (&gt;)</li>
<li>больше или равно (&gt;=)</li>
</ul>
<p dir="auto">Эти операторы возвращают булевы значение - True или False.<br />
Давайте посмотрим на то как они работают:</p>
<pre><code class="language-python">x = 10

x == 10
# True

x == 5
# False
</code></pre>
<p dir="auto">Для одновременного нескольких сравнений существуют дополнительные булевы операторы - and, or и not, они используются для определения итогового результата.</p>
<blockquote>
<p dir="auto">Подмечу: булевы операторы имеют более низкий приоритет в сравнении с операторами сравнивания.</p>
</blockquote>
<p dir="auto">Взглянем на пример:</p>
<pre><code class="language-python">x = 7
5 &lt; x and x &lt; 10
# True
</code></pre>
<p dir="auto">В данном примере мы установили значение переменной <code>x</code> равным <code>7</code>, проверка <code>5 &lt; x</code> вернет <code>True</code>, проверка <code>x &lt; 10</code> также вернет <code>True</code>, тем самым мы получим выражение <code>True and True</code></p>
<p dir="auto">Помните про круглые скобки из Части 2? Что бы избежать путаницы мы можем применить их:</p>
<pre><code class="language-python">(5 &lt; x) and (x &lt; 10)
# True
</code></pre>
<p dir="auto">Рассмотрим и другие примеры:</p>
<pre><code class="language-python">5 &lt; x or x &lt; 10
# True

5 &lt; x and x &gt; 10
# False

5 &lt; x and not x &gt; 10
# True
</code></pre>
<p dir="auto">Python по мимо проверки оператора <code>and</code>, также позволяет следующее:</p>
<pre><code class="language-python">5 &lt; x &lt; 10
# True
</code></pre>
<p dir="auto">Это выражение аналогично этому - <code>5 &lt; x and x &lt; 10</code>, мы также можем писать более длинные сравнения:</p>
<pre><code class="language-python">5 &lt; x &lt; 10 &lt; 999
</code></pre>
<hr />
<h3>Истина</h3>
<p dir="auto">Элементы, которые мы проверяем в условиях, то есть то, что может быть<code> False</code>, не всегда им является. К <code>False</code> в булевом контексте приравниваются следующие значения:</p>
<ul>
<li>булево значение <code>False</code>;</li>
<li>​значение <code>None</code>;<br />
​- целое число <code>0</code>;<br />
​- число с плавающей точкой <code>0.0</code>;<br />
​- пустая строка <code>'</code>';<br />
​- пустой список <code>[]</code>;</li>
<li>пустой кортеж <code>()</code>;<br />
​- пустой словарь <code>{}</code>;<br />
​- пустое множество <code>set()</code>;</li>
</ul>
<p dir="auto">Все остальные значения приравниваются к <code>True</code>. Язык Python использует эти правила, чтобы определять ложность или истинность объектов и, в частности, выполнять проверки на пустоту коллекций. Посмотрим на пример:</p>
<pre><code class="language-python">items = []

if items:
    print('Лист не пустой!')
else:
    print('Лист пуст!')
</code></pre>
<p dir="auto">В этом коде пустой список <code>items</code> интерпретируется как <code>False</code>, поэтому срабатывает ветка else и выводится сообщение о том, что список пуст.</p>
<hr />
<h3>Оператор in - несколько сравнений</h3>
<p dir="auto">Предположим, у нас есть буква, и нам нужно определить, является ли она гласной. Одним из решений будет длинное утверждение через <code>if</code>:</p>
<pre><code class="language-python">letter = 'о'
if (letter == 'а' or letter == 'е' or letter == 'ё' or letter == 'и' or 
    letter == 'о' or letter == 'у' or letter == 'ы' or letter == 'э' or 
    letter == 'ю' or letter == 'я'):
    print(letter, '- гласная')
else:
    print(letter, '- согласная')
</code></pre>
<p dir="auto">В каждом случае, когда нужно выполнить множество аналогичных сравнений, разделённых <code>or</code>, лучше применять оператор членства <code>in</code>. Рассмотрим более <strong>питонический</strong> способ проверки, является ли буква гласной, с помощью строки:</p>
<pre><code class="language-python">vowels = 'аеёиоуыэюя'
letter = 'о'

print(letter in vowels)  # True

if letter in vowels:
    print(letter, '- гласная')
</code></pre>
<p dir="auto">Дополнительно рассмотрим примеры использования <code>in</code> с другими типами данных:</p>
<pre><code class="language-python">letter = 'о'
vowel_set = {'а', 'е', 'ё', 'и', 'о', 'у', 'ы', 'э', 'ю', 'я'}
print(letter in vowel_set)  # True

vowel_list = ['а', 'е', 'ё', 'и', 'о', 'у', 'ы', 'э', 'ю', 'я']
print(letter in vowel_list)  # True

vowel_tuple = ('а', 'е', 'ё', 'и', 'о', 'у', 'ы', 'э', 'ю', 'я')
print(letter in vowel_tuple)  # True

vowel_dict = {'а': 'яблоко', 'е': 'слон', 'и': 'импала', 'о': 'оцелот', 'у': 'единорог'}
print(letter in vowel_dict)  # True (проверяет ключи)

vowel_string = 'аеёиоуыэюя'
print(letter in vowel_string)  # True
</code></pre>
<blockquote>
<p dir="auto">В случае со словарем оператор <code>in</code> проверяет только ключи (слева от двоеточия)</p>
</blockquote>
<hr />
<h3>Оператор-морж</h3>
<p dir="auto">С версии Python 3.8 (кстати, я не застал ранние версии, так что морж для меня по умолчанию - часть синтаксиса) выглядит так:<br />
<code>имя := выражение</code></p>
<p dir="auto">Для присваивания с проверкой обычно нужно два шага:</p>
<pre><code class="language-python">text_limit = 280
text_string = "Куку" * 50

diff = text_limit - len(text_string)

if diff &gt;= 0:
    print('В пределах нормы')
else:
    print('К сожалению очень много символов', abs(diff))
</code></pre>
<blockquote>
<p dir="auto">Для тех, кто в танке и не поймет с первого раза, почему нет явной проверки на лимит символов: в <code>diff</code> мы задаем <code>280 - len(text_string)</code>. Если в <code>text_string 320</code> символов, то <code>280 - 320 = -40</code>. Условие <code>if diff &gt;= 0</code> не сработает, выполнится else.</p>
</blockquote>
<p dir="auto">Вернемся к оператору-моржу, с его помощью мы можем два шага объединить в один:</p>
<pre><code class="language-python">text_limit = 280
text_string = "Куку" * 50

if diff := text_limit - len(text_string) &gt;= 0:
    print("В пределах нормы")
else:
    print("К сожалению очень много символов", abs(diff)
</code></pre>
<p dir="auto">Оператор морж <code>:=</code> присваивает значение переменной <code>diff</code> и сразу проверяет условие в <code>if</code>. По сути тоже самое что и отдельно присвоить переменной <code>diff</code> значения, только внутри <code>if</code>. По мимо <code>if</code> оператор-морж также используется в циклах <code>for</code> и <code>while</code> о них мы поговорим чуть позднее.</p>
]]></description><link>https://forum.exlends.ru/post/1403</link><guid isPermaLink="true">https://forum.exlends.ru/post/1403</guid><dc:creator><![CDATA[kirilljsx]]></dc:creator><pubDate>Sun, 15 Feb 2026 11:39:01 GMT</pubDate></item><item><title><![CDATA[Reply to Обучение языку программирования Python on Sat, 14 Feb 2026 22:15:15 GMT]]></title><description><![CDATA[<h2>Часть 2 - Числа</h2>
<p dir="auto">В этой части материала мы познакомимся более подробно с типизацией Python, а именно:</p>
<ul>
<li>булевые значения - true/false</li>
<li>целы числа - int</li>
<li>числа с плавающей точкой - float</li>
</ul>
<h3>Булевы значения</h3>
<p dir="auto">Одним из самых главных типов являются булевы значения и Python не исключения. Булевы имеются всего два - true и false.<br />
В Python есть даже специальная функция <code>bool()</code> которая умеет преобразовывать любой другой тип в булев.</p>
<p dir="auto">Функции мы рассмотрим гораздо позже, а пока нам нужно знать только то что каждая функция имеет имя и аргументы. Наша функция <code>bool()</code> может принимать в качестве аргумента любое значение и возвращать его эквивалент.</p>
<p dir="auto">Давайте рассмотрим на примере для ненулевых числе:</p>
<pre><code class="language-python">bool(True)
# True
bool(1)
# True
bool(35)
# True
bool(-45)
# True
</code></pre>
<p dir="auto">Во всех этих примерах функция <code>bool()</code> вернет нам значение <code>True</code> даже для отрицательных чисел.</p>
<p dir="auto">А вот с нулевыми значениями дела обстоят иначе:</p>
<pre><code class="language-python">bool(False)
# False
bool(0)
# False
bool(0.0)
# False
</code></pre>
<p dir="auto">Чем конкретно полезные булевы мы узнаем чуть позже и чем они полезны, при каких обстоятельствах списки, словари и другие типы данных могут преобразовываться как в <code>True</code> так и в <code>False</code>.</p>
<hr />
<h3>Про числа литералы</h3>
<p dir="auto">Любая последовательность чисел в Python будет число-литерал, для примера:</p>
<pre><code class="language-python">5
# 5
0
# 0
</code></pre>
<p dir="auto">Обратите внимание что таже 0 будет числом литералом, но не стоит ставить его перед другими цифрами иначе мы получим синтаксическую ошибку:</p>
<pre><code class="language-python">05
# File "&lt;stdin&gt;", line 1
# SyntaxError: invalid token
</code></pre>
<p dir="auto">Также отмечу что любая последовательность цифр будет указывать на целое число и даже если мы поместим знак + перед цифрами то число останется прежним:</p>
<pre><code class="language-python">123
# 123
+123
# 123
</code></pre>
<p dir="auto">А вот что бы указать отрицательное число, необходимо всего лишь поместить перед цифрами знак - :</p>
<pre><code class="language-python">-123
# -123
</code></pre>
<p dir="auto">Также есть ограничения на запятые, нельзя их использовать при записи целого числа:</p>
<pre><code class="language-python">1,000,000
# (1, 0, 0)
</code></pre>
<p dir="auto">Вместо числа миллион мы получит кортеж с тремя значениями - про кортежи мы поговорим позже.<br />
Но если нам необходимо разделить наш миллион для лучше читаемости то мы можем воспользовать нижним подчеркиванием:</p>
<pre><code class="language-python">million = 1_000_000
million
# 1000000
</code></pre>
<p dir="auto">Нижние подчеркивания просто игнорируются, а мы можем ставить их на любую позицию по желани:</p>
<pre><code class="language-python">1_2_3
# 123
</code></pre>
<hr />
<h3>Операции с целыми числами</h3>
<p dir="auto">Почти как и любой другой язык - Python можно использовать как калькулятор, далее мы выполним простые арифметические операции, используя математические <em>операторы</em>:</p>
<ul>
<li>
<ul>
<li>сложение</li>
</ul>
</li>
<li>
<ul>
<li>вычитание</li>
</ul>
</li>
<li>
<ul>
<li>умножение</li>
</ul>
</li>
<li>/ Деление с плавающей точкой</li>
<li>// Целочисленное деление</li>
<li>% Вычисление остатка</li>
<li>** Возведение в степень</li>
</ul>
<p dir="auto">Сложения и вычитания работают так как мы этого и ожидаем:</p>
<pre><code class="language-python">5 + 10
10

1000 - 7
993

5 - 10
-5
</code></pre>
<p dir="auto">Мы можем работать абсолютно с любым количеством чисел и операторов:</p>
<pre><code class="language-python">10 + 10 - 5
15

5 + 10 - 10 + 15
20
</code></pre>
<p dir="auto">Также обратим внимание что пробелы не обязательны между числами и операторами, но лучше придерживаться единого стиля:</p>
<pre><code class="language-python">10+5       + 5
20
</code></pre>
<p dir="auto">Умножение также работаем как мы этого ожидаем:</p>
<pre><code class="language-python">5 * 2
10

5 * 3
15

5 * 4
20
</code></pre>
<p dir="auto">А теперь к самому интересному, в Python есть два вида деления:</p>
<ol>
<li>При помощи оператора <code>/</code> выполняются деления с плавающей точкой</li>
<li>С помощью оператора <code>//</code> выполняются целочисленные деления (деления с остатком)</li>
</ol>
<p dir="auto">И даже если мы будем делить целые числа друг на друга, оператор <code>/</code> даст результат с плавающей точкой, попробуй:</p>
<pre><code class="language-python">9 / 4
2.25
</code></pre>
<p dir="auto">А вот если мы используем оператор <code>//</code> для целочисленного деления то в результате увидим целочисленное числа, так как оператор отбросит отстаток:</p>
<pre><code class="language-python">9 // 4
2
</code></pre>
<hr />
<h3>Целые числа и переменные</h3>
<p dir="auto">В предыдущих примерах мы использовали целочисленные значения, но их также можно смешивать с переменными, рассмотрим пример:</p>
<pre><code class="language-python">x = 100
x
# 100

x - 5
# 95
</code></pre>
<p dir="auto">Ранее в 1-й части мы говорили про переменные, <code>x</code> - это имя которое указывает на целочисленный объект, в нашем случае это 100. Но когда мы выполняем операцию <code>x - 5</code>, то мы не присваиваем новое значение для переменной <code>x</code>, и ее значение остается неизменным.</p>
<pre><code class="language-python">x
# 100
</code></pre>
<p dir="auto">А вот если мы в действительности хотим изменить значение нашей переменной <code>x</code>, необходимо сделать следующее:</p>
<pre><code class="language-python">x = x - 5
x
# 95
</code></pre>
<p dir="auto">С точки зрения математики такая операция не совсем является корректной, но именно таким образом мы выполним повторное присвоение нового значения нашей переменной <code>x</code>. Также важно понимать про очередность выполнения, выражения стоящие справа после знака <code>=</code> первым делом вычисляются и только потом присваиваются переменной.</p>
<p dir="auto">Лучше и конечно же проще выстраивать логику таким образом:</p>
<ul>
<li>Вычитаем <code>5</code> из <code>x</code></li>
<li>Присваиваем результат временной переменной</li>
<li>Присваиваем <code>x</code> значение временной переменной</li>
</ul>
<p dir="auto">Вот как это можно описать в коде:</p>
<pre><code class="language-python">x = 100
y = x - 5
x = y
</code></pre>
<p dir="auto">Но первый вариант все же будет короче, а второй нагляднее.</p>
<p dir="auto">Также можно использовать оператор совместно с присваиванием, а выглядит это следующим образом:</p>
<pre><code class="language-python">x -= 5
# Такое выражение аналогично - x = x - 3
</code></pre>
<p dir="auto">Аналогично будет и с оператором <code>+</code>:</p>
<pre><code class="language-python">x += 5
x
# 105
</code></pre>
<p dir="auto">И с оператором умножения <code>*</code>:</p>
<pre><code class="language-python">x *= 2
x
# 200
</code></pre>
<p dir="auto">А вот пример с оператором деления <code>/</code>:</p>
<pre><code class="language-python">x /= 3
x
# 33.333333333333336
</code></pre>
<p dir="auto">И наконец попробуем целочисленное деление <code>//</code>:</p>
<pre><code class="language-python">x //= 3
x
# 33
</code></pre>
<p dir="auto">Теперь поговори об операторе - <code>%</code>  он же вычисляет остаток от деления первого числа:</p>
<pre><code class="language-python">10 % 4
# 2
</code></pre>
<p dir="auto">Есть одна интересная встроенная функция - <code>divmod(a,b)</code> он умеет определять не только остаток, но и частное:</p>
<pre><code class="language-python">divmode(10,4)
# (2,2)
</code></pre>
<p dir="auto">Достаточно удобная функция, так как она заменяет операции по отдельности:</p>
<pre><code class="language-python">10 // 4
# 2

10 % 4
# 2
</code></pre>
<p dir="auto">Между делом - функция которую мы увидели <code>divmod()</code> она получает два аргумента, а возвращает <em>кортеж</em>. Но о кортежах мы будем говорить гораздо дальше, а пока просто имейте ввиду что есть такая функция.</p>
<p dir="auto">Последняя математическая функция которую мы рассмотрим позволяет работать как с целыми числами, так и с плавающей точкой и называется это - возведением в степень или оператор <code>**</code>:</p>
<pre><code class="language-python">2 ** 5
# 32

2.0 ** 5
# 32.0

2 ** 5.0
# 32.0
</code></pre>
<hr />
<h3>Приоритет операций</h3>
<p dir="auto">Теперь рассмотрим с вами приоритетность операций, давайте попробуем вывести следующее выражение:</p>
<pre><code class="language-python">2 + 2 * 4
# 10
</code></pre>
<p dir="auto">Если мы выполним сложение первым то получим следующее: 2+2=4, а 4<em>4=16, но если мы выполним умножение первым: 2</em>4=8 и 2+8=10. В языке Python как и почти во всех умножение имеет высокий приоритет в отличии от сложения.</p>
<p dir="auto">Также для лучшей читаемости можно использовать скобки что бы явно знать приоритет:</p>
<pre><code class="language-python">2 + (2 * 4)
</code></pre>
<p dir="auto">А вот еще пример с возведениями в степень:</p>
<pre><code class="language-python">-4 ** 2
# -16
</code></pre>
<p dir="auto">Его можно записать так:</p>
<pre><code class="language-python">- (4 ** 2)
# -16
</code></pre>
<p dir="auto">Так как в большинстве код будите читать не только Вы, скобки помогут сделать его более понятным и предсказуемым:</p>
<pre><code class="language-python">(-4) ** 2
# 16
</code></pre>
<p dir="auto">Тем самым мы обеспечим читаемость нашего кода для других разработчиков.</p>
<hr />
<h3>Системы счисления</h3>
<p dir="auto">Скорее всего, другие системы счисления вам не пригодятся, но упомянуть их все равно полезно. В жизни и в коде мы привыкли к десятичной - вот она и в Python на первом месте.</p>
<p dir="auto">Десятичная похожа на двоичную, но с нюансами. В двоичной 1 + 1 даст ответ 10, потому что это одна “единица двойки” плюс ноль единиц.</p>
<p dir="auto">В Python поддерживаются ещё три варианта - с префиксами:</p>
<ul>
<li><code>0b</code> или <code>0B</code> - двоичная</li>
<li><code>0o</code> или <code>0O</code> - восьмеричная</li>
<li><code>0x</code> или <code>0X</code> - шестнадцатеричная</li>
</ul>
<p dir="auto">Они основаны на степенях двойки, и иногда это выручает, хотя, как я говорил, вряд ли пригодится на практике.</p>
<p dir="auto">Интерпретатор покажет их в десятичном виде. Давай проверим на примерах:</p>
<pre><code class="language-python">10
# 10 (десятичное)
</code></pre>
<p dir="auto">Двоичное:</p>
<pre><code class="language-python">0b10
# 2
</code></pre>
<p dir="auto">Восьмеричное:</p>
<pre><code class="language-python">0o10
# 8
</code></pre>
<p dir="auto">Шестнадцатеричное:</p>
<pre><code class="language-python">0x10
# 16
</code></pre>
<p dir="auto">Также существует обратная конверсия - из числа в строку нужной системы:</p>
<pre><code class="language-python">val = 65
bin(val)
'0b1000001'
oct(val)
'0o101'
hex(val)
'0x41'
</code></pre>
<p dir="auto">Плюс <code>chr()</code> - число в символ:</p>
<pre><code class="language-python">chr(65)
'A'
</code></pre>
<p dir="auto">И <code>ord()</code> - наоборот:</p>
<pre><code class="language-python">ord('A')
# 65
</code></pre>
<hr />
<h3>Преобразование типов</h3>
<p dir="auto">Нередко будут встречаться задачи по преобразованию типов и работы логики программ, а в этом нам поможет функция <code>int()</code>. Внутренняя функция <code>int()</code> может принимать в качестве аргумента одно значение и также возвращает одно значение, но уже с преобразованным в целом число эквивалентно входному аргументу.</p>
<p dir="auto">Давай рассмотрим пример на булев, наверное вы уже догадываетесь что True = 1, а False = 0. Давайте убедимся в этом:</p>
<pre><code class="language-python">int(True)
# 1
int(False)
# 0
</code></pre>
<p dir="auto">Аналогично <code>int()</code> есть функция <code>bool()</code> которая возвращает булев эквивалент целого числа:</p>
<pre><code class="language-python">bool(1)
# True
bool(0)
# False
</code></pre>
<p dir="auto">Рассмотрим пример с плавающими точками, функция <code>int()</code> просто отсекает все что находится после точки:</p>
<pre><code class="language-python">int(98.6)
# 98
int(1.0e4)
# 10000
</code></pre>
<p dir="auto">И точно также, но наоборот если преобразовывать числа с плавающей точкой в булево:</p>
<pre><code class="language-python">bool(1.0)
# True
bool(0.0)
# False
</code></pre>
<p dir="auto">А вот так выглядит преобразование строк в целочисленные числа:</p>
<pre><code class="language-python">int('99')
# 99
int('-23')
# -23
int('+12')
# 12
int('1_000_000')
# 1000000
</code></pre>
<p dir="auto">Мы также можем преобразовывать числа в другие системы счисления:</p>
<pre><code class="language-python">int('10', 2) # двоичная
# 2
int('10', 8) # восьмеричная
# 8
int('10', 16) # шестнадцатеричная
# 16
</code></pre>
<p dir="auto">Также можно попробовать преобразовать целое числа в целое число, но это ничего не даст, но также и и не навредит:</p>
<pre><code class="language-python">int(123)
# 123
</code></pre>
<p dir="auto">Если мы попробуем преобразовать что-то не совсем похожее на числа, то всего скорее увидим ошибку:</p>
<pre><code class="language-python">int('hello!')
</code></pre>
<p dir="auto"><img src="/assets/uploads/files/3e/3b/f8/1771106218903-a6dfc624-b1bf-4cb5-8b08-25abe5d6f76e-image.webp" alt="a6dfc624-b1bf-4cb5-8b08-25abe5d6f76e-image.png" class=" img-fluid img-markdown" /></p>
<blockquote>
<p dir="auto">Правило функции <code>int()</code>- int не будет преобразовывать строки в числа.</p>
</blockquote>
<h4>Преобразования числе с плавающей точкой</h4>
<p dir="auto">Как и с функций <code>int()</code> ей есть аналог для числе с плавающей точкой и называется она точно также как и тип - <code>float()</code>, разу же рассмотрим пример:</p>
<pre><code class="language-python">float(True)
# 1.0
float(False)
# 0.0
</code></pre>
<p dir="auto">Преобразование целых числе типа int, через float добавится просто десятичная точка:</p>
<pre><code class="language-python">float(20)
# 20.0
float(33)
# 33.0
</code></pre>
<p dir="auto">Аналогично можно конвертировать и строки:</p>
<pre><code class="language-python">float('1.1')
# 1.1
float('-2.4')
# -2.4
</code></pre>
<p dir="auto">И на последок - язык Python поддерживает многие математические функции, таких как косинусы, квадратные корни и многое другое. Их мы будем разбирать отдельно в будущих частях обучения, а также затронем такие библиотеки как <code>math</code> и <code>cmath</code>.</p>
]]></description><link>https://forum.exlends.ru/post/1402</link><guid isPermaLink="true">https://forum.exlends.ru/post/1402</guid><dc:creator><![CDATA[kirilljsx]]></dc:creator><pubDate>Sat, 14 Feb 2026 22:15:15 GMT</pubDate></item><item><title><![CDATA[Reply to Обучение языку программирования Python on Sat, 14 Feb 2026 10:40:05 GMT]]></title><description><![CDATA[<h2>Часть 1 - Типы, значения и переменные</h2>
<p dir="auto">Эта часть будет довольно теоретическая, но ее следует прочитать внимательно и вникнуть.</p>
<p dir="auto">В Python данные являются объектами, память любого компьютера можно визуально представить в виде длинного ряда полок. Каждый слот имеет ширину в 1 байт (8 бит), если не знакомы с базовой информатикой не забивайте голову.</p>
<p dir="auto">Каждый слот пронумерован, но начинается с 0 и до самого конца. Современные ПК имеют миллиарды байтов памяти или как мы привыкли их называть гигабайтами.</p>
<p dir="auto">Программы написанные на Python имеет доступ к определенной области памяти нашего компьютера при помощи операционной системы. Эта область памяти хранит как код приложения, так и рабочие данные, которые оно обрабатывает. Операционная система гарантирует, что без соответствующих прав программа не получит доступ к другим участкам памяти.</p>
<p dir="auto">Программа хранит информацию о том, где в памяти расположены её данные и какого они типа. С точки зрения самих ПК все биты одинаковые.</p>
<p dir="auto">В Python каждый тип данных представлен собственным объектом в памяти: <code>bool</code>, <code>int</code>, <code>str</code>, <code>float</code>, а также функции и другие сущности.</p>
<p dir="auto">А теперь коротко про каждый из типов:</p>
<ul>
<li>
<p dir="auto"><strong>bool</strong> - логический тип: хранит только два значения <code>True</code> и <code>False</code> (удобен для условий и флагов).</p>
</li>
<li>
<p dir="auto"><strong>int</strong> - целые числа без дробной части; поддерживает числа произвольной длины и обычные операции (<code>+</code>, <code>-</code>, <code>*</code>, <code>//</code>, <code>%</code>).</p>
</li>
<li>
<p dir="auto"><strong>float</strong> - числа с плавающей точкой (дробные); это приближённые значения, поэтому возможны эффекты округления в вычислениях.</p>
</li>
<li>
<p dir="auto"><strong>complex</strong> - комплексные числа вида a+bja+bj (в Python мнимая единица - <code>j</code>); применяются в математике/сигналах и т.п.</p>
</li>
<li>
<p dir="auto"><strong>str</strong> - строка (текст), последовательность символов; неизменяемая, поэтому любые “правки” создают новую строку.</p>
</li>
<li>
<p dir="auto"><strong>list</strong> - список, упорядоченная изменяемая коллекция; можно добавлять/удалять элементы и менять по индексу.</p>
</li>
<li>
<p dir="auto"><strong>tuple</strong> - кортеж, упорядоченная неизменяемая коллекция; часто используют для “записей” (наборов значений) и как ключи словаря (если элементы тоже неизменяемые).</p>
</li>
<li>
<p dir="auto"><strong>bytes</strong> - неизменяемая последовательность байтов (0–255); удобно для бинарных данных (файлы, сети, хэши).</p>
</li>
<li>
<p dir="auto"><strong>bytearray</strong> - изменяемая версия <code>bytes</code>; удобно, когда нужно редактировать бинарные данные “на месте”.</p>
</li>
<li>
<p dir="auto"><strong>set</strong> - множество: неупорядоченная коллекция уникальных элементов; быстро проверять “есть ли элемент” и делать операции множеств (объединение/пересечение).</p>
</li>
<li>
<p dir="auto"><strong>frozenset</strong> - неизменяемое множество; можно использовать там, где требуется хэшируемость (например, как ключ словаря).</p>
</li>
<li>
<p dir="auto"><strong>dict</strong> - словарь “ключ → значение”; основная структура для отображений, конфигов, JSON-подобных данных и быстрого доступа по ключу.</p>
</li>
</ul>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Наименование</th>
<th>Тип</th>
<th>Изменяемый</th>
<th>Примеры</th>
</tr>
</thead>
<tbody>
<tr>
<td>Булево значение</td>
<td>bool</td>
<td>Нет</td>
<td>True, False</td>
</tr>
<tr>
<td>Целое число</td>
<td>int</td>
<td>Нет</td>
<td>47, 25000, 25_000</td>
</tr>
<tr>
<td>Число с плавающей точкой</td>
<td>float</td>
<td>Нет</td>
<td>3.14, 2.7e5</td>
</tr>
<tr>
<td>Комплексное число</td>
<td>complex</td>
<td>Нет</td>
<td>3j, 5 + 9j</td>
</tr>
<tr>
<td>Текстовая строка</td>
<td>str</td>
<td>Нет</td>
<td>‘alas’, “alack”, “‘a verse attack’”</td>
</tr>
<tr>
<td>Список</td>
<td>list</td>
<td>Да</td>
<td>[‘Winken’, ‘Blinken’, ‘Nod’]</td>
</tr>
<tr>
<td>Кортеж</td>
<td>tuple</td>
<td>Нет</td>
<td>(2, 4, 8 )</td>
</tr>
<tr>
<td>Байты</td>
<td>bytes</td>
<td>Нет</td>
<td>b’ab\xff’</td>
</tr>
<tr>
<td>Массив байтов</td>
<td>bytearray</td>
<td>Да</td>
<td>bytearray(…)</td>
</tr>
<tr>
<td>Множество</td>
<td>set</td>
<td>Да</td>
<td>set()</td>
</tr>
<tr>
<td>Фиксированное множество</td>
<td>frozenset</td>
<td>Нет</td>
<td>frozenset([‘Elsa’, ‘Otto’])</td>
</tr>
<tr>
<td>Словарь</td>
<td>dict</td>
<td>Да</td>
<td>{‘game’: ‘bingo’, ‘dog’: ‘dingo’, ‘drummer’: ‘Ringo’}</td>
</tr>
</tbody>
</table>
<hr />
<h2>Переменные</h2>
<p dir="auto">Как и во всех других языках программирования у Python есть переменные, это имена для значений в памяти нашего компьютера который в последствии будет использоваться в программе.</p>
<p dir="auto">Но у Python имеются свои правила написания переменных и могут содержать только следующие символы:</p>
<ul>
<li>буквы в нижнем регистре от a до z</li>
<li>буквы в верхнем регистре от A до Z</li>
<li>цифры от 0 до 9</li>
<li>нижнее подчеркивание (_)</li>
<li>чувствительность к регистру: name, Name, NAME - будут разными именами</li>
<li>начинаются с буквы или нижнего подчеркивания, но не с цифры</li>
<li>имена не должны совпадать с зарезервированными словами самого Python</li>
</ul>
<p dir="auto">Ниже список зарезервированных слов:</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Группа 1</th>
<th>Группа 2</th>
<th>Группа 3</th>
<th>Группа 4</th>
<th>Группа 5</th>
</tr>
</thead>
<tbody>
<tr>
<td>False</td>
<td>await</td>
<td>else</td>
<td>import</td>
<td>pass</td>
</tr>
<tr>
<td>None</td>
<td>break</td>
<td>except</td>
<td>in</td>
<td>raise</td>
</tr>
<tr>
<td>True</td>
<td>class</td>
<td>finally</td>
<td>is</td>
<td>return</td>
</tr>
<tr>
<td>and</td>
<td>continue</td>
<td>for</td>
<td>lambda</td>
<td>try</td>
</tr>
<tr>
<td>as</td>
<td>def</td>
<td>from</td>
<td>nonlocal</td>
<td>while</td>
</tr>
<tr>
<td>assert</td>
<td>del</td>
<td>global</td>
<td>not</td>
<td>with</td>
</tr>
<tr>
<td>async</td>
<td>elif</td>
<td>if</td>
<td>or</td>
<td>yield</td>
</tr>
</tbody>
</table>
<p dir="auto">На заметку: что бы увидеть список этих слов, внутри интерпретатора введите команду <code>help("keywords")</code> или <code>import keywords</code></p>
<p dir="auto">Теперь поговорим о присваивание, как и во многих других языка Python использует символ равно <code>=</code> для присваивания значения переменных.</p>
<p dir="auto">Присваивание очень похожи на алгебру из школьной программы, пример уравнения:</p>
<pre><code class="language-python">x = y + 10
</code></pre>
<p dir="auto">Решить уравнение можно подставив какое либо значение для <code>y</code>, к примеру подставим число 5:</p>
<pre><code class="language-python">y = 5
x = y + 10
y
15
</code></pre>
<p dir="auto">Также отмечу что строки программы означают нечто большее чем в уравнениях. <code>x</code> и <code>y</code> являются переменными. К тому же Python знает что последовательность цифр имеет типизацию Number или по другому числовой литерал.</p>
<hr />
<h2>Переменные - это имена, а не ячейки памяти</h2>
<p dir="auto">Одна важная отличительная особенность Python от других языков, что операция присваивания <code>=</code> не копирует значение, а лишь прикрепляет имя к объекту. Такой подход экономит время, но у него есть свои недостатки. Для сравнения с языком C, у Python скорость работы ниже, так как под капотом он заставляет компьютер выполнять больше работы для того что бы нам не пришлось выполнять ее самостоятельно.</p>
<p dir="auto">Пример:</p>
<pre><code class="language-python">a = 7
print(a)
7

b = a
print(b)
</code></pre>
<p dir="auto">В первом примере с <code>a</code> имена указывают на объекты, переменная указывает на целочисленный объект со значением.<br />
В примере с <code>b</code> происходит копирование имени, теперь переменная <code>b</code> указывает на тот же целочисленный объект.</p>
<p dir="auto">Для проверки типов у Python есть внутренняя функция <code>type()</code>:</p>
<pre><code class="language-python">type(7)
&lt;class int&gt;
</code></pre>
<p dir="auto">А для проверки указывает ли переменная на объект определенного типа используется конструкция <code>isinstance(type)</code> которая принимает два аргумента:</p>
<pre><code class="language-python">isinstance(7, int)
True
</code></pre>
<blockquote>
<p dir="auto">Вы наверное заметили ключевое слово <code>class</code> - это определение объекта, их мы гораздо рассмотрим позже.</p>
</blockquote>
<h3>Особенности переменных</h3>
<p dir="auto">Далее я перечислю еще несколько особенностей Python с переменными.<br />
Оператор присваивания <code>=</code> можно использовать для назначения значения сразу нескольким переменным следующим образом:</p>
<pre><code class="language-python">two = qwe = zxc = 2
</code></pre>
<p dir="auto">Еще одной из особенностью является копирование, если мы присвоим существующей переменной <code>a</code> новой переменной <code>b</code> то питон будет указывать на тот же объект что и <code>a</code><br />
Для наглядного примера взглянем на следующий код:</p>
<pre><code class="language-python">a = 5
b = a
</code></pre>
<p dir="auto">И если мы попробуем вывести переменную <code>b</code> то получим в ответ 5.</p>
<p dir="auto">А теперь давайте сделаем ситуацию чуть запутаннее:</p>
<pre><code class="language-python">a = 5
b = a

a = 10
a
# 10

b
# 5
</code></pre>
<p dir="auto">Давайте разберемся что выведет наш код, при выполнении <code>a = 5</code> создается объект со значением 5, и имя <code>a</code> начинает ссылаться на него. Затем строка <code>b = a</code> делает то же самое - теперь и <code>a</code>, и <code>b</code> указывают на один и тот же объект 5.<br />
Когда мы выполняем <code>a = 10</code>, имя <code>a</code> просто переназначается и начинает ссылаться на другой объект - число 10.<br />
Переменная <code>b</code> при этом остается связанной с прежним объектом 5, поэтому вывод <code>b</code> даст 5, а <code>a - 10</code>.</p>
<p dir="auto">Таким образом переменные - это не изменяемый тип.</p>
<p dir="auto">А теперь рассмотрим списки, или по другому изменяемый массив значений. В качестве примера у нас будет <code>a</code> и <code>b</code> которые будут указывать на список с 3 числами:</p>
<pre><code class="language-python">a = [2, 4, 6]
b = a
a
# [2, 4, 6]

b
# [2, 4, 6]
</code></pre>
<p dir="auto">Элементы списка/массива <code>a[0], a[1], a[2]</code> сами по себе являются именами которые в свою очередь указывают на числа со значениями 2, 4 и 6. Подмечу что список хранит данные в заданном порядке.</p>
<p dir="auto">А теперь давайте попробуем изменить первый элемент списка при помощи имени <code>a</code> и посмотрим что выведет список <code>b</code>:</p>
<pre><code class="language-python">a[0] = 10
a
# [10, 4, 6]
b
# [99, 4, 6]
</code></pre>
<p dir="auto">Теперь первый элемент списка изменился и больше не указывает на объект со значением 2. Сам по себе список имеет тип <code>list</code>, но значения, порядок и элементы можно изменить. Про списки и массивы данных мы будем говорить в следующих темах.</p>
<h3>Правила написание имени переменных</h3>
<p dir="auto">В примерах выше мы использовали простые имена переменных по типу <code>a</code>, <code>b</code> или <code>x</code> и <code>y</code>. Однако в реальных программах стоит выбирать более информативные и понятные названия - это значительно упрощает чтение, понимание и поддержку кода.</p>
]]></description><link>https://forum.exlends.ru/post/1401</link><guid isPermaLink="true">https://forum.exlends.ru/post/1401</guid><dc:creator><![CDATA[kirilljsx]]></dc:creator><pubDate>Sat, 14 Feb 2026 10:40:05 GMT</pubDate></item><item><title><![CDATA[Reply to Обучение языку программирования Python on Sat, 14 Feb 2026 10:21:35 GMT]]></title><description><![CDATA[<h2>Установка Python и работа с venv</h2>
<p dir="auto">Для того что бы начать работать с Python, его необходимо установить. Я не буду уделять этому много времени, вы можете самостоятельно установить его под любую операционную систему с официального сайта - <a href="https://www.python.org/downloads/" target="_blank" rel="noopener noreferrer">https://www.python.org/downloads/</a></p>
<p dir="auto">Также нам понадобится IDE для работы с кодом, эпоха VS code прошла, по этому я рекомендую редактор нового поколения - <a href="https://zed.dev/" target="_blank" rel="noopener noreferrer">ZED</a>.</p>
<p dir="auto">Работать через IDE удобно, так как у нас будет сразу же терминал и редактор кода в одном месте:</p>
<p dir="auto"><img src="/assets/uploads/files/2e/80/9f/1771064115161-c23b4ce0-1d0b-419a-8d7f-b2bdec7d86b1-image.webp" alt="c23b4ce0-1d0b-419a-8d7f-b2bdec7d86b1-image.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">В профессиональной сфере хорошим тоном считается работа с терминалом, по этому создание папок и файлов будем писать в терминале, и так для того что бы создать нам папку, мы будем использовать команду - <code>mkdir</code> , а аргументом будет наименование папки:</p>
<pre><code>mkdir project
</code></pre>
<p dir="auto">Отлично, теперь после создания папки давайте перейдем в нее написав в терминале <code>cd project</code>. Теперь необходимо создать файл с которым мы будем работать для этого используем команду <code>touch</code> аргументом выступает наименование файла:</p>
<pre><code>touch main.py
</code></pre>
<p dir="auto">Теперь у нас есть подготовленная папка для проекта и начальный файл.<br />
Но для начала работы, необходимо разобраться с виртуальным окружением.</p>
<h3>Виртуальное окружение venv</h3>
<p dir="auto">Venv или по другому виртуальное окружение - это изолирование вашего проекта, а именно библиотеки и прочее. За пределами виртуальной среды, Python не будет иметь доступ к библиотекам проекта.</p>
<p dir="auto">От теории к практике, для установки виртуальной среды, необходимо воспользоваться установкой, через встроенную утилиту pip:</p>
<pre><code class="language-shell">pip install virtualenv
</code></pre>
<p dir="auto">Далее создадим само виртуальное окружение, по стандарту оно называется <code>venv</code>, но мы можем использовать другое наименование к примеру project</p>
<pre><code>python3 -m venv project
</code></pre>
<p dir="auto">После установки, нам необходимо активировать окружение.</p>
<pre><code>source project/bin/activate
</code></pre>
<p dir="auto">Когда мы активируем виртуальное окружение, то увидим что в командой строке слева от имени пользователя наименование нашего окружения.</p>
<p dir="auto">Теперь давайте выйдем из него, для этого напишем в терминале deactivate:</p>
<pre><code>deactivate
</code></pre>
<p dir="auto"><img src="/assets/uploads/files/f0/92/e2/1771064286035-pasted-image-20260208104844.webp" alt="Pasted image 20260208104844.png" class=" img-fluid img-markdown" /><br />
<em>Так это выглядит в терминале</em>.</p>
<p dir="auto">Виртуальные окружения в Python решают проблему конфликтов зависимостей: каждый проект получает изолированный <strong>site-packages</strong>.</p>
<p dir="auto">Пример: legacy-проект на <code>Django 2.2 с mysqlclient==1.4.0, новый — на Django 4.1 с asyncpg. Без venv pip install django==4.1</code> сломает первый проект.</p>
]]></description><link>https://forum.exlends.ru/post/1400</link><guid isPermaLink="true">https://forum.exlends.ru/post/1400</guid><dc:creator><![CDATA[kirilljsx]]></dc:creator><pubDate>Sat, 14 Feb 2026 10:21:35 GMT</pubDate></item></channel></rss>