Основные инструкции

TODO: Написать введение

Условия/инструкции ветвления if/elif/else

Думаю что из название понятно что эта конструкция делает, если нам надо выполнить какие-то инструкции по условию мы ее используем. Общая форма записи:

if <test1>:
<statements1>
elif <test2>:
<statements2>
else:
<statements3>

Примеры

Минимальное условие:

num = 3
if num > 2:
print("Переменная `num` больше двух")

Условие со второй веткой:

num = 3
if num > 2:
print("Переменная `num` больше двух")
else:
print("Переменная `num` меньше двух")

Множественное условие:

num = 3
if num == 2:
print("Переменная `num` равна двум")
if num > 2:
print("Переменная `num` больше двух, но двум не равна")
else:
print("Переменная `num` меньше двух")

Циклы

Цикл с условием while/else

Позволяет нам исполнять инструкции в теле цикла, пока условие выполняется. Общая форма записи:

while <test>: # test - наше условие
<statements1>
else:
<statements1>

Пример бесконечного цикла:

while True:
print("I am alive!")

Как мы видем в примере выше, в условии находится булевый литерал True, а значит условие будет всегда выполняться, и программа не выйдет из цикла. Этот код выведит все число до 6

print(1)
print(2)
print(3)
print(4)
print(5)
print(6)

Этот код делает тоже самое но он меньше

i=1
while i<7:
print(i) # это лишь пример на самом деле циклом можно делать вещи по круче
i+=1

Этот цикл while попросить ввести число в терминале и напечает все число до него и само число

while i<=number:
number=int(input("Введите число:")
i=0
print(i)
i+=1

Этот цикл спросит ваш пол и относительно того что вы ввели выведит вам сообщение, но если ввести что то другое напишет предупреждение

while True:
sex=int(input('Если вы мужчина введите 1 если вы женщина 2'))#sex=пол
if sex==1:
print('Да ты красавчик')
elif sex==2:
print('А ты у нас красавица')
else:
print('Введите 1 либо 2 больше пожалуйста')
break

Цикл попросит ввести ваш год рождения и скажет ваш возраст

while True:
year=int(input('Введите год рождения(все четыре цифры):'))
i=2020-year
print('Ваш возраст:'+str(i))
break

Инструкции управления циклом continue/break

Для того чтобы управлять исполнением в цикле у нас есть две специальные конструкции:

  • continue - позволяет нам немедленно перейти к проверке условия и следующей итерации цикла
  • break - прекращает исполнение цикла

Уже зная про управляющие инструкции давайте попробуем выйти из "бесконечного цикла"

i = 0
while True:
if i > 10000:
break
print(i)
i += 1

Это пример бесконечного цикла с условием if при каждом цикле он проверяет число равно ли оно 20 если нет цикл продолжаеться если да brear останавливает цикл

i=1
while True:
print(i)
i+=1
if i ==20:
break

В примере кода выше мы создали с вами переменную-счетчик - i, которую инкрементируем(увеличиваем на единицу) в конце каждой итерации цикла, а в самом цикле у нас есть условие: "Если счетчик больше 10000 -> выйди из цикла"

Ветка исполнения else

Но как показано выше, в цикле есть еще дополнительная ветка исполнения: else, инструкции из этой ветки будут исполнены если выход из цикла произошел по условию, Т.е если вышли мы без исполнения инструкции break.

Давайте еще один пример с исполнением кода в ветке else:

i = 0
while i < 100:
print(i)
i += 1
else:
print("i equal to 100")

Обход последовательности for/else

Для обхода последовательности используется инструкция for/else. Ее общая форма записи:

for <item> in <sequence>:
<statements>
else:
<statements2>

Инструкции continue и break работают так же как и в while/else. Вторая ветка исполнения else будет исполнена, если мы вышли из цикла обычным способом(после обработки последнего элемента в последовательности):

seq = [1,2,3]
# мы можем обойти последовательность(list) 'seq' и вывести значение каждого элемента
for i in seq:
print(i)
else:
print("Обход цикла закончен!")

В этом примере мы посчитаем сумму чисел в последовательности:

sum = 0
for i in [1,2,3]:
sum += i
print(f"Сумма чисел в последовательности равна: {sum}")

Инструкция pass

pass - ничего не делать

Мы не можем оставлять тело... допустим цикла, пустым в таком случае мы в теле можем написать инструкцию pass. Вот вам бесконечный цикл, который ничего не делает:

while True:
pass

Генераторы списков(List comprehension)

Герераторы списков это более краткая форма того, что вы могли бы сделать через конструкцию for/in.

Перед нами стоит задача возвести каждое число списка в квадрат, давайте посмотрим как это можно было бы сделать через for/in:

SOME_LIST = [1, 2, 3, 4]
result = []
for i in SOME_LIST:
result.append(i ** 2)
print(result) # 1, 3, 9, 16

И второй вариант уже использующий генераторы списков:

SOME_LIST = [1, 2, 3, 4]
print([i ** 2 for i in SOME_LIST]) # 1, 3, 9, 16

Давайте еще проигнорируем строки в исходной строке

SOME_LIST = [1, 2, "str", 3, 4]
print([i ** 2 for i in SOME_LIST if type(i) == int]) # 1, 3, 9, 16

Live example

Генераторы словарей(Dict comprehension)

Генераторы словарей очень похожи на генераторы списков, но как понятно из названия они генерируют словари

SOME_VALUES = [1, 2, 3]
print({str(i): v for i, v in enumerate(SOME_VALUES)})
# 👆 Обратите внимание на это двоеточие

В остальном надеюсь вам понятен это синтаксис, если нет, то пишите и я дополню тему генераторов

Класс range

Используется для генерации последовательности чисел.

def range(start=0, end, step=1):

Аргументы конструктора (функции)

  • start - начало последовательности (По умолчанию - 0)
  • end - конец последовательности (Не включительно)
  • step - с каким шагом генерировать последовательность

Обратите внимание

  • Аргумент step может быть отрицательным, точно так же start может быть больше чем end.
#детальнее
👇 - start
| 👇 - end
| | 👇 - step
for i in range(5, 0, -1):
print(i) # [5, 4, 3, 2, 1]

Пример

for i in range(0, 10):
print(i)
#0
#1
#2
#3
#4
#5
#6
#7
#8
#9