background top icon
background center wave icon
background filled rhombus icon
background two lines icon
background stroke rhombus icon

Скачать "Python — полный курс для начинающих. Этот навык изменит твою жизнь."

input logo icon
Оглавление
|

Оглавление

0:00
Интро
3:00
Функция print
5:50
Переменные
10:04
Числа (int)
22:47
Булевый тип (bool)
31:11
Условные операторы
42:03
Строки (str)
58:47
Установка софта
59:25
Установка на Windows
1:01:57
Установка на macOS
1:04:46
Списки (list)
1:19:59
Индексы и слайсы
1:30:56
Цикл for
1:44:02
Функции
1:57:03
Область видимости переменных
2:06:29
Цикл while
2:27:24
Кортежи (tuple)
2:31:13
Словари (dict)
2:39:58
args, **kwargs
2:51:26
json
2:55:41
import
3:03:33
Установка сторонних библиотек
3:04:05
Библиотека requests
3:12:49
Списочные включения
3:23:02
Множества (set)
3:29:06
Функции sorted и filter
3:39:04
lambda функции
3:42:43
Обработка исключений
3:48:02
Классы
4:23:28
Декораторы
4:40:14
Простейший telegram bot
4:51:42
Дата и время
4:57:52
Работа с файлами
5:05:15
Менеджер контекста
5:06:38
Изменяемые и неизменяемые структуры данных
5:26:28
Заключение
Теги видео
|

Теги видео

python для начинающих
python
питон для начинающих
питон
python с нуля
python курс
питон программирование
полный курс
python для новичков
питон с нуля
с нуля
питон для новичков
python с нуля до junior
как выучить python
уроки python
курс python
курс python для начинающих
курс python с нуля
уроки питон
туториал python
python tutorial
python tutroial for beginners
python уроки
пайтон
выучить python
питон уроки
Субтитры
|

Субтитры

subtitles menu arrow
  • enАнглийский
Скачать
00:00:00
Python курс для начинающих в одном видео
00:00:03
Привет мир в процессе курса я познакомлю
00:00:06
вас с самыми частотными конструкциями
00:00:08
языка и библиотеками порешаем задачи
00:00:11
которые программисты решают на реальной
00:00:13
работе поработаем с http запросами и
00:00:16
даже напишем простенький Telegram бот
00:00:18
Неважно как вы хотите использовать
00:00:21
Python после курса основы которые я
00:00:23
изложу здесь по-любому пригодятся вам
00:00:26
Меня зовут Саша Скоро будет 5 лет как я
00:00:29
профессионально занимаюсь
00:00:30
программированием большую часть этого
00:00:32
времени я писал и пишу сейчас на Python
00:00:35
на Python я решал разные задачи писал
00:00:38
Кэн в компаниях разного размера
00:00:40
анализировал данные работал рядом с
00:00:42
нейросетями писал Telegram ботов
00:00:44
скреперы и так далее на Python Я видел
00:00:48
всё Ну или почти всё Python на данный
00:00:51
момент Самый распространённый язык
00:00:53
программирования в мире об этом говорят
00:00:55
рейтинги tiobe и pypl Python закрывает
00:01:00
широкий спектр задач анализ данных
00:01:02
backend Machine Learning автоматизация и
00:01:05
скриптинг Спектр такой широкий что
00:01:08
Python используют не только
00:01:09
профессиональные разработчики даже если
00:01:11
вы не планируете работать программистом
00:01:13
знани Python окажется полезным для
00:01:16
разных вещей если бы меня спросили Какой
00:01:19
самый полезный навык прямо сейчас я бы
00:01:22
не колеба Ясь ответил умение
00:01:24
пользоваться пайном это высокоуровневый
00:01:26
язык То есть он упрощает разработку и
00:01:29
снимает програмиста ряд проблем например
00:01:31
управление памятью то есть Python Хорошо
00:01:33
подходит для новичков это
00:01:35
интерпретируемый язык то есть результат
00:01:37
от выполнения программы можно получить
00:01:39
сразу и не ждать каких-то промежуточных
00:01:42
стадий типа компиляции это язык с
00:01:44
динамической типизацией что делаеть
00:01:46
синтаксис языка максимально простым как
00:01:49
я советую проходить этот курс пишите код
00:01:52
вместе со мной то есть буквально
00:01:58
останавливайтесь будет задание которые я
00:02:01
советую вам решить самому к заданию
00:02:04
прилагается ответ смотрите в него после
00:02:07
того как потратите хотя бы час на
00:02:09
самостоятельное решение Практика - это
00:02:12
главный источник вашего роста и помните
00:02:15
в начале всегда тяжело но со временем У
00:02:18
вас начнёт получаться радость от
00:02:20
самостоятельного решения задач не
00:02:22
сравнить ни с чем И я желаю вам дойти до
00:02:25
этой точки погнали обычно курсы
00:02:29
начинаются с долгой установки софта на
00:02:31
компьютер а я бы хотел сразу перейти к
00:02:34
коду софт мы обязательно установим Вот
00:02:37
на этом тайминг Для более быстрого
00:02:39
погружения мы начнём писать код в онлайн
00:02:42
интерпретаторе Я выбрал следующий сервис
00:02:45
подобных сервисов много если именно этот
00:02:48
сервис не работает то Вот по этому
00:02:50
Google запросу можно найти другой онлайн
00:02:53
Python интерпретатор если софт на вашем
00:02:56
компьютере уже установлен прекрасно
00:02:58
начинайте кодить прямо в нём
00:03:04
Итак начнём с встроенной функции Print
00:03:07
функция Print будет помогать нам
00:03:10
ориентироваться в коде она выводит
00:03:12
значение каких-то переменных или просто
00:03:15
строковых данных в
00:03:18
терминал напишем первые Hello
00:03:23
world
00:03:25
запускаем видим в терминале
00:03:28
значение
00:03:31
можно передавать сразу несколько
00:03:35
строковых
00:03:37
значений
00:03:40
Hello
00:03:44
world они в терминале будут разделены
00:03:47
пробелом если мы хотим разделить их
00:03:50
каким-то другим символом то нужно
00:03:53
использовать аргумент SE то есть
00:03:56
separator или
00:03:58
разделитель
00:04:04
и между словами Hello и World уже
00:04:07
видится запятая и пробел если мы
00:04:09
исполним функцию Print в разных строках
00:04:12
то и в
00:04:19
выводе значение выведется в разных
00:04:23
строках А если мы хотим сделать какое-то
00:04:28
другое разделение например второй вывод
00:04:32
в той же строке что и первый то нам
00:04:34
нужно воспользоваться аргументом
00:04:38
and и передать сюда
00:04:42
пробел Тут нужно упомянуть что код в
00:04:45
Python исполняется сверху вниз строка за
00:04:52
строкой как мы это уже видели Давайте
00:04:55
познакомимся с ещ одной функцией из
00:04:58
встроенных это функция
00:05:01
Input функция Input приостанавливает
00:05:05
исполнение кода чтобы пользователь
00:05:08
что-то вбил в
00:05:14
терминал А вот исполнение приостановило
00:05:18
мы сюда можем вбить то что мы
00:05:22
хотим нажимаем Enter и код идёт Дальше
00:05:26
например мы можем попросить пользователя
00:05:28
вбить своё имя
00:05:39
и вывести это имя обратно в
00:05:45
терминал Enter и мы получили имя обратно
00:05:50
в
00:05:54
терминале перейдём к переменным в пайне
00:05:57
переменная это своего рода тене который
00:06:00
хранит значение это значение может быть
00:06:02
разных типов строкой числом или
00:06:05
какими-то более сложными типами с
00:06:07
которыми мы познакомимся позже после
00:06:09
того как вы сохраняете значение в
00:06:11
переменную Вы можете пользоваться им
00:06:14
дальше в своём коде Давайте создадим
00:06:16
переменную
00:06:18
name и выведем эту переменную в
00:06:25
терминал ВС
00:06:28
получилось давать осмысленные имена
00:06:31
потому что код пишется один раз а
00:06:33
читается в среднем пять и самое главное
00:06:36
человек который будет читать ваш код это
00:06:38
вы сами Поэтому лучше позаботиться о
00:06:41
себе сразу Обратите внимание если в
00:06:43
обычной математике мы используем равно
00:06:46
для проверки на равенство чего-то то в
00:06:49
Python мы используем равно как знак
00:06:52
присвоения А давайте создадим переменную
00:06:56
H в первой строке у нас происходит при
00:06:59
своей
00:07:00
в переменную
00:07:01
значение во второй в переменную H
00:07:04
значение
00:07:05
25 Давайте выведем их в
00:07:12
терминал переменные можно Объявлять
00:07:14
по-другому сразу же несколько например
00:07:16
вот
00:07:20
так ра 25 при этом в левой стороне от
00:07:25
знака присвоения должно быть столько же
00:07:27
значений Сколько в правой стороне
00:07:30
Давайте выведем в терминал всё
00:07:32
получилось переменные можно присваивать
00:07:35
в другие
00:07:36
переменные name elice other
00:07:40
name равно
00:07:43
name Давайте выведем other
00:07:46
[музыка]
00:07:48
name также elis допустим у нас есть
00:07:51
переменная X в которой лежит значение 3
00:07:54
и переменная Y в которой лежит значение
00:07:57
4 нам нужно чтобы в переменной Y
00:08:00
оказалось значение переменной X и А в
00:08:03
переменной X значение переменной Y в
00:08:05
Python для этого есть очень удобный
00:08:09
синтаксис XY = yx и
00:08:15
Давайте выведем их в
00:08:18
терминал первый X в котором лежит
00:08:21
значение тыре и вторая - это переменная
00:08:24
Y в которой лежит значение 3 А я напомню
00:08:28
что в начале у нас лежали в этих
00:08:30
переменных другие значения в пайне есть
00:08:32
встроенная функция typ которая
00:08:34
показывает к какому типу относится
00:08:37
значение например
00:08:39
Давайте
00:08:56
присвоили мым строку Hello
00:09:03
world то переменная будет типа стр или
00:09:07
string строка в пайтоне есть некоторое
00:09:10
количество ключевых слов которые
00:09:12
зарезервированы например это функция
00:09:14
Print поэтому не надо называть
00:09:16
переменные этими ключевыми словами
00:09:19
например вот сделать вот так это очень
00:09:27
плохо код просто упадёт с ошибкой в
00:09:31
Python есть договорённости по поводу
00:09:33
того как должны называться переменные
00:09:36
классы названия пакетов константы и так
00:09:39
далее Вы видите эту договорённость на
00:09:42
своём экране А самое главное что вам
00:09:44
нужно запомнить что А есть Snake Case
00:09:48
это прописные буквы в которые слова
00:09:51
разделены нижним подчёркиванием Snake
00:09:53
кейс используется для объявления
00:09:54
переменных функций методов модулей и так
00:09:58
далее пока мы будем использовать его со
00:10:00
всеми остальными вариантами написаний мы
00:10:03
познакомимся
00:10:07
позже числа Python множество числовых
00:10:11
типов данных но нам Для начала нужно
00:10:14
познакомиться с двумя из них это integer
00:10:17
и
00:10:19
float integer - это целые
00:10:23
числа то есть например
00:10:26
10 там может быть ми1 Но и так далее а
00:10:31
FL - это числа с плавающей
00:10:35
точкой числа Конечно же можно складывать
00:10:39
друг с другом допустим у нас есть
00:10:41
переменная X которая равна 10 и
00:10:44
переменная Y которая равна 5 Давайте
00:10:47
вычислим их сумму X +
00:10:53
Y Посмотрим что
00:10:58
получилось 15 Также можно складывать
00:11:01
числа с плавающей
00:11:04
точкой сейчас уже получилось 16.0 то
00:11:07
есть сари в итоге сейчас относится к
00:11:10
типу флот то есть числа с плавающей
00:11:12
точкой можно делать умножение и деление
00:11:15
Давайте посмотрим что получится давайте
00:11:18
я присвою в переменную
00:11:23
Z результат выполнения
00:11:27
операции Также можно
00:11:31
делить Z тогда будет
00:11:35
типа
00:11:37
2.0 если мы сделаем Y Рав 0 то на но
00:11:42
делить
00:11:44
Нельзя интерпретатор говорит нам об
00:11:47
этом вот здесь всё
00:11:51
написано то есть мы разделили на но и
00:11:53
интерпретатор ругается на на в есть
00:11:56
также другие действия вот этими
00:11:59
действиями всё понятно то давайте
00:12:01
подробней остановимся Вот на этом
00:12:03
возведение в степень целочисленное
00:12:05
деление и остаток от деления возведение
00:12:07
в степень Давайте возведён 3 Это значит
00:12:10
что 2 Умно на себя же на два три
00:12:15
раза X = 2
00:12:18
прин x в степени
00:12:23
3 получилось во это эквивалентно вот
00:12:27
такой записи
00:12:33
а что такое остаток отделения допустим
00:12:36
нам нужно разделить число де на число 4
00:12:40
при этом мы не можем пользоваться
00:12:42
десятичными дробями Что будет если 9 / 4
00:12:46
то получится 2 у 4 это
00:12:51
8 плю 1 можно записать вот так 2 в
00:12:55
данном случае это результат
00:12:57
целочисленного
00:12:59
9 на 4 а о - Это остаток отделения и мы
00:13:05
можем
00:13:07
посмотреть это в коде а целочисленное
00:13:11
деление записывается вот таким
00:13:18
образом а получилось
00:13:21
два а остаток
00:13:25
отделения делается Вот
00:13:27
так получилось один порядок действий в
00:13:31
пайтоне а допустим у нас есть число
00:13:34
integer которое вычисляется следующим
00:13:37
образом это 2 + 3 у 5 первым будет
00:13:40
выполняться умножение и затем сложение
00:13:44
то есть на выходе нас будет
00:13:47
ждать 17 если нам нужно первым выполнить
00:13:51
сложение то мы просто берём его в
00:13:57
скобки пось 25 типы integer и FL можно
00:14:03
складывать друг с другом на выходе
00:14:07
получится число с плавающей точкой то
00:14:09
есть типа
00:14:18
FL 15 с по получилось Какого размера
00:14:21
вообще числа можно засовывать в
00:14:24
переменную переменная типа int может
00:14:27
хранить числа любого если они влазят в
00:14:29
оперативную память причём значения могут
00:14:32
быть очень большие А например количество
00:14:35
атомов в обозримой Вселенной равно
00:14:37
примерно 10 в степени 80 То есть это
00:14:41
число с воде нулями в пайтоне мы можем
00:14:44
легко сделать число с 1.000
00:14:48
[музыка]
00:14:52
нулями Для этого просто 10 возведён
00:14:54
тысяча Давайте посмотрим что
00:14:57
получилось
00:14:59
а так я умножил сейчас Да нужно возвести
00:15:02
в
00:15:03
степень Получилось число вот с таким
00:15:06
количеством нулей если нам нужно
00:15:08
получить переменную типа Flo из
00:15:10
переменной
00:15:12
integer то нам нужно использовать
00:15:15
ключевое слово Flo Например у нас есть
00:15:18
переменная My integer и переменная My
00:15:23
Flat мы сделаем вот
00:15:25
так в функцию передадим аргументам
00:15:29
переменную My
00:15:32
int Давайте посмотрим что получится на
00:15:36
выходе да получилось 1.0 если сделать
00:15:40
следующим образом вот у нас есть
00:15:41
переменная My Flat которая равна 1.5 и
00:15:45
нам нужно сделать из этого integer
00:15:48
А давайте посмотрим что получится если
00:15:52
записать вот
00:15:57
так
00:16:02
получается единичка то есть функция int
00:16:06
она просто отрезает всё что после
00:16:08
запятой То есть даже если будет здесь
00:16:10
вот так она просто возьмёт и отрежет всю
00:16:13
дробную
00:16:15
часть Как воспользоваться если мне нужно
00:16:18
округлить число есть функция Round в
00:16:22
питоне и Давайте посмотрим что
00:16:25
будет округляется ВС по прави
00:16:29
арифметики то есть 1.5 будет равно д а
00:16:34
1.49 будет равно единички Итак с
00:16:37
арифметическими действиями всё прекрасно
00:16:39
но как их применять на практике Давайте
00:16:42
решим вот такую задачу вы видите её на
00:16:45
экране Я бы советовал вам попробовать
00:16:47
решить её самим но я сейчас расскажу её
00:16:51
решение и подс сам процесс решения а
00:16:56
Итак у нас есть
00:16:59
дом в котором пять подъездов по 20
00:17:02
квартир а на каждом этаже четыре
00:17:04
квартиры То есть очевидно что этажей
00:17:06
пять дом представляет из себя следующее
00:17:10
А у нас идёт нумерация с первого этажа
00:17:13
вверх первый этаж - это квартира 1 2 3 4
00:17:17
5 6 7 8 Ну и так далее последняя
00:17:20
квартира в первом подъезде двадцатая вот
00:17:22
эта квартира двадцать Первая это
00:17:25
сороковая сорок первая шестидесятая Ну и
00:17:28
далее а такая схема очень помогает Ну
00:17:32
просто понять эту задачу и постараться
00:17:35
найти решение Давайте начнём с номера
00:17:39
подъезда чтобы получить номер
00:17:43
подъезда в доме Где в каждом подъезде 20
00:17:47
квартир нужно применить целочисленное
00:17:49
деление на
00:17:52
20 Давайте попробуем это сделать так
00:17:55
давайте
00:17:56
начнём и вычитаем номер подъезда для
00:18:00
квартиры номер
00:18:03
два как это делается Ну что Давайте
00:18:06
попробуем intrance Number номер
00:18:09
подъезда равно Flat Number целочисленное
00:18:13
деление на
00:18:15
20 и получим номер
00:18:19
подъезда получился ноль потому что 2
00:18:24
целочисленное ноль нам нужно прибавить к
00:18:28
этому единицу чтобы получился первый
00:18:31
подъезд потому что в жизни мы считаем с
00:18:38
единицы Так н Number для квартиры 2
00:18:42
равен
00:18:43
один но у нас есть Давайте попробуем для
00:18:48
квартиры 20
00:18:50
определить подъезд у нас получилось два
00:18:54
Хотя в нашем доме двадцатая квартира
00:18:56
находится в первом подъезде
00:18:58
это особенность целочисленного деления
00:19:01
Ну сама само число делится само на себя
00:19:04
и получается единица нам нужно от числа
00:19:08
отнять единичку от номера
00:19:15
квартиры минус единица и уже это
00:19:19
разделить целочисленного на 20 и
00:19:21
прибавить оди Давайте
00:19:24
попробуем всё для квартиры 20
00:19:28
подъезд один получается Давайте
00:19:30
попробуем для квартиры
00:19:32
40 подъезд 2 всё верно давайте для
00:19:35
квартиры 21
00:19:38
попробуем подъезд два для квартиры
00:19:41
просто
00:19:44
один первый подъезд Всё верно для
00:19:47
квартиры 81 должен получиться подъезд
00:19:50
п Да всё
00:19:52
верно Вот так высчитывается
00:19:56
Number сно этажа всё обстоит чуть
00:20:00
сложнее А давайте обратимся к нашей
00:20:04
схеме вот допустим у нас есть квартира
00:20:07
12 и есть квартира 32 Она расположена
00:20:12
вот здесь для этих квартир по сути
00:20:15
должно быть одно правило для вычисления
00:20:18
этажа Поэтому нам нужно избавиться от
00:20:21
подъезда в нашем вычислении как это
00:20:24
сделать Ну очень просто нужно начать с
00:20:27
того
00:20:30
что мы уберём э
00:20:34
подъезд просто получив остаток от
00:20:39
деления номера квартиры на количество
00:20:42
квартир в одном
00:20:44
подъезде остаток
00:20:46
отделения вот так вычисляется Давайте
00:20:50
попробуем найти остаток
00:20:53
отделения квартиры 81 дел на 20
00:21:03
у нас будет она вторым
00:21:05
числом А это единичка
00:21:08
А всё
00:21:10
О'кей дальше нам нужно
00:21:12
А эту единичку э узнать целочисленный
00:21:17
остаток отделения на четвёрку это похоже
00:21:20
с тем как мы вычисляли подъезд четыре
00:21:22
квартиры на каждом
00:21:24
этаже пишем целочисленное деление от
00:21:27
четырёх
00:21:28
квартира 81 должна располагаться на
00:21:31
первом
00:21:33
этаже у нас получился ноль Ну мы считаем
00:21:36
в жизни с единички поэтому надо
00:21:38
прибавить
00:21:46
единичку Всё верно квартира 81
00:21:49
расположена в пятом подъезде на первом
00:21:51
этаже А проблема начинается когда мы
00:21:54
опять-таки
00:21:57
побу значение этажа для двадцатой
00:22:02
квартиры получилось один Хотя квартира
00:22:05
расположена на пятом этаже А проблема
00:22:08
всё в том же
00:22:11
20 при делении на 20 оставляет остаток
00:22:16
ноль Поэтому нам нужно вот сюда опять же
00:22:19
воткнуть минус
00:22:24
единичку Всё мы узнали На каком это же
00:22:28
расположена квартира и в каком подъезде
00:22:30
если мы начнём экспериментировать
00:22:32
Давайте допустим квартира 24 она должна
00:22:35
располагаться во втором подъезде на
00:22:38
первом этаже Давайте
00:22:41
запустим подъезд
00:22:43
2 этаж один Всё
00:22:50
верно тип данных бу Это тип данных
00:22:54
который включает в себя два значения
00:22:56
True или fse он объявляется в переменную
00:22:59
например переменная is Student то есть
00:23:02
пусть у нас есть какой-то объект
00:23:04
какого-то ученика допустим в коде и нам
00:23:06
нужно держать признак является ли он
00:23:08
студентом и мы вот напишем True Давайте
00:23:14
посмотрим выведем значение в
00:23:18
терминал Или допустим у нас есть опять
00:23:21
же объект какого-то ученика который
00:23:26
является
00:23:30
выпускником Давайте присвою fse и
00:23:33
выведем
00:23:35
из переменную она равна самое главное
00:23:40
что используется с типом бу это
00:23:44
выражение допустим у нас есть X Рав 10 и
00:23:48
y ра 10 и нам нужно сравнить равен ли X
00:23:53
или нет сравнение в Python делается с
00:23:56
помою оператора
00:24:01
X = Y результатом выражения является
00:24:05
переменная типа
00:24:07
Bull True или false в данный момент это
00:24:11
True если наш X будет равен де то в
00:24:14
терминал выведется false мы можем
00:24:17
результат этого выражения присвоить в
00:24:19
переменную
00:24:20
Давайте назовём её is
00:24:24
equal
00:24:26
А да и выведем её в
00:24:31
терминал переменная равна fse Давайте
00:24:35
заменим X обратно на 10 и переменная
00:24:38
сейчас равна True можно узнать что
00:24:41
переменные присвоят сюда не равны друг
00:24:43
другу not equal для того чтобы проверить
00:24:46
что переменные не
00:24:48
равны используют вот такой оператор
00:24:52
тельный знак равно сейчас переменная not
00:24:56
equal будет равна fse Потому что эти X и
00:25:01
Y равны друг
00:25:03
[музыка]
00:25:06
другу если мы
00:25:10
присвоив то переменная not equ будет уже
00:25:13
True для выражений в Python используется
00:25:16
множество операторов То есть например
00:25:19
это больше меньше также как в
00:25:23
математике больше либо равно меньше либо
00:25:26
равно допустим у на есть переменная X и
00:25:29
Y
00:25:32
Давайте напишем
00:25:34
принты что нам вернут разные
00:25:46
операторы
00:25:48
запускаем получилось True fse True fse
00:25:51
то есть X Y Да X Y возвращается X Мень Y
00:25:59
нет X не меньше Y возвращается Фолс X >
00:26:02
либо равно Y опять возвращается True и
00:26:06
возвращается false А давайте посмотрим
00:26:09
вот если у нас оставим только вот эти
00:26:11
значения и если значения равны то оба
00:26:14
выражения вернут
00:26:16
True потому что X больше либо равно Y 10
00:26:20
больше либо равно 10 если нам нужно
00:26:23
проверить два условия то используются
00:26:26
операторы
00:26:28
Или допустим у нас есть X Рав оно и нам
00:26:32
нужно проверить
00:26:34
что одновременно X меньше 5 и больше -2
00:26:39
мы записываем вот так X ме 5 и X бо -2 А
00:26:45
в данный момент наш X удовлетворяет этим
00:26:47
условием и в терминал должен вывести
00:26:53
True это если число не попадает вал
00:26:58
допустим
00:27:01
6 то выведется ЛС потому что уже первое
00:27:04
условие провалено 6 не меньше пяти также
00:27:08
с булевы переменными используется
00:27:10
оператор not оператор not меняет знак у
00:27:14
переменной типа Bull То есть если
00:27:16
переменная типа Bull
00:27:19
была например
00:27:21
True
00:27:23
то not и
00:27:26
Student будет являться
00:27:30
false за работу операторов рядом с
00:27:34
булевы значениями отвечает наука логика
00:27:37
А если у вас в ней Пробел то неплохо бы
00:27:41
прежде чем погружаться в
00:27:42
программирование или параллельно с тем
00:27:44
чтобы погружаться в программирование
00:27:46
почитать какие-то основы логики основы
00:27:48
очень лёгкие и их изучение займёт
00:27:51
небольшое время когда мы работаем с
00:27:54
булевы типом данных у нас также есть
00:27:56
ключевое слово Бу в которой можно
00:27:58
передавать значения других типов
00:28:00
например
00:28:05
чисел Бул от единицы
00:28:09
будет Бул от нуля будет
00:28:13
л Бул от мину оного будет также
00:28:18
True то есть функция бу в данном случае
00:28:23
проверяет ели хоть какое-то значение
00:28:25
отличное от нуля туда можно также давать
00:28:27
строковые данные Например если мы
00:28:31
возьмём и функцию Bull передадим строку
00:28:34
Hello world будет True если функции Bull
00:28:38
окажется пустая строка то это
00:28:41
false зачем это использовать мы
00:28:43
поговорим в следующем
00:28:48
модуле основная идея курса который ты
00:28:50
сейчас смотришь дать максимальному
00:28:52
количеству людей попробовать Python и
00:28:55
получить этот кайф от самостоятельного
00:28:57
решение задач К сожалению
00:28:59
самостоятельное обучение - Это не просто
00:29:01
любой новичок рано или поздно упирается
00:29:03
в стену сначала обучение таким способом
00:29:06
до трудоустройства может пройти пару лет
00:29:09
для тех кто не хочет ждать хочет
00:29:11
Получить профессию и устроиться на
00:29:12
работу за более короткое время я могу
00:29:15
посоветовать направление Python
00:29:17
разработчик от онлайн-университета
00:29:19
skypro что ты получишь как групповую так
00:29:22
и индивидуальную поддержку и
00:29:24
сопровождение опытных спецов грамотно
00:29:26
составленную учебную программу которая
00:29:28
подходит как для новичков так и для тех
00:29:31
кто изучил базу программирования ты
00:29:33
Изучи чтоьы инструменты и библиотеки А
00:29:36
главное получишь активную помощь в
00:29:38
трудоустройстве на работу На мой взгляд
00:29:41
вопрос трудоустройства после получения
00:29:43
образования наиболее важен какой смысл
00:29:46
учиться Если нет уверенности что по
00:29:48
окончании обучения ты найдёшь работу
00:29:50
особенно важный Аспект обучения в skypro
00:29:53
- это гарантия трудоустройства которая
00:29:55
закреплена в договоре это становится
00:29:57
возможным благодаря карьерному центру
00:29:59
там Вас ждут опытные карьерные
00:30:01
специалисты которые всегда ответят на
00:30:03
ваши вопросы лично помогут составить
00:30:05
сильное резюме и подготовят к
00:30:07
собеседованию дадут вам тестовое задание
00:30:09
и разберут ваше решения научат писать
00:30:12
сильное сопроводительное письмо искать
00:30:14
перспективные вакансии с достойными
00:30:16
условиями и поделятся лучшими
00:30:18
предложениями от партнёров skypro а
00:30:20
также помогут составить грамотное CV
00:30:23
портфолио профиль LinkedIn тем кто
00:30:26
планирует устроить в иностранную
00:30:28
компанию благодаря такой поддержке и
00:30:30
активному студенческому коммьюнити более
00:30:33
70% студентов skypro доходят до конца
00:30:36
обучения обучение длится 10 месяцев и по
00:30:39
его окончании у вас будет пять крутых
00:30:42
проектов в портфолио много опыта и
00:30:44
практики если ты поймёшь что ошибся с
00:30:46
направлением то можешь бесплатно перейти
00:30:49
и Сменить его в течение первого месяца
00:30:51
сканируй QR код на экране или оставляй
00:30:53
заявку на курс Python разработчик по
00:30:56
ссылке в описании и получи бесплатную
00:30:58
персональную консультацию от it эксперта
00:31:01
А с промокодом ин ты получишь скидку
00:31:03
20.000 руб на любой курс Sky
00:31:14
Pro условные операторы как это устроено
00:31:17
в Python оператор If является началом
00:31:20
условной конструкции А дальше идёт
00:31:23
условие Давайте вместо условия сейчас
00:31:26
просто напишем
00:31:28
затем блок кода отделяется либо табо
00:31:33
либо четырьмя пробелами обычно в IDE
00:31:36
когда вы нажимаете Tab то вместо него
00:31:39
подставляется четыре пробела но здесь в
00:31:42
онлайн интерпретаторе сразу же ставится
00:31:45
T и следующая строчка следующий блок
00:31:48
кода отделён отступом всё что отделено
00:31:51
отступом по
00:31:53
ДФМ исполняется если условие равно True
00:31:58
Давайте напишем здесь Print Hello
00:32:02
world
00:32:04
запускаем Hello world вывелся в терминал
00:32:08
если мы напишем сюда
00:32:11
false то Hello world не выведется в
00:32:15
терминал потому что условия не
00:32:18
выполняются допустим у нас есть
00:32:20
переменная X которая равна 10 и мы
00:32:22
напишем If ifx >
00:32:25
0 Print
00:32:34
X
00:32:37
положительны он написал Если x равен -10
00:32:42
то условие выполнено не будет иногда нам
00:32:46
нужно проверить сразу несколько
00:32:50
условий это сделается с помощью
00:32:55
оператора допустим У нас есть X который
00:32:58
равен
00:32:59
Ну если X бо ну то мы напишем
00:33:04
X
00:33:07
положительные X меньше
00:33:11
ну напишем что
00:33:14
X
00:33:16
отрицательные
00:33:19
и мы можем также написать здесь
00:33:22
конструкцию также и перечислить что X но
00:33:27
я предлагаю сюда сделать
00:33:31
else в else пойдут все остальные
00:33:35
случаи и написать собственно все
00:33:38
остальные случаи и x равен
00:33:42
нулю запускаем код X и Z если X
00:33:48
положительные
00:33:49
то исполнение пойдёт вот в этот блок А
00:33:54
если X отрицательные то исполнение
00:33:58
пойдёт в средний
00:34:01
блок если условия наслаивается например
00:34:05
мы напишем что X бо 0 и X бо 1 то есть
00:34:10
вот у нас и X ра 10 а X
00:34:15
удовлетворяет и этому
00:34:18
условию и этому исполнится то условие
00:34:21
которое расположено
00:34:25
выше да исполнение кода пошло вот в эту
00:34:28
ветку допустим нам нужно проверить сразу
00:34:30
два условия У нас есть какой-то X
00:34:33
который равен 10 У нас есть y2 и нам
00:34:38
нужно проверить что и X положительный и
00:34:41
y положительны как это записать ifx >
00:34:47
0 здесь в блоке
00:34:50
кода можно написать Вот так If Y 0
00:34:55
и X and Y
00:35:01
positive но это не очень хорошо обычно
00:35:06
когда мы проверяем два условия нужно
00:35:08
делать их в рамках одного условного
00:35:12
оператора и соединить
00:35:15
их ключевым словом
00:35:20
end так лучше Мы также можем сделать
00:35:24
проверку с какими-то текстовыми
00:35:27
переменными Например у нас есть
00:35:31
message и нам нужно проверить что
00:35:34
message не пустой мы так и пишем If
00:35:37
message
00:35:42
Print message is not empty
00:35:47
А так как message есть какие-то символы
00:35:51
а то
00:35:53
э условие исполняется и исполняется этот
00:35:56
блок кода
00:35:58
если медж будет пустой то блок кода не
00:36:03
исполнится То есть когда мы
00:36:07
передаём в условный оператор текстовую
00:36:11
переменную то происходит следующее
00:36:14
Python берёт функцию Bull накидывает её
00:36:18
на mess а функция Bull от пустого месед
00:36:22
Это
00:36:23
fse от пустой текстовой
00:36:25
переменной то исполнение кода не идёт в
00:36:28
этот
00:36:30
блок Но для удобства функцию Bull можно
00:36:34
не прописывать и мы просто пишем If
00:36:37
message и также можно делать с числами
00:36:40
Например у нас есть какой-то X который
00:36:43
равен нулю If
00:36:52
X Давайте X поставим единички и проверим
00:36:59
если x равен Ну то блок кода сюда Не
00:37:05
зайдёт этот блок кода не исполнится
00:37:07
Давайте напишем небольшой скрипт который
00:37:10
определит является ли год високосным
00:37:12
правило определения високосного года
00:37:14
достаточно хитрое год должен без остатка
00:37:17
делиться
00:37:19
наче Но если при этом он делится на 100
00:37:23
без остатка и при этом без
00:37:27
то он не является високосным то есть
00:37:29
например год 1800 не является високосным
00:37:32
потому что он делится на 100 без остатка
00:37:35
но при этом не делится без остатка на
00:37:37
400 год двухтысячный уже является
00:37:40
високосным потому что он делится на 400
00:37:42
без остатка
00:37:44
а и он является високосным Несмотря на
00:37:48
то что делится на 100 без остатка а
00:37:51
давайте у нас есть переменная
00:37:53
Давайте первое проверим 2000
00:37:57
и пишем условие
00:38:00
If разделить
00:38:02
на
00:38:05
4 равно нулю и
00:38:09
А сюда Давайте вставим сразу же условие
00:38:12
деление на 100
00:38:14
и остаток от деления на 100 не равно
00:38:19
нулю
00:38:22
А напишем Print из lip
00:38:27
лип - это по-английски високосное а при
00:38:30
этом у нас должно быть сразу второе
00:38:33
условие вот
00:38:34
смотрите вот сюда если мы а в объём год
00:38:39
двухтысячный то он не пройдёт по этому
00:38:42
условию потому что первое будет True Вот
00:38:45
это условие он проверит будет Т на
00:38:46
четыре он разделится без остатка но
00:38:50
деление от остатка на 100 не будет
00:38:52
равным нулю поэтому исполнение уйдёт во
00:38:56
второй If и здесь мы
00:39:01
напишем E 400 равно
00:39:06
нулю
00:39:08
также год високосный и всё остальное
00:39:14
А год не будет являться
00:39:18
високосным Давайте проверим что будет
00:39:20
когда в переменной будет цифра
00:39:24
2000 да он пишет что год високосным
00:39:27
Давайте напишем 1800
00:39:32
год и Давайте напишем какой-нибудь
00:39:37
2004 это тоже Високосный год Ну а
00:39:44
2003 он не будет являться високосным А в
00:39:48
принципе мы можем сделать следующим
00:39:52
образом мы можем убрать вот этот но ипи
00:39:56
следующим образом If not E раз 4
00:40:03
и вот этот ноль убрать вот таким образом
00:40:08
И здесь тоже сделать
00:40:13
отрицание Давайте проверим
00:40:17
а год невисокосный
00:40:21
2004
00:40:22
високосные
00:40:25
двухтысячные
00:40:26
високосный и
00:40:28
1800 это не Високосный год Да всё
00:40:35
правильно Какой самый востребованный
00:40:38
язык который нужно знать всем это
00:40:41
конечно же Python но на втором месте
00:40:43
английский в процессе обучения любого
00:40:45
программиста возникает момент когда ты
00:40:47
просто не можешь найти информацию к
00:40:49
сожалению или к счастью большая часть
00:40:51
информации по программированию на
00:40:53
английском языке без знания английского
00:40:55
невозможно можно расти в it профессии
00:40:58
Если ты хочешь выучить английский до
00:41:00
уверенного уровня чтобы найти работу
00:41:02
мечты есть отличный курс от команды
00:41:05
skyeng и это не просто курс по
00:41:07
английскому языку это сфокусированная
00:41:09
под ваши цели обучение с полным
00:41:11
сопровождением от прокачки языка до
00:41:13
трудоустройства за 3-6 месяцев тебя
00:41:16
научат общаться с командой и
00:41:17
стейкхолдерами проводить командные
00:41:19
собрания отстаивать свои идеи разрешать
00:41:21
конфликты грамотно и ёмко писать письма
00:41:25
А самое важное помогут правильно
00:41:27
оформить LinkedIn и резюме проведут
00:41:30
тренировочные собеседования и научат
00:41:32
вести переговоры о зарплате в общем
00:41:35
сделают всё чтобы тебя хотели
00:41:40
сханс еся на диагностику своего it
00:41:44
английского языка по ссылке в описании
00:41:46
или QR коду и забирай подборку самой
00:41:49
актуальной лексики которую ты сможешь
00:41:51
тренировать в бесплатном тренажёре от
00:41:53
skyeng прокачай язык чтобы Never
00:42:05
строки Давайте поподробнее Познакомимся
00:42:08
с ними Давайте начнём с того как
00:42:11
объявляется строка строка объявляется
00:42:13
следующим образом переменная My
00:42:17
string равно Hello world как мы уже
00:42:21
делали много раз в двойных кавычках
00:42:24
объявляем е также строку можно Объявлять
00:42:27
в одинарных
00:42:28
кавычках то есть вот это будет
00:42:32
абсолютным
00:42:34
эквивалентом вот такого
00:42:37
Давайте исполним чтобы убедиться что всё
00:42:41
работает да При этом бывает иногда что
00:42:44
нужно сделать так чтобы мы
00:42:47
э присвоили переменный какой-то большой
00:42:51
текст а делается это следующим образом
00:42:55
а-а
00:43:06
три двойных кавычки и давайте сейчас
00:43:10
скопирую сюда какой-то большой
00:43:14
текст и Давайте
00:43:17
его
00:43:19
напечатаем в
00:43:21
терминал строки Также можно складывать
00:43:26
друг с
00:43:27
другом пусть у нас есть
00:43:33
First Last name SM и нам нужно полное
00:43:38
имя мы берм и
00:43:40
складываем First name плю Last Давайте
00:43:45
посмотрим что
00:43:49
получилось э СМИ не хватает пробела Ну
00:43:54
просто Давайте его сюда добавим
00:44:00
Да вот так лучше бывают случаи когда нам
00:44:02
нужно узнать длину строки это делается
00:44:07
встроенной функции
00:44:15
Len 11
00:44:18
символов Давайте проверим чему будет
00:44:21
равна длина пустой
00:44:25
строки
00:44:26
она равна конечно же нулю иногда бывает
00:44:29
так что нам нужно из численного типа
00:44:32
перевести в строковые это делается с
00:44:34
помощью ключевого слова стр допустим у
00:44:38
нас есть
00:44:40
число и нам нужно сделать из него
00:44:51
строку Давайте
00:44:53
проверим
00:44:54
Type объекта myst My
00:44:59
string
00:45:01
А класс стр То есть это строка сейчас
00:45:06
а нам также Иногда нужно обратно сделать
00:45:10
из строки число а это делается с помощью
00:45:15
ключевого слова
00:45:20
int и сюда
00:45:24
а льём строку
00:45:31
10 typ
00:45:34
и это число а что будет если передать
00:45:40
в функцию in какую-то какое-то
00:45:43
нерелевантно число например передадим
00:45:48
туда программа удт с ошибкой и
00:45:51
интерпретатор напишет вам что вы туда
00:45:54
передали значение это важно например
00:45:57
Когда нам нужно из
00:46:00
инпута из функции Input взять какое-то
00:46:03
число
00:46:04
А например
00:46:12
мы делаем сообщение пользователю введите
00:46:16
число и Давайте посмотрим
00:46:18
а что какого типа значения нам вернёт
00:46:22
функция
00:46:24
input
00:46:26
так число
00:46:29
10 и нам вернулся класс string мы можем
00:46:35
очень легко это
00:46:37
сделать превратить его в число просто
00:46:39
вот
00:46:40
здесь сделаем int функцию int уберём
00:46:44
вызов вот этой функции А и Давайте
00:46:48
посмотрим что
00:46:50
получится 10 и всё сейчас у нас в
00:46:54
переменной My string находится число
00:46:57
Давайте вот такую задачу решим А у нас
00:47:00
есть какое-то
00:47:02
число очень большое и нам нужно найти
00:47:05
количество цифр в этом числе
00:47:07
А пусть число будет
00:47:14
равно 2 в степени
00:47:17
1000 Какое количество цифр в числе 2 в
00:47:22
степени чтобы узнать это онь легко мы
00:47:26
переводим Big integer в строку и то что
00:47:31
получилось просто пуля функцию
00:47:40
Len Давайте посмотрим сколько
00:47:43
получится 302 цифры в числе 2 в степени
00:47:48
1000 что ещё можно делать со строками
00:47:52
есть оператор in который помогает найти
00:47:55
вхождение
00:47:56
в року Например у нас есть строка Hell
00:48:04
World и нам нужно определить Входит ли
00:48:08
слово
00:48:10
hello в строку My string мы пишем Print
00:48:15
Hell in my STR а вернётся буле значение
00:48:22
и ВН момен этот поиск регистра зависимый
00:48:27
То есть если мы введём Hello с маленькой
00:48:31
буквы то будет fse у строк Есть огромное
00:48:35
количество методов которые помогают
00:48:39
делать нам какой-то функционал например
00:48:42
какую-то строку нам нужно написать
00:48:45
капсом для этого есть
00:48:50
метод У нас есть
00:48:54
какая-то имя написать
00:48:57
капсом Print My string и метод
00:49:01
uper и обязательно чтобы исполнить этот
00:49:04
метод нужно написать открывающуюся и
00:49:07
закрывающуюся
00:49:11
скобку получилось elis если у нас
00:49:15
наоборот строка написана капсом а нам
00:49:18
нужно сделать
00:49:21
Аа прописные буквы мы используем метод
00:49:24
lower
00:49:26
иногда строка к нам приходит с лишними
00:49:31
пробелами например вот у нас есть
00:49:33
пробелы в начале Hello
00:49:37
world и ещё несколько пробелов в конце
00:49:40
нам нужно эти пробелы
00:49:43
обрезать для этого есть метод стрип
00:49:47
Давайте чтобы определить что он работает
00:49:50
мы выведем
00:49:52
длину
00:49:54
строки тем как этот метод применим а
00:49:58
потом длину
00:50:01
строки после применение метода
00:50:10
стрип в первом случае длина строки 21
00:50:13
вместе вот с этими
00:50:15
пробелами
00:50:17
а во втором случае 13 заметьте
00:50:21
внутренний пробел метод стрип не убирает
00:50:23
он убирает только пробелы справа и слева
00:50:26
иногда нам нужно заменить
00:50:28
какое-то слово или какие-то символы
00:50:31
внутри строки а для этого есть метод
00:50:34
устк
00:50:37
replace
00:50:39
А в метод replace в
00:50:43
начале прокиды аргумент это строка
00:50:46
которую нужно заменить Пусть эта строка
00:50:49
будет World и заменим её на строку
00:50:54
Python
00:50:56
исполним Hello Python получилось в
00:50:59
строках Иногда нужно определить
00:51:02
количество символов А например Давайте
00:51:05
определим количество символов
00:51:08
а маленькой буквы английской L для этого
00:51:12
используется метод
00:51:16
Count и в качестве аргумента в этот
00:51:19
метод пробрасывается тот символ или
00:51:22
сочетание символов который мы хотим
00:51:24
определить количество
00:51:27
букв L 3 А например сочетание букв л с
00:51:32
вместе с буквой
00:51:35
R
00:51:37
одно Ну и Давайте какой-нибудь символ
00:51:41
а которого нет в строке ноль иногда
00:51:45
пользователь может нам прислать какие-то
00:51:47
данные и нам нужно определить в строке
00:51:50
находятся
00:51:52
цифры или
00:51:54
нет для этого есть метод из
00:51:58
digit наша строка
00:52:07
10 True а допустим мы
00:52:12
сюда добавим X и получится false а для
00:52:17
чего нужен этот метод допустим у нас
00:52:19
есть а
00:52:22
какой-то какая-то переменная inte
00:52:24
которая получается из инпута если мы
00:52:30
а сразу же сделаем int и пользователь
00:52:36
забьёт туда допустим какое-то строковое
00:52:42
значение допустим
00:52:44
X
00:52:46
то исполнение программы упадёт с ошибкой
00:52:49
так вот чтобы такого не произошло мы не
00:52:51
делаем здесь
00:52:53
int мы
00:52:55
сначала
00:52:58
проверяем
00:53:00
что внутри переменной integer только
00:53:05
цифры а
00:53:07
потом делаем так что переменная
00:53:11
integer становится
00:53:14
числом то есть мы засовывая в функцию
00:53:18
int саму переменную
00:53:22
инра и Давайте здесь
00:53:28
в
00:53:29
конце выведем в терминал Type переменной
00:53:35
inte А да я забыл дто
00:53:41
здесь так я вбиваю число допустим это
00:53:44
будет
00:53:45
10 да В итоге у нас в переменной inte
00:53:48
кла int Но если я вобью какую-то строку
00:53:51
например X то в итоге вот строчка кода
00:53:55
не исполнилась и у нас в переменной
00:53:57
integer лежит строка очень частая Задача
00:54:01
В пайтоне Когда в строку Нужно вставить
00:54:04
какие-то
00:54:06
данные эта задача называется
00:54:09
форматированием допустим у нас есть name
00:54:13
elice H =
00:54:16
25
00:54:19
и нам нужно написать строку Hello My
00:54:23
name is name и My H is H А как это
00:54:29
делается это делается Вот так
00:54:32
перед кавычками первыми ставится буква
00:54:37
F и дальше
00:54:41
переменные можно класть
00:54:43
в фигурные
00:54:49
скобки My name is
00:54:54
name
00:54:56
и
00:55:02
я Вот
00:55:04
столько вот такой возраст у
00:55:08
меня А причём смотрите у меня в рамках
00:55:13
строки использовано использованы
00:55:16
одинарные кавычки А если я вот здесь
00:55:20
поставлю одинарные
00:55:23
кавычки то
00:55:25
исполнение моей программы
00:55:28
ут Поэтому если вы хотите одинарные
00:55:31
кавычки поставить то их то всю строку
00:55:33
нужно Объявлять в двойных кавычках
00:55:36
Давайте посмотрим что
00:55:42
вывелось если мы сюда напишем допустим
00:55:48
Саша то строка изменится причём Если у
00:55:52
вас есть какие-то численные переменные
00:55:56
допустим x = 10 Y =
00:55:59
5 и вам нужно вывести допустим чего Чему
00:56:06
равно x П Y и X Умно на Y мы пишем
00:56:23
следующее
00:56:32
произведение X у y Давайте посмотрим что
00:56:36
получилось Да всё верно Давайте ещё раз
00:56:39
А сделаем задачу с как будто бы
00:56:43
пользователь вводит нам строковое
00:56:44
значение и мы приводим его к числовому и
00:56:47
если оно не приводится к числовому то мы
00:56:49
пользователю должны сказать что такое-то
00:56:51
значение не является цифрами А сделаем
00:56:53
это с помощью формати
00:56:56
вот у нас значение
00:57:01
string
00:57:06
Number если My string из
00:57:12
digit то давайте введём переменную My
00:57:21
integer
00:57:23
и
00:57:27
и
00:57:32
иначе
00:57:44
строка Давайте поэкспериментировать
00:57:47
число
00:57:49
10 А да В итоге исполнение перешло сюда
00:57:53
и переменная My integer напечатала если
00:57:57
мы какую-то строку введём то мы видим
00:58:01
что программа подсказывает нам что это
00:58:04
не число небольшая
00:58:06
домашка Прочитайте сами про метод строк
00:58:09
формат Вам нужно будет загуглить а
00:58:13
гуглить можно по-русски если вы знаете
00:58:15
английский Хотя бы даже чуть-чуть я
00:58:17
советую гуглить сразу же по-английски у
00:58:19
вас будет Google выдавать вам какие-то
00:58:22
статьи там будут снипет коды по сним
00:58:24
кода всё всегда понятно что делает тот
00:58:27
или иной метод И вам нужно прочитать про
00:58:31
форматирование через символ процент и
00:58:35
загуглить можно вот так как показано на
00:58:41
слайде скопируйте примеры из статей и
00:58:44
как-то Поиграйте с ними что там
00:58:50
происходит Итак дальше наше написание
00:58:54
кода в в браузере закончилось и Мы
00:58:56
переезжаем на IDE IDE - это
00:58:59
интегрированная среда разработки это
00:59:01
такая программа которая написано
00:59:03
специально чтобы вам было удобно писать
00:59:07
код я сейчас покажу процесс установки
00:59:10
языка и IDE сначала на Windows а потом
00:59:13
на Маке тайм-коды расположены вот здесь
00:59:16
в зависимости от того какая у вас
00:59:18
система переходите туда ссылки из этой
00:59:20
части вы найдёте в разделе ссылки
00:59:24
использую в курсе заходим на сайт
00:59:27
python.org и качаем последнюю стабильную
00:59:30
версию языка работать нужно всегда на
00:59:33
последней стабильной
00:59:35
версии жмём установить обязательно
00:59:38
ставим Галку добавить файл Pon Pass и
00:59:42
нажимаем Install Now ждём установки и
00:59:46
нажимаем вот эту опцию disable Pass L
00:59:51
limit закрываем дальше идм
00:59:55
Community Edition Community Edition -
00:59:58
это бесплатная версия Но в ней есть весь
01:00:01
функционал который нам сейчас
01:00:04
понадобится обязательно Community
01:00:06
Edition находим в списке скачиваем
01:00:09
скачалось открываем установщик Я
01:00:11
рекомендую использовать именно pch Как
01:00:15
по мне это топовая среда разработки я
01:00:17
сам работаю в пайчарме только в
01:00:20
профессиональной версии установка пошла
01:00:23
дожидаемся её
01:00:26
запускаем P Charm что мы делаем дальше
01:00:29
мы идём на диск C и создаём папочку
01:00:33
Python Projects в этой папочке будут
01:00:35
храниться наши проекты на
01:00:38
питоне и скачиваем с моего репозитория
01:00:42
ссылка Там же в ссылках которые
01:00:44
используются в курсе в описании видео
01:00:48
качаем
01:00:49
архив и распаковываем его в нашу
01:00:53
папку
01:00:58
запускаем P
01:01:02
ARM новый
01:01:05
проект указываем папку которую мы только
01:01:10
что создали с нашим проектом Python
01:01:13
Projects Python Beginner cse дальше
01:01:16
должно быть выбрано создание новой среды
01:01:20
разработки используя Virtual enf всё
01:01:23
должно быть ровно так как на моём экране
01:01:26
это очень важно потому что под каждый
01:01:28
проект будет создаваться новая среда
01:01:31
разработки это важно чтобы Например у
01:01:34
вас не перепутались пакеты или вы могли
01:01:37
работать на пайтоне разных версий и так
01:01:40
далее и нажимаем
01:01:43
Create Create From existing
01:01:49
Source всё открылся наш код и мы можем
01:01:55
работать на Windows если вы используете
01:01:58
macos как я то также идём на сайт
01:02:01
python.org downloads скачиваем свежий
01:02:04
Python всё он скачался открываем папочку
01:02:08
так он у меня уже скачен
01:02:12
дважды экран инсталляции contin
01:02:17
continue continue
01:02:21
AG
01:02:23
continue а здесь нас система просит
01:02:27
ввести пароль вводим пароль и
01:02:30
устанавливаем Soft ждём пока загрузчик
01:02:33
на завершит
01:02:37
установку так вот у нас появилась
01:02:39
Папочка можно её
01:02:42
Закрыть всё Close и
01:02:46
удаляем наш установщик дальше идём
01:02:50
и скачиваем pycharm Community
01:02:58
Edition так это P Charm Professional вот
01:03:01
Community
01:03:03
Edition нажимаем скачать Всё пошло
01:03:06
скачивание нажимаем
01:03:10
установить переносим в папку
01:03:16
applications так всё установка
01:03:19
завершилась закрываем открываем P Charm
01:03:22
Community Edition
01:03:27
нажимаем
01:03:31
Open pycharm загрузился дальше идём в
01:03:35
мой github репозиторий и скачиваем
01:03:38
Python
01:03:40
beginners нажимаем download Zip
01:03:45
скачался сразу же распаковываем его я
01:03:48
создал специальную папку Python Project
01:03:51
она уже у меня создана Я там работаю и Я
01:03:54
просто переношу вот эту папку сюда
01:03:58
Python beginners cse Main у нас открыт
01:04:01
pycharm Community Edition а нажимаем
01:04:04
новый проект дальше выбираем путь к
01:04:08
нашей папке Вот она Python cse Main Open
01:04:13
обязательно выбираем New environment А
01:04:17
вот у меня здесь так как у меня много
01:04:19
версий пайтона установлено он по
01:04:21
умолчанию выбрал 3.9 А я хочу 312 это
01:04:25
интерпретатор который мы скачали вот
01:04:27
только что у вас скорее всего
01:04:29
а этот интерпретатор будет выбран по
01:04:33
умолчанию и нажимаю Create Create From
01:04:37
existing sources и всё Мой проект
01:04:40
загрузился в нём сейчас нужно работать
01:04:43
Пойдёмте к следующему
01:04:49
модулю Итак открыт я сразу же поставил
01:04:54
чтобы масштаб текста был удобный для вас
01:04:57
и вы могли это смотреть где-нибудь на
01:04:58
мобиле Что из себя представляет pchar
01:05:01
слева у нас расположена структура папок
01:05:05
здесь их 30 столько же сколько у нас
01:05:08
модулей в курсе а здесь есть папка VF
01:05:11
где лежит Virtual environment пайтона А
01:05:16
эту папку нам трогать не надо Ну и
01:05:19
какие-то служебные файлы расположены
01:05:23
а они тоже вас не должны беспокоить А мы
01:05:27
сейчас на седьмой теме
01:05:31
списки весь код который я расскажу в
01:05:34
рамках модуля списки lists
01:05:37
А есть в
01:05:39
файлах но я советую использовать их эти
01:05:44
файлы позже а потому что А лучше писать
01:05:49
вместе со
01:05:50
мной Я создам новый файл э
01:05:54
нажимаете делаете двойной Клик New
01:05:58
Python
01:05:59
File Я назову его Lesson УК Ну что
01:06:03
списки поехали а что такое списки а
01:06:07
списки - это структура которая
01:06:09
используется для хранения упорядоченных
01:06:11
последовательностей
01:06:13
А давайте создадим
01:06:17
mylist А давайте нормально назовём
01:06:20
переменную frs и создадим список фруктов
01:06:27
Apple банана и
01:06:31
черри и выведем этот список чтобы
01:06:35
запустить программу в пайчарме вот здесь
01:06:38
есть такая Зелёная клавиша она есть вот
01:06:40
здесь Run lon и
01:06:44
справа более бледным шрифтом расположен
01:06:48
H на Маке это Ctrl R на Windows Скорее
01:06:54
всего будет другой ке я запускаю по
01:06:56
хокею но можно нажимать А по нажатию
01:06:59
кнопки нажимаем кнопку и наш файл
01:07:04
исполнился и вывел список Apple Banana
01:07:08
Cherry списки можно создавать по-другому
01:07:11
А например
01:07:15
через ключевое слово лист исполняем
01:07:19
функцию лист и печатаем получится просто
01:07:24
пустой
01:07:26
список Да всё видим он показался в
01:07:29
консоли Давайте вернём список Fruits
01:07:33
А у списка есть длина чтобы узнать длину
01:07:39
списка нужно вызвать встроенную функцию
01:07:42
Len и передать туда
01:07:47
список он равен три по количеству
01:07:50
элементов в списке В списке а могут
01:07:52
лежать не только однородные данные
01:07:56
например сейчас вот здесь лежат только
01:07:59
строки в списке могут
01:08:02
быть как
01:08:08
строки так и одновременно
01:08:11
инты Одновременно
01:08:15
флоты одновременно
01:08:19
бу какие-то значения
01:08:22
одновременно
01:08:24
списки и так далее То есть Python
01:08:28
позволяет это делать но так лучше не
01:08:34
делать лучше держать в списке какой-то
01:08:36
однородный тип
01:08:40
данных Да исполнили код э получили в
01:08:44
терминале
01:08:45
а наш
01:08:47
список списки можно сравнивать друг с
01:08:51
другом например
01:08:54
У нас есть Вот такой список Давайте
01:08:58
создадим mylist 2 который будет равен 1
01:09:02
3
01:09:03
2 и список 3 который такой же как список
01:09:14
о Давайте сравним список один и список
01:09:21
д они не равны
01:09:24
потому что как я уже сказал список - это
01:09:27
упорядоченная последовательность и если
01:09:29
второй элемент списка оди равен двум а
01:09:33
второй элемент списка 2 равен ТМ то
01:09:37
списки не равны а Давайте сравним
01:09:41
список оди и список
01:09:46
ри мы получили списке можно передавать
01:09:50
функцию Bull чтобы использовать их в
01:09:54
выражениях с If А например
01:09:59
Bull от пустого списка будет fse а Бул
01:10:05
от списка в котором есть хотя бы один
01:10:08
элемент и это даже может быть ноль будет
01:10:11
True выводим видим false True Когда у
01:10:15
нас есть список мы можем посмотреть
01:10:18
содержится ли то или иное значение в
01:10:22
списке
01:10:24
это делаем с помощью ключевого слова
01:10:31
in исполняем получаем
01:10:35
True Давайте попробуем найти в списке
01:10:38
какой-то другой
01:10:45
фрукт получаем на банана True на
01:10:49
watermelon false в списке Также можно
01:10:54
инициировать по-другому допустим у нас
01:10:56
есть какие-то переменные
01:11:01
с строками и нам нужно создать из них
01:11:04
список frs мы делаем вот так просто
01:11:09
перечисляем переменные в квадратных
01:11:17
скобках и Давайте затим
01:11:21
их ВС смотрим в терминал
01:11:24
да получилось именно то что мы ожидали
01:11:26
списки можно составлять из строк
01:11:28
допустим у нас есть переменная Word где
01:11:31
лежит строка
01:11:33
Hello и мы делаем следующим образом My L
01:11:38
L и в функцию лист передаём переменную
01:11:44
Word принти My L и
01:11:47
видим каждую
01:11:51
букву каждый символ из строки Hello
01:11:55
Python вывел в отдельный элемент списка
01:11:58
списки Также можно складывать друг с
01:12:06
другом пусть у нас есть переменная
01:12:08
mylist оди где лежат список 1 2
01:12:13
3 и list 2 где лежат список 4 5 6
01:12:20
давайте сделаем mylist 3 который равен
01:12:24
mylist 1 П mylist
01:12:27
2
01:12:31
принти получаем список от одного до
01:12:34
шести у списков есть определённое
01:12:39
количество методов как и у
01:12:42
строк Давайте опять же возьмём
01:12:47
список с фруктами и допустим нам в него
01:12:51
нужно
01:12:52
добавить ещё один
01:12:56
фрукт мы воспользуемся методом
01:12:59
upend и добавим
01:13:04
watermelon
01:13:05
прин фрукты Да видим watermelon
01:13:10
находится в нашем списке Обратите
01:13:13
внимание что изменился изначальный
01:13:15
список который мы инициировали в первой
01:13:17
строке это очень отличает списки от
01:13:20
строк Например если мым строки
01:13:26
и попробуем сделать следующее
01:13:29
А мы заменим слово World словом
01:13:48
Python Давайте затим My string и
01:13:54
в следующей строке
01:14:00
затим первоначальный объект My string
01:14:04
первоначальная переменная осталась
01:14:06
неизменной Вот этот который происходит
01:14:09
здесь был присвоен в Новую переменную
01:14:11
New string со списками же всё происходит
01:14:14
по-другому
01:14:15
изменения идут в первоначальной
01:14:22
переменно
01:14:23
это метод Pop Давайте
01:14:40
присвоить переменную FR и
01:14:44
Fruits
01:14:46
а Обратите внимание метод
01:14:50
Pop взял последний элемент списка
01:14:53
удалил его из списка и присвоил в
01:14:55
переменную
01:14:57
В итоге наш список получился из двух
01:15:00
элементов А строка ри была присвоена
01:15:04
переменной FR мы можем не
01:15:08
присваивать то что вернул метод поп а
01:15:11
просто написать Вот так вот
01:15:14
и первоначальный список также
01:15:17
трансформируется допустим у нас есть ещ
01:15:20
один
01:15:22
список
01:15:24
в котором перечислены
01:15:26
другие фрукты И нам нужно сделать так
01:15:30
чтобы добавить второй список к первому а
01:15:34
для этого есть метод
01:15:38
extend
01:15:40
extend FR
01:15:43
2 и Давайте за принти
01:15:47
frs Да список получился уже из п
01:15:50
элементов и мы добавили второй список
01:15:52
перво Бывает такая задача что список
01:15:56
нужно
01:15:59
развернуть И для этого есть метод
01:16:04
reverse а Обратите внимание А мы
01:16:09
трансформировать список Так что он
01:16:11
начинается с строки Cherry и
01:16:14
заканчивается строкой
01:16:17
Apple также частотная задача когда
01:16:21
список нужно отсортировать
01:16:24
Давайте создадим список с рандомными
01:16:31
значениями mylist sort и Print My
01:16:36
list значение
01:16:39
отсортированы по возрастанию если нам
01:16:42
нужно отсортировать список по убыванию
01:16:45
то мы передаём аргумен
01:16:48
reverse True функцию
01:16:52
sort и
01:16:55
получаем сортировку по убыванию также
01:16:59
Бывает такое что к нам приходит какая-то
01:17:00
строка и нам нужно создать список из
01:17:06
слов разделённых пробелов из этой строки
01:17:09
это делается очень легко с помощью
01:17:13
строкового метода
01:17:15
слит myl ра
01:17:20
My - это разделить и нам
01:17:23
нужно аргументам передать
01:17:26
разделитель в данном случае наш
01:17:29
разделитель - Это
01:17:31
пробел и принти My
01:17:34
list у нас получился список из четырёх
01:17:37
слов наоборот собрать из списка строку
01:17:42
со словами разделённым пробелами можно
01:17:44
следующим
01:17:46
образом Давайте создадим переменную
01:17:48
Joint
01:17:51
string My
01:17:55
и дальше следующим нам нужно разделитель
01:17:58
наш пробел Jo и сюда
01:18:02
передаём My list и Давайте запри Joint
01:18:09
string Да строка собралась заново My
01:18:14
списки можно передавать в различные
01:18:17
встроенные функции которые работают с
01:18:20
числами
01:18:21
строками и так далее но нам сейчас более
01:18:25
наглядно можно посмотреть их работу на
01:18:27
числах Давайте создадим Рандомный список
01:18:31
из
01:18:39
интов узнаем Какой максимальный элемент
01:18:43
в
01:18:45
списке
01:18:47
14 Также можно узнать минимальный
01:18:51
элемент
01:18:54
и
01:18:55
даже сумму
01:19:00
элементов минимальный элемент единичка
01:19:02
сумма элементов 48 что будет Допустим
01:19:05
если мы хотим узнать сумму вот в таком
01:19:08
списке в котором есть какая-то строка
01:19:12
что будет ну собственно будет ничего наш
01:19:15
код упадёт с ошибкой потому что и строка
01:19:19
не
01:19:20
складываются
01:19:21
ста используется для бэнда для того
01:19:25
чтобы стать энд разработчиком на Python
01:19:27
нужно намного больше чем изучить
01:19:29
синтаксис я написал roadmap потому как
01:19:32
стать backend разработчиком на Python
01:19:34
почти без вложений денег со всеми
01:19:36
ссылками на бесплатные материалы и
01:19:39
последовательностью что учить и в каком
01:19:41
порядке главное в нём что я не только
01:19:43
Рассказываю что надо изучить и сделать
01:19:46
но и то что не надо учить и тратить на
01:19:49
это время ссылка на гайд в моём Telegram
01:19:52
канале будет в описании Ну и если
01:19:54
окажешься там подпишись погнали дальше к
01:20:01
курсу следующая тема индексы и срезы
01:20:04
программисты считают элементы с нуля а
01:20:07
не с единицы как в обычной жизни зачем
01:20:10
это делается это достаточно тонкий
01:20:13
вопрос но он помогает программистам
01:20:16
работать эффективней вот смотрите
01:20:19
помните когда мы решали задачу с э
01:20:23
домами давайте я напомню и покажу код
01:20:27
код получился вот таким и мы то
01:20:29
прибавляли то отнимали единицу причём
01:20:32
эта единица очень путает нас вообще
01:20:36
непонятно код не воспринимается
01:20:39
интуитивным
01:20:41
Посмотрите на вот эти два дома Вот
01:20:44
первый дом из нашей домашние задачи про
01:20:48
квартиры нумерация и подъезда начинается
01:20:51
с единицы и квартира начинается с
01:20:53
единицы и на второй дом Обратите
01:20:57
внимание в этом доме живут программисты
01:20:59
и нумерация здесь квартир начинается с
01:21:02
нуля и нумерация подъездов начинается с
01:21:04
нуля а также Обратите внимание что если
01:21:06
здесь нумерация этажей начинается с
01:21:09
первого второй третье четвёртый и пятый
01:21:14
то в доме для программистов нумерация
01:21:16
будет начинаться с нулевого этажа и
01:21:19
тогда задача для нахождения этажа и
01:21:23
подъезда код для этой задачи становится
01:21:26
очень лёгким допустим нам нужно найти
01:21:30
квартиру 19 квартира 19 будет
01:21:35
располагаться на четвёртом этаже
01:21:38
последнем доме в обычном доме Это был бы
01:21:41
пятый этаж и в нулевом подъезде а
01:21:46
Давайте попробуем это сделать Мы просто
01:21:49
убираем все вот эти единицы
01:21:51
которые
01:21:53
не прибавляют ясности нашего кода а то
01:21:55
что не прибавляет ясности для нашего
01:21:57
кода нужно
01:22:00
выкидывать и Давайте попробуем
01:22:03
получилось что подъезд ноль этаж 4
01:22:07
допустим квартира
01:22:10
99 расположено в последнем четвёртом
01:22:14
подъезде и на этаже 4 то есть вот она
01:22:18
Давайте найм
01:22:20
квартиру 80 она вот зде Вот это
01:22:25
четвёртый подъезд первый
01:22:29
этаж Всё верно только этаж нулевой не
01:22:33
первый и именно для такого удобства
01:22:36
чтобы не маяться с вот этими единичка
01:22:38
программисты считают с нуля Так
01:22:41
давайте создадим опять-таки
01:22:45
фа
01:22:46
lon в папке
01:22:49
и сделаем вот лист с
01:22:57
фруктами и попробуем взять элемент с
01:23:01
индексом ноль синтаксис у индексов - это
01:23:06
квадратные скобки рядом со списком или
01:23:10
какой-то другой
01:23:11
последовательности с которой вместе с
01:23:13
которой можно использовать
01:23:18
индексы элемент Но - это Apple индексы
01:23:22
считат по следующим правилам допустим у
01:23:24
нас есть строка Hello буква H будет
01:23:28
иметь нулевой индекс буква и первые
01:23:32
второй третье четвёртые а также можно
01:23:36
использовать отрицательные значения то
01:23:38
есть возможный диапазон значений от
01:23:41
минус длины строки до длины строки -1 то
01:23:45
есть от мину доче Давайте попробуем это
01:23:49
сделать вот у нас здесь четыре элемента
01:23:53
а
01:23:54
Apple Можно вызвать по индексу ноль или
01:23:58
по
01:24:00
индексу
01:24:04
-4 Всё верно Давайте какие-то другие
01:24:07
значения достанем из индексов
01:24:11
допустим напечатаем что у нас находится
01:24:13
в индекс 3 это watermelon но элемент 0
01:24:19
1 2 и 3 Что будет если мы вызовем
01:24:23
элемент с индексом 4ре которого здесь
01:24:27
нет интерпретатор скажет нам об
01:24:30
этом либо если мы вызовем
01:24:34
-5 интерпретатор также Рейз нет ошибку
01:24:38
как ещё можно использовать индексы мы
01:24:41
можем делать Вот такое присвоение как в
01:24:44
переменную в список допустим здесь у нас
01:24:49
будет
01:24:51
pineapple Давайте заприте list Fruits а
01:24:55
вместо элемента Apple у нас там лежит
01:24:59
элемент pineapple а с помощью индексов
01:25:01
Также можно сделать такие вот
01:25:03
перестановки элементах в одном списке
01:25:06
например Нам нужно поменять местами
01:25:09
нулевой элемент И
01:25:11
третье мы напишем следующим
01:25:21
образом
01:25:30
всё А крайние элементы были заменены
01:25:33
средние элементы А так и остались на
01:25:35
месте
01:25:37
следующее слайсы Для чего нужны слайсы а
01:25:40
допустим у нас есть а вот такой вот лист
01:25:44
с числами и
01:25:47
э мы хотим выбрать первые Пять элементов
01:25:54
мы записываем следующим
01:25:58
образом первые Пять элементов выбраны то
01:26:01
есть вернулся список из первых пяти
01:26:05
элементов изначальной последовательности
01:26:08
их можно присвоить в новый
01:26:16
список и этот список окажется в новой
01:26:19
переменной самое главное нужно знать про
01:26:23
слайсы это то что слайс - это всегда
01:26:26
полуоткрытый интервал то есть первое
01:26:30
значение которое вы указали в
01:26:34
слайсера это ноль который находится вот
01:26:37
здесь а третье значение - это тройка не
01:26:41
будет возвращена её не будет в конечной
01:26:44
выборке например
01:26:46
чтобы нам в слайс возвратить значение
01:26:50
полного списка нужно уть 10 в конце
01:26:54
потому что у нас тут 10 элементов либо
01:26:58
можно записать следующим образом вместо
01:27:00
здесь написать
01:27:04
lers Вот также мы видим нам вернулся
01:27:07
полный список А вот эту
01:27:09
запись вообще можно если у вас слайс
01:27:13
начинается с нуля то Ноль можно опустить
01:27:15
он подставит автоматически также
01:27:17
автоматически постави длина списка То
01:27:20
есть в принципе можно
01:27:23
записать Вот так и нам также вернулся
01:27:26
полный список либо если мы хотим
01:27:27
допустим первые Пять элементов
01:27:30
То слайс будет вот
01:27:33
таким слайсы можно сделать с
01:27:37
шагом Например у нас есть слайс 0 и мы
01:27:41
хотим каждый второй элемент в нём мы
01:27:44
ставим ещё одну две точи
01:27:46
и
01:27:51
число у нас получилось 0 2 4 68 Ну и эта
01:27:55
запись конечно же эквивалентна Вот
01:27:58
такой у нас получилось та же выборка
01:28:01
важно знать что
01:28:02
слайсы менее требовательны к индексам
01:28:08
внутри То есть вы допустим можете
01:28:12
сделать вот
01:28:13
так и вернётся пустой список Либо мы
01:28:17
можем указать здесь какое-то число
01:28:21
индекса которого нет например 20 и нам
01:28:25
просто вернулся полный список для
01:28:27
слайсов Также можно использовать
01:28:29
отрицательные значение например сделать
01:28:31
вот
01:28:32
так Но тогда у слайсов начинает быть
01:28:36
очень большая когнитивная сложность Я
01:28:38
рекомендую использовать только
01:28:40
положительные значения в слайса так
01:28:41
будет гораздо легче а слайсы также можно
01:28:44
разворачивать в обратном порядке для
01:28:47
этого нужно применить вот такую запись
01:28:49
исполняем код и как мы видим Мы просто
01:28:51
развернулись список всё что мы делали со
01:28:53
слайдами можно делать и со
01:28:59
строками и Давайте попробуем напечатать
01:29:02
допустим с пятого символа до самого
01:29:06
конца А мы получили всё что после
01:29:11
запятой включительно Допустим можно
01:29:14
сделать вот так и напечатать каждую
01:29:15
вторую букву частенько Python
01:29:19
разработчиков на
01:29:20
собеседование задают такой вопрос
01:29:23
Расскажите о трёх
01:29:25
способах которыми можно развернуть лист
01:29:28
собственно Какие способы А первый
01:29:33
способ мы делали его только что
01:29:38
это использовать вот такой
01:29:48
слайс
01:29:50
а мы получаем развернутый лист второй
01:29:54
способ это использовать
01:29:57
функцию
01:30:01
reverse и Давайте посмотрим что
01:30:04
получится Да всё верно получилось
01:30:06
опять-таки
01:30:07
развёрнутый лист сделать и третий способ
01:30:12
можно использовать встроенную функцию
01:30:20
reversed
01:30:23
revered и туда передаём Numbers А
01:30:26
давайте посмотрим объект Какого типа
01:30:29
получается и за принти его
01:30:36
А получился вот такой клас list reverse
01:30:40
iterator А чтобы из него сделать лист
01:30:44
нужно вот этот вызов обернуть ещё
01:30:46
функцию list и тогда получится то что
01:30:49
нам нужно и это третий способ развернуть
01:30:59
лист следующая тема - это цикл 4 цикл 4
01:31:04
возможно одна из самых частотных
01:31:06
конструкций которые вы будете
01:31:07
использовать в своём коде допустим у нас
01:31:14
есть Вот такой список с именами
01:31:17
файлов и нам нужно обойти каждый из них
01:31:21
и сделать с
01:31:23
ними например давайте для простоты
01:31:26
сейчас выведем их в
01:31:28
терминал для этого мы пишем следующую
01:31:31
конструкцию for filen Обратите внимание
01:31:35
fil name - Это другая переменная она
01:31:38
отличается от filen по fil name in fil
01:31:43
names А дальше мы отделяем внизу блок
01:31:47
кода четырьмя пробелами или
01:31:49
табо и пишем
01:31:52
Print fil name Давайте
01:31:57
запустим каждый фай name был выведен в
01:32:01
терминал каждое исполнение цикла
01:32:03
называется его итераций количество
01:32:06
итераций цикла for равно количеству
01:32:09
элементов в какой-то коллекции которую
01:32:11
вы
01:32:17
перебирается каждый раз с каждой
01:32:20
итерации цикла цикл for Можно также
01:32:23
использовать вместе со
01:32:25
строками Например у нас есть переменная
01:32:30
greeting
01:32:33
приветствие Давайте запри каждый символ
01:32:37
переменной
01:32:39
greeting for char in greeting и Print
01:32:47
char смотрим в
01:32:50
консоль интерпретатор вывел каждый
01:32:54
символ строки Hello world в консоль
01:32:57
естественно внутри итерации можно
01:33:00
сделать гораздо больше вещей тем чем
01:33:03
просто принти каждый символ Давайте
01:33:06
Сосчитай количество букв O в строке
01:33:10
Hello
01:33:11
world давайте сделаем переменную Count O
01:33:16
она равна
01:33:17
0
01:33:20
If равно
01:33:25
Count равно Count П
01:33:31
1 Ну и Давайте внутри блока If ещё запри
01:33:35
Чар чтобы убедиться что туда попали
01:33:37
только буквы O и в
01:33:41
конце
01:33:42
C заприте запускаем вот два раза у нас
01:33:48
написала буква О то есть два раза в этот
01:33:52
блок зашло исполнение кода и в конце
01:33:55
переменная равняется двоечки Обратите
01:33:58
внимание Вот на эту конструкцию эта
01:34:00
конструкция ну не сказать что она
01:34:02
выглядит очень удобно в питоне есть
01:34:06
синтаксический сахар для этой
01:34:07
конструкции синтаксический сахар - это
01:34:10
какая-то конструкция в рамках языка
01:34:12
которая помогает записывать какие-то
01:34:14
частотные вещи быстрее и в питоне есть
01:34:18
такая конструкция То есть если нам нужно
01:34:20
прибавить что к переменной уже
01:34:22
существующем то мы пишем вот
01:34:25
так плюс равно
01:34:28
и то что нам нужно прибавить к
01:34:31
переменной вот получится тоже самое мы
01:34:34
исполнили код заново эта конструкция
01:34:37
выглядит вот так для разных действий
01:34:39
вверху запись без синтаксического сахара
01:34:42
внизу с синтаксическим сахаром эта
01:34:44
конструкция очень помогает сократить код
01:34:48
в программе сделать его более читальным
01:34:50
циклы могут быть вложенными друг в друга
01:34:52
Например у нас
01:34:54
есть вот такая переменная
01:34:59
а список
01:35:06
студентов мы написали цикл
01:35:09
верхнеуровневый и внутри этого цикла
01:35:14
Давайте запретим Student и
01:35:20
внутри
01:35:22
можно написать каждый символ в
01:35:26
переменной
01:35:30
Student исполняем этот код Нам нужен
01:35:32
этот пример чтобы понять Как исполняется
01:35:34
программа в рамках двух
01:35:37
циклов
01:35:38
а сначала придется эс то есть мы сначала
01:35:43
вот здесь затем Эс исполняется
01:35:46
внутренний цикл с переменной в которой
01:35:48
значение Эс и выводится каждая буква
01:35:52
затем цикл после того как он закончился
01:35:54
вот этот внутренний цикл исполнение
01:35:57
переходит к верхнему циклу опять и у нас
01:36:00
переменная Боб и её буквы и так далее
01:36:04
вообще вложенность для циклов это
01:36:07
опасная вещь если мы сделаем
01:36:09
какой-нибудь трёхэтажный цикл и что-то
01:36:12
здесь ещё какой-то ещё фор здесь это
01:36:14
будет нечитаемым такая негласная
01:36:16
договоренность что максимум можно
01:36:18
сделать какой-то один вложенный цикл Но
01:36:21
дальше программу нужно как-то дробить
01:36:23
вместе с циклами используется два очень
01:36:27
важных ключевых слова это continue и
01:36:30
Break допустим у нас есть Вот такой
01:36:32
список и а нам нужно сделать следующее
01:36:36
если число в списке нечётное то мы
01:36:40
выводим его в терминал Если нет то
01:36:44
ничего не
01:36:46
делаем Давайте запишем
01:36:50
это
01:36:54
если число чётное то есть остаток
01:36:57
отделения на два равен нулю то
01:37:00
мы пропустим
01:37:03
цикл и здесь напишем нам этот пример не
01:37:08
лучше всего написан но он очень
01:37:10
показателен чтобы понять вам как
01:37:13
работает конструкция с ключевым
01:37:17
словом Давайте запустим её смотрите что
01:37:20
про з на каждой итерации цикла если это
01:37:25
условие исполняется То есть у нас чётное
01:37:28
число то
01:37:31
слово возвращает нас к циклу for обратно
01:37:35
к следующей и переносит к следующей
01:37:38
итерации если мы в это условие не зашли
01:37:42
то исполнение продолжается вот здесь
01:37:45
и у нас число то есть нечётное которое
01:37:49
не удовлетворяет этому условию выводится
01:37:51
в терминал Это пример использования
01:37:53
ключевого слова continue как
01:37:54
используется ключевое слово Break
01:37:56
допустим нам нужно если число равно 10
01:37:59
просто остановить цикл и не исполнять
01:38:01
его дальше а все числа которые меньше
01:38:04
десяти мы
01:38:08
запри мы делаем
01:38:10
следующее If нам равно 10
01:38:15
Break и
01:38:19
сюда затим
01:38:21
при слове брейк исполнение программы
01:38:23
сразу же выходит из цикла Давайте
01:38:27
посмотрим в Термина в терминале
01:38:29
показались числа до де то есть при
01:38:33
десятке когда была десятка исполнение
01:38:36
зашло сюда Это
01:38:38
было отработал ключевое слово бй и
01:38:42
программа просто вышла из цикла и
01:38:44
продолжила там сво исполнение дальше
01:38:46
функция функция
01:38:50
генерирует
01:38:53
чи как это
01:38:55
происходит Давайте
01:38:58
создадим переменную R object и туда
01:39:01
допустим Range 10
01:39:04
и затим
01:39:08
Range у нас запла Вот такая странная
01:39:11
конструкция то есть от нуля до 10 чтобы
01:39:14
нам иметь доступ непосредственно к
01:39:16
числам
01:39:20
изм сти его в
01:39:33
лист вот у нас получилось получился лист
01:39:36
из вот этого Range Окта А причём
01:39:40
Обратите внимание Как как и в слайса это
01:39:42
полуоткрытый интервал то есть последняя
01:39:45
значение не входит в финальную
01:39:47
совокупность элементов
01:39:49
последовательность Можно также
01:39:52
начать с какого-то числа не только
01:39:54
закончить каким-то числом То есть
01:39:56
например Давайте 11 сделаем и
01:40:00
L My Range вот Обратите внимание
01:40:03
единичка которую мы передавали сюда
01:40:06
входит в лист Ну и собственно десятка
01:40:08
полуоткрытый интервал не входит у Range
01:40:12
может быть шаг какой-то как и со
01:40:14
слайсами то есть сюда вошло каждое
01:40:17
второе число каждое нее ло
01:40:21
может быть убывающей то есть вот сюда мы
01:40:24
передам 10 1 и шаг мину
01:40:31
о Обратите внимание что так же как и с
01:40:34
рейджем с положительным шагом это
01:40:36
полуоткрытый интервал и единичка которая
01:40:38
идёт вот здесь не вошла в финальный ренж
01:40:41
допустим у нас есть вот такая
01:40:44
последовательность из
01:40:46
чисел и нам нужно к каждому числу
01:40:49
привить и изменить список а Давайте
01:40:53
попробуем это сделать в
01:41:04
лоб А что получится получилось
01:41:08
изначальный список это происходит из-за
01:41:11
того что а инто воя переменная не может
01:41:15
меняться в пайтоне мы попозже поговорим
01:41:19
Почему устроено так но тип переменный
01:41:21
список может изменяться по индексу и нам
01:41:24
просто нужно изменить Каждый элемент по
01:41:26
индексу как это сделать мы сделаем
01:41:29
следующим
01:41:30
образом обычно переменную которая
01:41:33
обозначается буков кой I английской это
01:41:37
переменная
01:41:38
идекс дальше мы сюда следующую
01:41:42
конструкцию используем Range а Range
01:41:44
функцию Range мы аргументам передаём
01:41:47
длину нашего массива Давайте просто зам
01:41:51
что у нас в переменной
01:41:53
окажется это индексы нашего массива вот
01:41:57
их тут ше как и количество наших
01:42:00
элементов и мы сделаем следующим
01:42:05
образом Number
01:42:08
и плюс равно 1 и затим
01:42:15
финальный ВС получилось ус Нади
01:42:19
Измени элемента Давайте решим такую
01:42:22
задачу А вот у нас есть такая
01:42:27
строка и нам нужно определить количество
01:42:30
букв
01:42:31
о а также их индексы что мы сделаем мы
01:42:37
создадим ли indexes где будет в итоге
01:42:41
храниться
01:42:42
индексы наших букв создадим переменную
01:42:48
Count которая будет равна нулю
01:42:51
и сделаем следующим
01:42:55
образом in Range
01:42:59
L
01:43:01
тин
01:43:05
если переменная гритинг с этим индексом
01:43:09
То есть буква с этим индексом будет
01:43:12
равна
01:43:14
букве то мы
01:43:16
во-первых изменяем переменную coun на
01:43:19
один а во-вторых в нашу переменную
01:43:24
indexes
01:43:26
кладём этот
01:43:28
индекс и Давайте заприте в конце Count и
01:43:35
ind
01:43:37
А всего букв o2 и лежат они по индексам
01:43:41
4
01:43:42
и8 то есть вот это 0 1 2 3 4 Ну и здесь
01:43:50
в модуле 4 есть вот такое домашнее
01:43:52
задание обязательно Сделайте его вам
01:43:55
нужно запри таблицу умножения построчно
01:43:58
сделать это домашнее задание используя
01:44:00
циклы конечно
01:44:05
же функции мы пользуемся функциями с
01:44:09
самого начала нашего курса потому что
01:44:13
например Print это функция Но это
01:44:16
встроенная функция в язык Python а нам
01:44:19
нужно научиться писать Что такое функция
01:44:21
функция - это блок кода для
01:44:23
многократного повторения Представьте что
01:44:25
у нас есть вот такой код допустим у нас
01:44:28
есть list Numbers 1 и там у нас есть
01:44:32
числа и нам нужно высчитать среднее в
01:44:37
этом списке А как мы найдём его мы
01:44:41
найдём его следующим образом мы сумму
01:44:45
элементов этого списка разделим на длину
01:44:49
этого списка
01:44:52
и Давайте заприте что у нас
01:44:55
получится Т средний элемент равен 3 и
01:44:59
допустим у нас есть две
01:45:01
последовательности у которых нужно
01:45:03
высчитать то же самое у нас есть второй
01:45:06
список список д и Мы также
01:45:21
а в программировании есть
01:45:23
правило расшифровывается оно как repat
01:45:27
не повторяй себя Хороший код написан
01:45:30
Понятно Так что его может прочитать
01:45:31
другой программист а также хороший код
01:45:34
не повторяет себя и чтобы не повторять
01:45:36
себя мы используем функции Давайте
01:45:38
напишем функцию которая находит среднее
01:45:41
вот этот массив оставим точнее так
01:45:45
оставим вот этот массив И вот этот всё
01:45:49
остальное сом напишем функцию А как
01:45:52
пишется функция функции пишется с
01:45:53
помощью ключевого слова Def у функции
01:45:57
должно быть
01:45:59
какое-то осмысленное название например
01:46:01
Давайте назовём её find
01:46:07
average функцию в нашем случае должен
01:46:10
заходить аргумент это какая-то
01:46:13
последовательность Давайте назовём её
01:46:15
Numbers А дальше ставим здесь
01:46:19
двоеточие и здесь вычисляем среднее
01:46:24
Давайте
01:46:25
его вычислим также как мы вычисляли до
01:46:29
этого мы берём Numbers и делим его на L
01:46:35
Numbers Давайте исполним эту функцию и
01:46:38
сделаем следующим образом
01:46:44
присвоил
01:46:47
функции
01:46:49
спиком
01:46:53
исполняем мы
01:46:55
получили мы сделали
01:46:58
ошибку мы не вернули из
01:47:01
функции Вот это значение Что значит
01:47:05
вообще возвращать возвращайте Это значит
01:47:08
что например при присвоении в другую
01:47:10
переменную значение которое мы вычисляли
01:47:13
в этой функции возм сознание кото
01:47:19
мы
01:47:25
Лово и Давайте затим всё получилось что
01:47:29
такое N мы получили N Когда у нас не
01:47:32
было вот этой
01:47:34
строки функция когда нет ключевого слова
01:47:38
возвращает ничего собственно N это
01:47:42
ничего переменную можно вот см
01:47:49
образом мы присвоили N это одно из
01:47:53
ключевых слов в пайне функции без
01:47:55
ключевого слова Бывает но они редкие так
01:48:00
скажем функции в Python ещё отделяются
01:48:03
От остального
01:48:05
кода двумя строками Всё у нас есть
01:48:08
функция find average мы можем передать
01:48:11
сюда там вычислить переменную 2 котора
01:48:18
будет и список Numbers 2 и Давайте вот
01:48:23
здесь через запятую их вычислим да 3 080
01:48:28
давайте сделаем другую функцию которая
01:48:29
сочетает количество гласных в строке
01:48:32
А давайте назовём эту функцию
01:48:35
а Count
01:48:38
wows сюда передаётся какая-то строка
01:48:41
Давайте выпишем э вот эти гласные в
01:48:44
какую-то константу их уберём константы
01:48:47
пишутся а капсом в
01:48:51
пайне и у нас есть в английском языке
01:48:55
Вот такие гласные да стоит не забывать
01:48:57
что в пайтоне всё регистр зависимым и
01:49:00
прописная буква а и заглавная буква а -
01:49:03
это разные буквы переменный у нас будет
01:49:08
которая равна нулю которая будет
01:49:10
подсчитывать значение и мы пишем for in
01:49:18
string If
01:49:21
char in
01:49:26
WS так вот Я вот здесь ошибся
01:49:30
и не записал букву R и в
01:49:35
chars Count прибавляем единичку и в
01:49:40
конце делаем Выходим из этих блоков Они
01:49:44
под отступами просто возвращаем
01:49:49
C
01:49:52
и давайте
01:49:56
сделаем Hell
01:50:00
World и допустим Вот в такой строке
01:50:06
считаем исполняем
01:50:09
А в первой строке три гласных вот мы их
01:50:14
видим
01:50:15
и и здесь 10 гласных если ой 11 гласных
01:50:20
если посчитать то именно так и окажется
01:50:22
а иногда нам нужно сделать какую-то
01:50:25
заглушку например чтобы функция ничего
01:50:27
не исполняла а
01:50:30
давайте сделаем это А вот у нас функция
01:50:34
мы объявим её ничего не будем передавать
01:50:36
в качестве аргументов А и здесь
01:50:43
напишем А давайте исполним её А мы
01:50:47
хотели сделать функцию которая ничего не
01:50:49
делает но она в итоге зант Вот это
01:50:54
значение Да функции без аргументов
01:50:57
вызываются просто синтаксис мы делаем
01:51:00
две скобки обычно чтобы функция ничего
01:51:03
не делала мы передаём туда ключевое
01:51:06
слово па и мы ничего не увидим при
01:51:09
исполнении программы А такие функции
01:51:11
заглушки иногда нужны нам чтобы там мы
01:51:14
пишем какой-то блок кода просто
01:51:16
раскидали название функций ещ не
01:51:19
написали их и просто паса их закрыли
01:51:21
чтобы они просто были у нас в кодовой
01:51:23
базе у функции может быть больше одного
01:51:26
аргумента И когда у нас больше одного
01:51:28
аргумента то у нас возникает Вот такая
01:51:30
проблема А смотрите Давайте пусть у нас
01:51:32
будет а функция
01:51:35
а Format Date А мы будем туда принимать
01:51:39
э день и
01:51:41
месяц и возвращать вот такую строку с
01:51:48
форматированием
01:51:55
и Давайте напишем обязательно когда у
01:52:00
вас будет какой-то общий например проект
01:52:02
то кто-нибудь возьмёт и перепутаешь
01:52:16
и сделает вот так вот в день о даст
01:52:21
месяц А в месяц передаст число пайчарм в
01:52:25
нашем случае подсвечивает аргументы но
01:52:28
это не делают не все IDE которыми можно
01:52:32
пользоваться вот и получится что
01:52:35
а вторая строка
01:52:38
плохая там может также упасть ошибка
01:52:40
Если там в процессе исполнения как-то
01:52:42
там с типами переменных возникнет ошибка
01:52:44
А поэтому что мы делаем вообще мы делаем
01:52:48
две вещи чтобы так было нельзя
01:52:51
перепутать
01:52:53
аргументы во-первых мы прописываем типы
01:52:57
типы В пайтоне прописываются следующим
01:53:00
образом вот смотрите у нас в переменную
01:53:02
Day по-любому зайдёт
01:53:05
число и мы вот таким синтаксисом говорим
01:53:10
интерпретатору что сюда заходит число А
01:53:12
сюда заходит
01:53:17
строка и тогда
01:53:20
вызове вот следующим образом если мы
01:53:23
перепутали
01:53:24
а
01:53:26
переменные то IDE нам подсказывает что
01:53:30
мы ожидали тип int но получили тип
01:53:33
string также во всех вообще проектах в
01:53:36
которых я работаю мы делаем следующую
01:53:38
гигиену мы прямо прописываем аргументы
01:53:42
внутри функции следующим образом а
01:53:46
Day
01:53:48
15 Mon
01:53:52
к и сразу же вызов этой функции очень
01:54:04
наглядется можем передавать первым а
01:54:07
день
01:54:09
вторым
01:54:11
и функция исполнится одинаково в пайне
01:54:15
также есть конструкция которая прямо
01:54:17
заставляет программиста аргумен вот
01:54:21
таким образом что они прописываются явно
01:54:25
А в пайтоне есть такой документ он
01:54:29
называется Zen of Python и одно из
01:54:32
первых правил там явное лучше неявного
01:54:35
мы ставим перед аргументами вот такую
01:54:37
звёздочку и это значит что мы функцию
01:54:40
просто не сможем вызвать вот таким вот
01:54:42
образом мы не сможем передать
01:54:45
туда переменные без наименования и в
01:54:49
процессе выполнения курса в каждой
01:54:52
функции я буду ставить вот эту звёздочку
01:54:56
и Объявлять типы переменных а также тип
01:55:00
возвращаемого значения тип возвращаемого
01:55:03
значения пишется следующим образом перед
01:55:07
двоеточием у функции ставится стрелочка
01:55:09
и сюда вбивается тип возвращаемого
01:55:11
значения То есть если я здесь например
01:55:13
верну какое-то число
01:55:17
то опять-таки мне пока
01:55:20
ожидается тип string но возвращается int
01:55:23
функция кстати ВС равно
01:55:25
исполнится Давайте здесь напишем что у
01:55:28
нас это Day
01:55:31
это функция всё равно используется вот у
01:55:34
нас вернулась единичка Но это
01:55:37
скорее не для интерпретатора а для
01:55:41
другого программиста чтобы он понимал
01:55:42
что за тип вернётся ему при вызове также
01:55:46
функции можно Объявлять дефолтные
01:55:48
аргументы например у нас есть вот такая
01:55:51
функция Custom
01:55:53
greeting и она принимает на вход
01:55:57
следующее
01:55:59
name будет типа string
01:56:02
и greeting А типа string и мы сюда
01:56:07
передаём дефолтный аргумент Пусть
01:56:09
дефолтный аргумент будет Hello и нам
01:56:14
возвратится string мы делаем
01:56:18
Return F переменная
01:56:21
greeting и переменная
01:56:24
name и тогда функцию Можно будет а
01:56:28
вызвать следующим
01:56:34
образом name А пусть будет John и А
01:56:43
давайте а тин
01:56:47
передадим Good morning
01:56:52
но вызывать также мы можем вот без этой
01:56:54
переменной
01:56:56
гритинг и э в первом случае Good joh во
01:57:02
втором случае Hello
01:57:06
дн следующая тема - это область
01:57:10
видимости переменных Давайте напишем вот
01:57:13
такую
01:57:18
функцию и
01:57:20
здесь объявим переменную Local War пусть
01:57:25
её значение будет Вот такой равно вот
01:57:28
такой
01:57:29
[музыка]
01:57:31
строке Давайте заприте эту переменную
01:57:37
и вызовем функцию функция запла вот эту
01:57:42
локальную переменную если мы прямо
01:57:46
сейчас вне вызова функции пытаемся
01:57:50
вызвать вот эту локальную переменную
01:57:55
то наш код упадёт с ошибкой
01:58:00
что Local War is not defined то есть не
01:58:03
определена Local War не определена это
01:58:06
переменная которая определена в теле
01:58:08
функции и вне этого тела мы не можем её
01:58:13
использовать если мы говорим допустим
01:58:15
про цикл и сделаем вот такой простой
01:58:18
цикл
01:58:21
а там что-то здесь
01:58:23
сделаем не знаю давайте заприте и
01:58:27
Давайте цикл поменьше сделаем из трёх
01:58:29
элементов и вот здесь запретим
01:58:33
и это допустимая конструкция но лучше её
01:58:38
никогда не использовать потому что вот
01:58:39
это и всегда будет равно последнему
01:58:43
элементу вот в этом рендже то есть это и
01:58:46
будет равно двум в данном нашем примере
01:58:48
вот переменная 2 запла дважды если мы
01:58:52
берём опять-таки вернёмся к вот такой
01:58:56
функции А так сейчас я её сделаю
01:59:00
заглушкой вот у нас есть какая-то
01:59:02
переменная которая определена здесь
01:59:06
а переменная вне скоупа функции и
01:59:08
Давайте её здесь
01:59:11
заприте это допустима давайте вызовем
01:59:16
функцию то есть всё нормально Она запла
01:59:20
но если мы возьмём допустим и пере
01:59:23
присвоили здесь нужно быть очень
01:59:32
аккуратным
01:59:34
А у нас В итоге запри Вот это
01:59:38
значение Вот это значение а это Значение
01:59:42
было отброшены Если мы снова вызовем
01:59:45
после функции myun зам
01:59:49
variable то мы увидим следующее что
01:59:52
значение Несмотря на то что оно было
02:00:01
переопределения поэтому с этим всегда
02:00:03
стоит быть осторожным вообще стараться
02:00:06
Вот таких переменных не Объявлять
02:00:09
которые как-то Бут меняться вообще это
02:00:12
нормально только для использования
02:00:14
констант например давайте сделаем
02:00:15
какую-то функцию которая вычитает
02:00:17
разницу между Комфорт температурой и
02:00:20
температурой воздуха в какой-нибудь
02:00:22
комнате например и сделаем тогда
02:00:25
А
02:00:29
константу
02:00:31
а и напишем функцию следующую
02:00:55
и вернём просто разницу
02:00:59
между comfortable Temp
02:01:03
минуте так здесь я
02:01:12
ошибся допустим
02:01:15
20 и разница
02:01:18
оказалась использование констант в
02:01:21
качестве Вот таких глобальных переменных
02:01:22
которые существуют на уровне там пакета
02:01:25
или модуля это нормально но
02:01:27
использование каких-то других переменных
02:01:30
приведёт скорее всего к какой-то ошибке
02:01:32
Поэтому лучше это не делать мы это
02:01:34
делаем но в рамках курса в рамках
02:01:37
нормальной программы лучше так не делать
02:01:39
никогда иначе будет Вот это смешение и
02:01:41
вы не Определите где у вас локальная
02:01:44
область видимости А где глобальная и с
02:01:46
переменными что-то пойдёт не так но
02:01:48
бывает кейсы когда какой-то функции
02:01:51
нужно изменить глобальную переменную в
02:01:53
пайтоне есть для этого синтаксис Но это
02:01:56
абсолютное зло но я вам так или иначе
02:01:58
его
02:01:59
покажу потому что вы можете где-то это
02:02:02
увидеть Давайте вот есть глобальная
02:02:05
переменная которая существует вне скоупа
02:02:09
А И у нас есть какая-нибудь
02:02:12
функция
02:02:14
которая должна переопределить значение
02:02:17
глобальной переменной а у нас есть
02:02:20
ключевое слово
02:02:23
Global Global Global
02:02:25
War равно Давайте здесь напишем
02:02:34
что
02:02:35
А так это должно быть следующим образом
02:02:39
сделано вот мы определили что переменная
02:02:42
является
02:02:44
глобальной Так давайте переименую эту
02:02:46
переменную
02:02:51
я сделал там ошибку А мы объявили что
02:02:53
переменная является глобальной и вот
02:02:56
здесь её переопределить и Давайте
02:03:00
запретим Global War вызовем функцию My
02:03:03
function и опять затим Global
02:03:07
War до вызова функции у нас значение Вот
02:03:12
это и после вызова функции у нас
02:03:16
переопределение внутри функции но делать
02:03:20
такого не стоит всегда существуют пути
02:03:23
по которым можно перестроить программу
02:03:25
чтобы этого избежать вне скоупа функций
02:03:29
используйте только константы давайте для
02:03:33
закрепления вот этой темы
02:03:36
с скопом и с константами напишем такое
02:03:40
полезное упражнение а допустим у нас
02:03:42
есть какой-то персонаж в MM RPG игре и
02:03:47
нам нужно написать ра
02:03:50
определяет Нужно ли увеличивать уровень
02:03:53
персонажа набрал ли он достаточное
02:03:55
количество экспириенс или уровень можно
02:03:57
оставить тем же Давайте определим такую
02:04:01
константу она называется default level
02:04:05
Experience и пусть она будет равна 200 и
02:04:09
у нас
02:04:10
функция нужно ли
02:04:17
поднимать аргументов принимать
02:04:24
следующее а значение текущего
02:04:29
уровня типом которого является
02:04:33
int и значение уже заработанного
02:04:39
опыта который также будет интом и
02:04:43
возвратим мы Бул то есть нужно поднимать
02:04:46
или не нужно это Бул True или fse
02:04:53
а Total Experience будет current
02:04:57
Experience п Gain
02:04:59
Experience Давайте сразу же определим
02:05:02
константу level Up которую мы вернём она
02:05:05
будет изначально равна false и вот здесь
02:05:08
мы пишем условие If Total Experience
02:05:11
больше либо равен чем default level
02:05:15
Experience level
02:05:17
Up и
02:05:20
вернём level
02:05:24
Up Давайте вот такой кейс сделаем что
02:05:27
current lel curent Experience
02:05:32
150
02:05:34
60 и Давайте вот такой кейс
02:05:38
будет C Experience 10 и 6 в первом
02:05:44
случае должно
02:05:46
вернуться и во втором случае
02:05:50
Да кстати я вам не рассказывал о
02:05:52
комментариях а в коде Можно оставлять
02:05:55
комментарии они делаются с помощью вот
02:05:58
такого
02:05:59
хэштега Обычно по правилам Нам нужно два
02:06:02
пробела после кода и мы можем в то же в
02:06:04
той же строке комментировать код либо
02:06:07
можно прямо сначала строки оставлять
02:06:10
какие-то
02:06:14
комментарии вот Давайте исполним наш код
02:06:19
Ну и нам вернулась True в первом случае
02:06:21
и во втором случае false вот это был
02:06:25
хороший пример использования констант в
02:06:32
коде и следующая тема - это цикл while
02:06:36
цикл while используется не так часто как
02:06:38
цикл for В чём между ними различие между
02:06:41
двумя этими циклами цикл for повторяется
02:06:43
определённое количество раз чаще всего
02:06:45
количество его итерации равно количеству
02:06:48
элементов коллекции который мы
02:06:50
перебираем цикл Wi может повторяться
02:06:53
неопределённое количество раз цикл Wi -
02:06:55
это цикл который исполняется По условию
02:06:58
чаще всего его работа связана с
02:07:00
какими-то кантера то есть подсчётов
02:07:03
каких-то элементов где-то По какому-то
02:07:05
условию а давайте сделаем переменную
02:07:08
Counter которое равно о и синтаксис
02:07:13
такой мы пишем
02:07:14
while Counter меньше либо равно п
02:07:20
Давайте здесь заприте Чему равен наш
02:07:23
каунтер
02:07:34
и будем прибавлять на каждой итерации
02:07:37
цикла к каунтер
02:07:39
единичку Давайте исполним этот
02:07:42
код в первой итерации Мы зашли Кате
02:07:45
равен едини он написал прибавил единичку
02:07:49
случился вторая итерация третья
02:07:51
четвёртая Пятая и после пятой итерации
02:07:54
каунтер был равен шести и Вот это
02:07:58
сравнение дало Фолс и следующая итерация
02:08:01
цикла уже не исполнилась также часто
02:08:04
кейс использования а цикла Wi - это
02:08:07
когда у нас есть какой-то лист и нам из
02:08:09
листа нужно удалять
02:08:17
элементы
02:08:19
while My
02:08:21
list То есть пока лист в листе есть хотя
02:08:24
бы один элемент элемент равно mylist Pop
02:08:27
po удаляет последний элемент из списка
02:08:30
Давайте заприте
02:08:40
его и исполним а и в конце Давайте после
02:08:45
исполнения Да мы видим что элемент 2
02:08:48
Давайте в конце убедимся что лист
02:08:51
пустой и вот последний Принт - это наш
02:08:54
лист циклы цикл while можно сделать
02:08:58
бесконечным просто сделав вот такую
02:09:00
запись while True
02:09:02
и Давайте здесь напишем что это
02:09:06
бесконечный loop
02:09:09
А И вот Обратите внимание он начинает
02:09:12
принти Infinite loop просто бесконечно
02:09:15
это будет пока мы не рвём программу
02:09:19
давайте сделаем так чтобы исполнение
02:09:22
программы останавливал
02:09:25
пользователь для этого мы сделаем цикл
02:09:28
while True но рвём его с ключевым словом
02:09:32
Break Давайте вот у нас будет переменная
02:09:35
Answer она будет
02:09:43
Input мы просим пользователя ввести
02:09:46
число Но если
02:09:50
будет равно qu то мы сделаем
02:09:54
Break А здесь напишем
02:10:08
следующее запускаем эту
02:10:11
программу А давайте введём число
02:10:14
10 10 а и я наберу quit и программа
02:10:21
завершилась то есть исполнение пришло
02:10:24
сюда вот это условие дало и отработала
02:10:27
ключевое слово Брей давайте сделаем
02:10:30
небольшую практику по уже изученному
02:10:32
материалу и для того чтобы сделать
02:10:33
практику мы сделаем симуляцию игры
02:10:37
азартного игрока по стратегии манге Что
02:10:39
такое стратегия манге у неё есть даже
02:10:42
целая своя статья на
02:10:45
Википедии здесь описывается суть СЖ
02:10:48
коротко своими словами У нас есть
02:10:50
рулетка в рулетке есть ставка на Красное
02:10:53
и чёрное если мы Ставим на красное и
02:10:55
выигрываем то наша ставка удваивается и
02:10:58
уже давно-давно игроки придумали такую
02:11:00
стратегию А что если мы будем при
02:11:02
выигрыше просто забирать его а при
02:11:05
проигрыше удваивать ставку то есть мы
02:11:07
начинаем с минимальной позволено ставки
02:11:09
в казино если мы выигрываем мы забираем
02:11:13
выигрыш и ставим снова минимальную
02:11:15
ставку если мы проигрываем то мы
02:11:18
ставку то есть вот смотрите у нас есть
02:11:21
допустим ставка оди мы проиграем ставим
02:11:24
два если выигрываем то мы уже выигрываем
02:11:27
четыре и это больше чем Наши затраты то
02:11:29
есть мы потратили о ид на ставки
02:11:32
выиграли четыре То есть три против
02:11:33
четырёх эта стратегия конечно же не
02:11:35
работает но на этой стратегии замешано
02:11:38
много скама всякие ставки на спорт
02:11:41
какие-то пирамиды используют объяснение
02:11:44
что у них вот эта стратегия она
02:11:46
выигрывает и неподготовленный человек
02:11:49
это не интуитивно что эта стратегия
02:11:51
проигрывает и мы просто симулирует
02:11:54
Итак давайте сначала напишем А мы будем
02:11:57
писать не на рулетке эту стратегию А на
02:12:00
кидани монетки кидание монетки - это
02:12:03
даже выгоднее для игрока потому что в
02:12:07
рулетке У тебя есть зеро не Красное и не
02:12:10
Чёрное что уменьшает твоё матожидания
02:12:12
кидание монетки у него матожидания
02:12:14
единица и мы просто покажем что даже с
02:12:17
мажида едини стратегия не работает ал и
02:12:21
решка по-русски называется по-английски
02:12:23
это Heads ands сделаем две константы
02:12:29
Heads А и
02:12:32
Давайте список ещё сделаем тоже
02:12:36
константу coint
02:12:38
values
02:12:41
Heads А дальше напишем такую функцию
02:12:46
которая будет определять бросок монетки
02:12:50
Flip
02:12:51
Coin чтобы написать функцию Flip Coin
02:12:54
нам нужно воспользоваться модулем Random
02:12:58
из стандартной библиотеки пайтона Как
02:13:00
импортировать модули и как устанавливать
02:13:02
библиотеки мы поговорим чуть позже здесь
02:13:04
Давайте просто напишем
02:13:07
Random я вас научу позже импортировать
02:13:10
всё и из библиотеки R мы воспользуемся
02:13:14
такой
02:13:15
функцией как Random Choice а функция
02:13:20
Choice просто возвращает случайные
02:13:22
элементы списка и передадим туда Coin
02:13:25
values Давайте
02:13:27
попробуем
02:13:30
посилити вот у нас Heads Heads tails
02:13:33
tails
02:13:35
Heads Ну то есть функция работает а
02:13:40
дальше Давайте напишем функцию которая
02:13:43
симулирует
02:13:44
работу стратегии martingale прямо до
02:13:48
конца денег у игрока и пусть эта
02:13:55
функция
02:13:57
вернёт значение
02:13:59
и это будет количество шагов до
02:14:02
проигрыша количество бросков монетки что
02:14:06
мы передадим функцию мы передадим
02:14:09
стартовые средства
02:14:12
игрока минимальную
02:14:15
ставку
02:14:16
и
02:14:19
ста максимальная ставка важна во всяком
02:14:22
казино она есть например вы не сможете
02:14:24
ни в какое казино прийти и поставить там
02:14:26
несколько миллиардов долларов на Чёрное
02:14:28
потому что в случае вашего выигрыша
02:14:30
казино просто исчезнет оно перестанет
02:14:33
существовать А давайте сразу же
02:14:35
переменную количество шагов до
02:14:39
поражения оно равно ноль пока
02:14:43
что сделаем переменную
02:14:46
куе сред
02:14:48
и оно равно в начальном этапе стартовым
02:14:53
средствам и сделаем такую переменную
02:14:59
она равна
02:15:01
изначально минимальной ставки и дальше
02:15:06
мы пишем
02:15:11
цикл
02:15:12
пока текущие средства больше
02:15:16
ну делаем следующее
02:15:19
А мы сразу же переменную Step toose
02:15:23
прибавляем единичку потому что у нас
02:15:24
началась игра как бы ещё один шажок к
02:15:26
полному проигрышу игрок уже прошёл
02:15:30
а текущие средства
02:15:33
а из текущих средств вычитаем текущую
02:15:37
ставку А и кидаем
02:15:43
монетку в переменную Flip Coin прис
02:15:49
выполнение функции Flip Coin и дальше у
02:15:51
нас развилка идт
02:15:55
если давайте для простоты мы будем
02:15:57
считать что игрок всегда ставит на
02:16:01
Heads если у нас значение fcoin value
02:16:05
равно HS то мы фиксируем
02:16:10
выигрыш текущая ставка
02:16:14
удваивается текущие средства
02:16:18
становится больше Вот на этот размер
02:16:22
выигрыша и текущая ставка сразу же
02:16:26
становится равна минимальной
02:16:28
ставке если мы
02:16:30
проигрываем то А что у нас происходит а
02:16:35
текущую ставку нам нужно поднять вдвое
02:16:38
мы
02:16:43
удваивает ставка больше максимальной
02:16:45
ставки то
02:16:48
так
02:16:49
Макбет
02:16:51
то мы сразу же делаем так что мы сразу
02:16:55
же откатывается как бы к самому началу и
02:16:59
у нас текущая ставка становится
02:17:01
минимальной и ещё одна проверка что если
02:17:04
у
02:17:05
нас текущая
02:17:09
ставка
02:17:10
больше текущих средств пользователя
02:17:14
то текущая ставка становится
02:17:19
равной мы сразу же поставим максимум
02:17:21
поставим сразу же все свои деньги Нан
02:17:25
Вот вот эти ифы будут исполняться
02:17:27
последовательно но они не противоречат
02:17:29
друг другу и там не будет кейсов Когда
02:17:31
что-то пойдёт не так и Давайте после
02:17:36
того как мы выйдем из цикла мы просто
02:17:38
возвратим количество шагов до
02:17:41
поражения вот нам нужно сейчас как-то
02:17:44
симулировать одну игру манге и Давайте
02:17:49
чтобы сделать всё хорошо мы тут принты
02:17:52
раскидаем Вот давайте мы так как
02:17:56
итерации много будет и чтобы у нас не
02:17:58
наслаивать принты друг на друга Мы вот
02:18:01
здесь сделаем вот такое равно чтобы мы
02:18:04
видели каждый цикл нашей игры А давайте
02:18:08
сюда а
02:18:10
заприте а текущие
02:18:16
средства
02:18:22
вот смотрите вот эта запись вот я имя
02:18:26
переменной сюда вводил у пайтона есть
02:18:28
очень удобное средство строках мы можем
02:18:31
вот здесь равно
02:18:33
написать и это эквивалентно он сразу же
02:18:37
переменную он подпишет её и запт и здесь
02:18:41
же мы в этом же логе выведем текущую
02:18:45
ставку вот сюда
02:18:49
м
02:18:52
Flip также Давайте в строку это
02:18:57
сделаем а нет нам не нужно знать Flip
02:19:01
потому что Вот здесь мы
02:19:03
затим размер
02:19:07
выигрыша А вот здесь просто запри вот в
02:19:12
этом
02:19:15
кесе э хватит чтобы симулировать игру
02:19:20
Вот
02:19:21
давайте Play martingale ST F давайте для
02:19:26
простоты 100 минимальная ставка о и
02:19:30
максимальная ставка пусть будет 100 и
02:19:33
давайте сделаем симуляцию вот мы сделали
02:19:38
симуляцию игроку понадобилось всего лишь
02:19:40
63 шага чтобы проиграть всё это цифру мы
02:19:45
получили вот отсюда вот Play Mar потому
02:19:48
что мы здесь возвращаем количество шагов
02:19:51
до
02:19:52
поражения и Давайте посмотрим как игра
02:19:56
этого азартного игрока развивалась
02:19:59
первая итерация Вот у него текущие
02:20:01
средства 99 и у него есть ставка которую
02:20:04
он поставил он проиграл То есть у него
02:20:08
на следующем шаге у него текущие
02:20:11
средства 97 ставка 2 То есть у него 99
02:20:14
денег в совокупности оставило и он
02:20:16
выиграл
02:20:18
он прибавил эти четыре и у него
02:20:20
получилось уже 101 в сумме весь его банк
02:20:22
То есть он Вот его банк curent funds и
02:20:25
один он тратит на ставку совокупно это
02:20:28
равно 101 То есть он выиграл 101 А вот
02:20:32
здесь он опять выиграл цикл Хотя вот
02:20:35
здесь он проваливался а у него там уже
02:20:38
ставка была четыре но всё-таки выиграл
02:20:41
его вот здесь у негоже 102 банк и так
02:20:43
далее так он вот по едини идт прибавляет
02:20:46
по едини прибавляет едини
02:20:51
пока прибавляет прибавляет и в какой-то
02:20:55
момент у него случается
02:20:58
такая последовательность при которой он
02:21:02
проигрывает все деньги вот смотрите эта
02:21:05
последовательность у него случилась
02:21:07
здесь то есть он проиграл Сначала со
02:21:10
ставкой один потом со ставкой 2 8 16 32
02:21:14
64 и в ито проиграл э 128 и это был
02:21:21
примерно его весь банк вот если мы здесь
02:21:24
здесь посмотрим а и в итоге у него
02:21:27
осталось всего лишь на одну ставку
02:21:29
которую он тоже благополучно проиграл за
02:21:31
63 цикла он слил весь банк то есть в
02:21:35
этом и заключается стратегия мартингейл
02:21:38
что ты выигрываешь много раз по
02:21:39
чуть-чуть но проигрываешь единоразово
02:21:42
почти всё Ну или какую-то там
02:21:45
максимальную ставку умноженную на два и
02:21:47
давайте сделаем Сейчас большую симуляцию
02:21:52
где мы просто Пустим не знаю там
02:21:55
допустим 100 игроков которые сыграют
02:21:57
мартингейл и мы узнаем какой Какое
02:22:01
среднее количество ходов до поражений
02:22:04
давайте
02:22:06
сделаем так давайте вот этот Принт
02:22:08
уберём А вот эти принты мы тоже можем
02:22:11
убрать потому что когда мы будем
02:22:13
симулировать там сразу же 100
02:22:15
игроков они нам будут
02:22:20
мешать и сделаем такую функцию
02:22:28
что вот
02:22:30
симулирует
02:22:36
войдёт давайте у нас будут все игроки
02:22:39
начинать с одними и теми же
02:22:43
средствами
02:22:45
А у нас также будет
02:22:50
у нас будет
02:22:53
maxbet и у нас будет количество игр
02:22:56
которые мы хотим симулировать и мы
02:23:01
вернём это будет среднее значение
02:23:04
которое среднее количество итераций игры
02:23:07
в ман одним игроком и так как это
02:23:09
среднее значение то у нас вернётся Фло В
02:23:14
итоге начнём с переменной
02:23:20
оно равно нулю и дальше мы симуру
02:23:24
много-много игр смотрите нам нужно
02:23:28
создать количество игр по количеству
02:23:31
игроков и мы сделаем это следующим
02:23:46
образом Play martingale сюда мы
02:23:49
передадим Starting F Starting F
02:23:55
minb и
02:24:00
maxbet так к сожалению у меня вся
02:24:04
функция не входит на экран давайте я
02:24:06
сделаю поудобнее чтобы она в столбик
02:24:08
Была записана вся я сделаю следующим
02:24:11
образом вот когда много аргументов
02:24:14
входит в функцию Можно запивать вот
02:24:17
образом и вот здесь я также Вот вызов
02:24:21
этой функции столбик
02:24:25
сделаю
02:24:27
а и Total Step toose у нас плюс равно
02:24:31
Step toose и мы
02:24:33
возвратим
02:24:35
А
02:24:38
количество Total Step to Lose делённое
02:24:41
на количество
02:24:45
игр
02:24:47
Вот и Давайте симулирует количество
02:24:51
игр такая штука что эта
02:24:55
симуляция это не быстрое дело потому что
02:24:58
там нужно в одной из в одной игре если
02:25:02
особенно если мы сделаем так что
02:25:03
минимальная ставка будет маленькая а
02:25:05
средства игрока будут большие и ещё мы
02:25:07
сделаем какую-то максимальную ставку вот
02:25:08
кнм там типа там если мы сделаем
02:25:10
средства игрока 1000 а максимальная
02:25:12
ставка будет 100 то это всё будет очень
02:25:14
долгая симуляция Я предлагаю сделать
02:25:17
следующее Я предлагаю сразу же воткнуть
02:25:20
такие
02:25:22
параметры А у нас будет количество игр
02:25:27
end Games Давайте 10 Starting funds
02:25:32
игрока Пусть равно 1.000 а минимальная
02:25:38
ставка будет один и максимальная
02:25:43
ставка
02:25:44
100 Давайте запустим такую
02:25:48
симуляцию вот среднее количество игр в
02:25:53
martingale будет равно 186.000 это
02:25:57
достаточно большое число но нам важно
02:26:02
Наша задача была изначально вообще типа
02:26:04
узнать Может ли эта игра быть бесконечна
02:26:06
будет ли она прибыльная ответ нет игрок
02:26:09
рано или поздно проигрывает и обычно
02:26:12
сторонники стратегии мартингейл они
02:26:14
говорят Ну слушай но если у меня
02:26:17
бесконечное количество денег допустим
02:26:19
очень большое Давайте Starting fund
02:26:22
сделаем миллион и я найду такое казино
02:26:26
где я смогу этот весь миллион поставить
02:26:29
по-любому же случится
02:26:32
Так что такого огромного количества
02:26:37
проигрышей подряд не будет я смогу
02:26:40
играть в плюс но это тоже всё байка и
02:26:46
конечно же игрок всё равно проиграет всё
02:26:48
равно так или иначе ему выпадет какое-то
02:26:51
определённое количество большое
02:26:52
количество проигрышей подряд Давайте
02:26:54
симулирует
02:26:58
будет время она не быстрая но она рано
02:27:03
или поздно
02:27:05
закончится
02:27:07
а да симуляция закончилась понадобилось
02:27:10
вот такое большое количество шагов тут
02:27:13
15 порядка 15 млн но игрок
02:27:17
каждый игрок ВС равно ловил какую-то
02:27:20
серию поражений в Монетку и в итоге
02:27:22
сливал все
02:27:27
деньги следующая структура данных с
02:27:30
которыми Познакомимся - Это кортежи или
02:27:33
tle tle похожи на лист но они не
02:27:37
изменяются Как выглядит
02:27:40
синтаксис Давайте
02:27:42
создадим Да открываем глые скобки здесь
02:27:47
перечисляем
02:27:50
админ редактор и наблюдатель и Давайте
02:27:56
заприте это а терминал показал наш тал у
02:28:01
тала конечно же есть
02:28:04
длина она равна трём по талу можно
02:28:08
проводить
02:28:15
итерацию
02:28:17
Давайте посмотрим да В каждой строке
02:28:19
выявилась роль которую мы забили в Тап
02:28:22
можно посмотреть что находится ли
02:28:25
какой-то элемент например сделать вот
02:28:28
так
02:28:33
вот а будет True Давайте какую-нибудь
02:28:37
ещё роль придумаем и посмотрим есть ли
02:28:40
она Давайте Пусть это будет
02:28:45
ро у тала есть
02:28:51
индексы они также конечно же начинаются
02:28:53
с нуля важно Очень что когда вы создаёте
02:28:57
тал с одним элементом то
02:29:00
синтаксис Казалось бы должен выглядеть
02:29:03
вот таким
02:29:05
образом Давайте посмотрим что это за
02:29:11
тайп это строка скобки Кроме того что с
02:29:15
помою них обяв используется ещ много где
02:29:18
в пайтоне и нужно понимать что tle
02:29:22
объявляется вот таким образом из одного
02:29:25
элемента и в конце
02:29:29
запятая тогда этот Apple эта ошибка
02:29:34
очень часто встречается в коде и
02:29:36
допустим там объявляют кортеж с одним
02:29:39
элементом вот таким образом хотят через
02:29:41
него проте а там при итерации появляются
02:29:44
буквы например из строки и программа
02:29:47
ведёт себя не так как хотел автор очень
02:29:49
важный функционал - это распаковка
02:29:52
кортежа что это такое А мы
02:29:56
можем вот таким образом сделать
02:29:59
присваивание
02:30:03
переменных
02:30:04
и Давайте заприте то что
02:30:11
получится то есть в каждой переменной
02:30:15
Roll 1 R 2 и R
02:30:17
лежит элемент из кортежа если бы здесь
02:30:21
Было два элемента то распаковка не
02:30:24
сработало бы то есть количество
02:30:27
переменных должно быть равно количеству
02:30:30
элементов тала допустим нам нужно взять
02:30:32
первые два элемента кортежа а третий
02:30:35
просто опустить то он присваивается вот
02:30:37
в такую переменную нижнее
02:30:40
подчёркивание и тогда всё происходит
02:30:43
нормально А кстати таким же свойством
02:30:45
обладает с то есть вот я заменил User
02:30:48
Rolls на список и
02:30:50
распаковывать переменные Можно также tle
02:30:53
применяется тогда когда Вы точно знаете
02:30:56
что структуру данных не нужно будет
02:30:58
менять такое встречается нечасто и чаще
02:31:02
всего tle используется вместе с
02:31:04
функциями об этом мы поговорим позже а
02:31:07
сейчас давайте рассмотрим другую
02:31:09
структуру данных возможно одну из самых
02:31:12
часто
02:31:15
встречаемых
02:31:17
Зачем нужно программирование
02:31:19
программирование существует для того
02:31:20
чтобы переложить реальный мир на язык
02:31:23
цифры и когда мы смотрим на объекты в
02:31:26
реальном мире у него есть какие-то
02:31:27
атрибуты Например у человека есть рост
02:31:31
вес фамилия имя гражданство серии номер
02:31:34
паспорта и так далее и самое логичное
02:31:38
хранить это в структуре с именованными
02:31:40
полями собственно для этого существует
02:31:42
словарь или дикт словарь - это набор
02:31:45
ключ значения ключ словаря должны быть
02:31:47
уникальными как объявляется
02:31:52
словарь Давайте создадим объект Person у
02:31:56
которого будет name
02:32:01
joh у него будет возраст 30
02:32:04
лет и Сити где он живёт Пусть это будет
02:32:09
нью-йорк и Давайте
02:32:14
напечатаем вот мы напечатали словаря в
02:32:17
словарь когда он создан Можно
02:32:19
присваивать другие ключи это делается
02:32:24
через следующий
02:32:26
синтаксис Давайте пусть у Person будет
02:32:30
ДБ работа и он
02:32:34
будет инженер
02:32:37
и напечатаем наш
02:32:41
объект вот мы видим что в словарь был
02:32:44
добавлен ключ ключ J и значение engineer
02:32:48
словарь можно Объявлять также по-другому
02:32:53
с помощью фигурных скобок и уже дальше
02:32:57
накидывать в него
02:33:15
ключи
02:33:16
печатаем и а терминал выводит ровно те
02:33:20
ключи которые мы с вами положили
02:33:22
значение в словарях можно вызывать по
02:33:24
ключу А давайте например
02:33:28
заприте
02:33:30
имя объекта который Мы создали а
02:33:33
терминал вывел John Давайте попробуем
02:33:36
запросить ключ которого
02:33:43
нет исполнение упало с ошибкой
02:33:46
терминал пишет нам что это ошибка key
02:33:49
eror и Country то есть такого ключа нет
02:33:52
в словаре чтобы это ошибка не вылетала в
02:33:55
пайтоне есть у словарей метод
02:33:59
Get Давайте сначала через метод Get
02:34:03
Запроси ключ имя получился joh если
02:34:08
запросить ключ
02:34:10
Country то вернётся обект N также мы
02:34:14
можем положить функцию Get дефолтное
02:34:16
значение которое Вер нам в случае если в
02:34:20
словаре ничего нет по этому ключу нам
02:34:24
вернулась USA если мы допустим
02:34:29
Запроси также и добавим сюда дефолтное
02:34:32
значение например
02:34:34
то нам всё равно Вер естественно по
02:34:38
словарю нужно итерироваться но как
02:34:40
итерироваться по словарю когда у него и
02:34:42
ключ и значение если мы напишем Давайте
02:34:46
for P in
02:34:52
Person он выведет просто ключи Но нам же
02:34:56
важны значения верно Можно конечно
02:34:59
делать следующим
02:35:05
образом и запрашивать прямо по ключу
02:35:09
через который мы итери но это не Самый
02:35:11
распространённый способ который
02:35:13
встречается в коде на обычно
02:35:17
используется Вот такая
02:35:21
конструкция у
02:35:23
словаря дёргается метод
02:35:26
Items и Давайте запри АМ и тайп этого
02:35:34
айте нам распаковывается ключ значения в
02:35:37
виде кортежа который мы только что
02:35:39
проходили первым значением в этом
02:35:41
кортеже идт ключ и второе значение а как
02:35:45
Мы помним ж можно распаковать в две
02:35:50
переменные таким вот
02:36:02
образом Давайте посмотрим что
02:36:05
получится мы итерируемый
02:36:14
name и вторая строка value - это John Мы
02:36:18
можем написать это сразу же в когда
02:36:21
объявляем итератор
02:36:24
fy value in Person
02:36:28
Items Print key и Print
02:36:35
value и вот name John h30 City New York
02:36:40
если нам нужно итерироваться только по
02:36:42
ключам обычно используется вот такой
02:36:48
у объекта Person есть метод
02:36:51
kys Так вы более явно показываете своё
02:36:54
намерение и если вас будет читать другой
02:36:57
программист Или вы сами вы сразу же
02:36:59
поймёте что вы тут хотели сделать мы
02:37:02
итерироваться по значениям для этого
02:37:05
есть метод vales Давайте переименую вот
02:37:08
этот
02:37:14
объект и здесь мы получили значение
02:37:17
словаря сравнение словарей допустим у
02:37:20
нас есть два объекта Person и other
02:37:22
Person Обратите внимание ключи и
02:37:25
значения здесь одинаковые но они идут в
02:37:29
разном порядке объявляются В разном
02:37:32
порядке для словаря порядок абсолютно не
02:37:35
важен потому что ключи у нас всегда
02:37:37
уникальные и Давайте попробуем сравнить
02:37:44
их и возвращается True Если какое-то
02:37:48
значение будет
02:37:49
э
02:37:52
другим то
02:37:54
э вернётся fse также если у нас будет
02:37:58
Допустим разное количество
02:38:09
ключей то также возвращается fse
02:38:13
частотная задача Когда нам нужно
02:38:14
объединить два словаря допустим у нас
02:38:17
есть Person и additional info два
02:38:20
словаря А вот мы можем обратить здесь
02:38:23
внимание что есть повторяющийся ключ
02:38:26
Сити возможно пользователь Возможно это
02:38:29
объект нашего пользователя который
02:38:31
внезапно куда-то переехал и это
02:38:33
отражается в словаре additional Personal
02:38:36
info Что нам сделать тогда у словаря
02:38:39
есть такой метод
02:38:42
update мы вызываем Person Update
02:38:46
и сюда передаём другой
02:38:49
словарь и Давайте
02:38:55
затим Обратите внимание То есть он
02:38:58
объединил
02:38:59
ключи то есть вот мы видим например
02:39:02
ключ J
02:39:05
engineer
02:39:08
си этот ключ Бер
02:39:11
из последнего объекта из того
02:39:14
обекта
02:39:16
первоначальный объект но это не
02:39:19
единственный синтаксис который есть Как
02:39:21
по мне более удобный синтаксис такой
02:39:24
присваиваем в объект Person объединение
02:39:27
с помощью символа Pipe на клавиатуре
02:39:30
если что загуглите где он находится это
02:39:33
такая длинная самая длинная палка и
02:39:36
additional Person
02:39:41
info и у нас получился тотже самый
02:39:44
результат второй словарь перетирает
02:39:47
ключи первого если они одинаковые в
02:39:50
модуле есть домашнее задание обязательно
02:39:52
выполните его и там же в этом же файле
02:39:56
лежит ответ к домашнему
02:40:02
заданию Давайте чуть больше
02:40:05
углубили допустим у нас есть вот такая
02:40:10
функция функция берёт два аргумента
02:40:14
XY и возвращает их
02:40:23
сумму
02:40:25
а получилось три а что если нам нужно
02:40:29
сложить множество элементов Как положить
02:40:32
целое множество в функцию когда мы
02:40:34
объявляем аргументы по одному для этого
02:40:37
в пайтоне есть синтаксис синтаксис
02:40:40
выглядит следующим образом А давайте
02:40:43
назовём функцию по-другому пусть она
02:40:45
называется All сложить все и поставим
02:40:49
звёздочку и напишем Arc обычно так
02:40:52
обозначается какой-то множество
02:40:54
аргументов и Давайте вообще посмотрим
02:40:58
что это за Arc к нам пришли и какой у
02:41:01
них
02:41:03
Тип и допустим вызовем Add
02:41:09
All нет вызов adol и передадим туда 1 2
02:41:14
3 1 2 3 - это tle кортеж вот функция
02:41:20
Type возвращает класс tle А каким
02:41:22
образом нам сложить сейчас все числа Ну
02:41:24
мы можем сделать очень легко Мы можем
02:41:31
взять объявить переменную summary пусть
02:41:34
она равна
02:41:35
нулю
02:41:38
и
02:41:40
итерироваться через
02:41:44
ARC
02:41:47
и Давайте возвратим сари так Да тут я
02:41:52
забыл прин
02:41:54
написать получилось шесть Давайте
02:41:57
проверим что точно всё работает
02:41:59
передадим ещё другие
02:42:01
значения получилось 15 Всё верно что
02:42:04
если у нас есть вот такие два списка
02:42:06
которые нужно сложить между собой каким
02:42:08
образом их запихнуть вот в такую функцию
02:42:11
это также делается с помощью синтаксиса
02:42:16
со звёздочкой мы кладём
02:42:20
values и other values просто со
02:42:23
звёздочкой
02:42:26
и получается 55 существуют моменты когда
02:42:30
нам функцию нужно передать не только
02:42:32
аргументы допустим числа но и какие-то
02:42:35
именованные аргументы И для этого в
02:42:39
пайне тоже есть свой синтаксис Давайте
02:42:42
напишем функцию ince Она будет принимать
02:42:45
на вход quarks а этим словом в пайтоне
02:42:49
обозначаются именованные
02:42:52
аргументы Давайте запри
02:42:54
quarks
02:42:58
и Type
02:43:00
quarks и вызовем функцию вот с такими
02:43:03
аргументами А сюда можно передавать
02:43:07
какую угодно пару и бесконечное
02:43:10
количество поименованных значений
02:43:12
следующим образом Вот давайте передадим
02:43:14
сюда
02:43:18
joh H 30 то есть разных типов и допустим
02:43:24
си New
02:43:29
York к это на самом деле
02:43:36
словарь функция Type говорит нам именно
02:43:40
об этом Пусть функция будет устроена
02:43:42
следующим образом мы там просто итери
02:43:47
ключам и значению в
02:43:59
словаре Так проверим что всё
02:44:02
работает так да у qu Нужно обязательно
02:44:06
вызвать метод
02:44:10
Items всё
02:44:12
работает А что если такая у нас есть
02:44:16
реально словарь и нам нужно запихнуть
02:44:19
его в функцию introduce А каким образом
02:44:22
это делается это делается через
02:44:24
синтаксис с двумя
02:44:30
звёздочками и результат получился точно
02:44:33
такой же давайте сделаем функцию которая
02:44:35
примет вообще все возможные варианты
02:44:38
аргументов чтобы посмотреть как это
02:44:41
устроено Давайте
02:44:44
объявим
02:44:48
функцию следующим образом пусть будет
02:44:52
приниматься какой-то X типа int Y типа
02:44:56
int затем будут приниматься какие-то Arc
02:44:59
аргументы затем пусть будет какое-то
02:45:02
значение которое инто и почему-то равно
02:45:06
шести Пусть оно будет Вот так дефолтное
02:45:09
значение и
02:45:12
здесь и пусть функция просто будет чать
02:45:15
эти Аргументы и давайте сделаем вот
02:45:18
такой вызов X допустим равно 1 2 затем
02:45:24
мы сюда
02:45:49
Person так я ошибся и посмотрим что
02:45:54
получится Вот что у нас выводит прин
02:45:57
а Обратите внимание Print XY на первой
02:46:01
строке 1 ид затем идут AR
02:46:05
кортеж на следующей строчке вот мы его
02:46:08
здесь передали затем идт оно рамы его не
02:46:11
трогали и затем ит
02:46:15
который мы туда передали с такими
02:46:17
функциями нужно быть очень аккуратными
02:46:20
потому что не всё так явно что туда
02:46:22
передаётся но зачастую без этого
02:46:25
синтаксиса не решить какие-то проблемы и
02:46:28
в случае применения такого синтаксиса я
02:46:30
конечно же расскажу только позже
02:46:33
следующая штука которую умеют функции -
02:46:35
это возвращать сразу несколько значений
02:46:38
и этот функционал частенько используется
02:46:41
например Давайте напишем функцию которая
02:46:44
будет
02:46:45
словарь и возвращать первым аргументом
02:46:49
модифицированный словарь а второй вторым
02:46:53
аргументом Был ли словарь модифицирован
02:46:56
функция будет следующая
02:46:59
функция называется модиф
02:47:01
dict она
02:47:05
принимает аргумент
02:47:07
dict типа и
02:47:11
[музыка]
02:47:12
какие-то аргументы ключ значения на
02:47:15
которые предположительно будет меняться
02:47:17
наш старый словарь возвращать она будет
02:47:22
два аргумента и записывается это в
02:47:24
синтаксисе в нотации функции следующим
02:47:28
образом tle так как элементов два и одно
02:47:32
значение будет dict это наш словарь а
02:47:35
другое будет Бул изменился словарь или
02:47:38
нет Давайте сразу же заведём переменную
02:47:41
из
02:47:42
modified которая будет равна
02:47:45
потому что у нас ещё пока ничего не
02:47:48
изменилось и дальше мы циклом пойдём по
02:47:52
нашим
02:47:56
к in
02:48:00
Items и дальше такое условие
02:48:05
[музыка]
02:48:06
If нам нужно проверить есть ли значение
02:48:10
с таким ключом в старом словаре в старом
02:48:13
словаре конечно же может не быть поэтому
02:48:15
мы воспользуемся методом
02:48:18
Get если в старом
02:48:22
словаре
02:48:25
значение не равно value то есть значение
02:48:28
ВК том что лежит в квак то мы сделаем
02:48:32
следующим образом
02:48:38
dict
02:48:41
равно так вот здесь я забыл двоеточие и
02:48:45
так как изменение значения произошло то
02:48:49
мы сразу же сделаем ключ из modif рано
02:48:53
True и в конце после слова Return нам
02:48:57
нужно вернуть два объекта я напомню Это
02:49:00
словарь и Был ли этот словарь Но это
02:49:03
изменённый словарь и был ли словарь
02:49:06
изменён Нужно вернуть
02:49:12
и Давайте пусть у нас будет Вот такая
02:49:15
структура какой-то продукт у него есть
02:49:18
ID есть название лептоп и какой-то Price
02:49:22
у него есть и мы вызываем
02:49:25
функцию modify dict Давайте просто пока
02:49:28
получим какую-то структуру в ответ Мы
02:49:30
ещё не знаем что это за структура но
02:49:32
просто посмотрим как она выглядит
02:49:36
Аа All dict равно product и здесь мы
02:49:43
перечислим а наши quarks Давайте добавим
02:49:48
к
02:49:50
словарю такую переменную
02:49:52
instock True то есть участвует в
02:49:56
распродаже
02:49:57
и затим structure
02:50:02
и тип этой
02:50:07
СТК
02:50:09
и нам вернулся кортеж Собственно как мы
02:50:12
и возвращались функции кортеж
02:50:15
с двумя значениями вот первое значение -
02:50:18
это словарь уже изменённый здесь есть
02:50:21
ключ instock True и переменная из
02:50:25
modified True Давайте
02:50:28
посмотрим как будто бы мы в изменение
02:50:34
словаря к
02:50:38
передали
02:50:42
п и остался тем же самым
02:50:46
и модифицирован ли он был
02:50:50
нетс давайте так обычно не делают когда
02:50:54
из функции возвращаются два аргумента
02:50:57
они присваиваются в два аргумента
02:50:59
распаковываю как мы это делали с
02:51:13
таламический
02:51:15
и за
02:51:19
принти всё две переменные в одной у нас
02:51:22
оказался словарь и в другой значение из
02:51:29
modified следующая очень важная тема -
02:51:32
это J J - это текстовый формат обмена
02:51:36
данными весьма вероятно большинство
02:51:39
данных которые циркулируют туда-сюда в
02:51:42
различных мобильных приложениях в веб
02:51:45
приложениях ходят именно в джейсоне J
02:51:48
расшифровывается как JavaScript object
02:51:51
notation Но несмотря на то что этот
02:51:53
формат был впервые применён именно
02:51:56
внутри языка JavaScript он стал
02:52:14
пра распаковывает это в структуру данных
02:52:16
в другом языке чтобы использовать J
02:52:20
нужно импортировать этот модуль об
02:52:23
импорта мы поговорим чуть попозже сейчас
02:52:27
просто будем использовать их Ир J
02:52:31
допустим пусть у нас будет какая-то
02:52:34
какой-то объект Book книжка у неё есть
02:52:41
ч допустим есть
02:52:44
чтобы это не обозначало но на самом деле
02:52:47
это какой-то международный идентификатор
02:52:48
книг
02:52:50
и это такой идентификатор его очень
02:52:53
часто используют в базах данных ну
02:52:56
привыкайте J выглядит примерно так и
02:52:59
упаковываются туда именно такие данные и
02:53:02
давайте
02:53:04
сделаем переменную J string и туда
02:53:08
возьмём вызовем
02:53:13
метод
02:53:15
объект бук и посмотрим что у нас
02:53:18
получится во-первых что там за тип
02:53:21
будет во-вторых
02:53:23
Давайте посмотрим как сам объект будет
02:53:26
выглядеть получается строка то есть наш
02:53:30
объект преобразовал в строку и у строки
02:53:33
вот следующий формат То есть он
02:53:36
переделал кавычки из одинарных одинарные
02:53:39
или двойные в питоне не имеют никакой
02:53:42
разницы но в J они играют роль там
02:53:46
одинарные кавычки Ну используются как
02:53:48
апостроф А чтобы упаковать ключ и
02:53:51
значения нам нужно двойные кавычки то
02:53:53
есть J если вот этот объект взять и
02:53:57
скопировать Во что примерно он
02:53:58
переносится то вот он равен следующему
02:54:02
вот такой строке то есть это строка и
02:54:06
внутри вот так упакован объект Давайте
02:54:09
Вот это
02:54:11
сорм чтобы раскова это нам нужно вызвать
02:54:16
функцию давайте сделаем переменную бук и
02:54:24
J и туда передадим J
02:54:28
Strings Давайте посмотрим
02:54:32
чему Чему равна переменная бук и какой у
02:54:35
неё
02:54:37
тип запускаем ди то есть мы распаковали
02:54:42
обратно ну и там лю значени уже внутри
02:54:45
ну и тут нужно сказать что в J можно
02:54:48
упаковать какие-то другие Поля не знаю
02:54:51
например
02:54:52
пусть у нас будет
02:54:54
какая-то какой-то каут который там равен
02:54:57
30 книгам допустим на складом допустим
02:55:01
какие-то лейблы которые у нас есть
02:55:04
Допустим Допустим не лейблы а назовём
02:55:07
это
02:55:10
жанры допустим жанр антиутопия
02:55:18
и заприте Как выглядит Jon
02:55:24
string вот число без двойных кавычек и
02:55:28
жанры он упаковал листом я показал что
02:55:31
такое Jon чтобы поделать запросы но до
02:55:34
запросов нас отделяет ещё одна тема
02:55:38
которую важно знать это
02:55:43
импорты
02:55:45
Итак импорты для начала Что такое модуль
02:55:48
в Python Что называется модули модуль в
02:55:51
Python - это файл который содержит
02:55:53
Python код и имеет расширение точка py
02:55:56
Например я каждый раз в каждом уроке
02:55:59
создаю файл lon то есть урок то py
02:56:03
модуль может содержать как исполняемый
02:56:06
код так и определение функций или
02:56:09
классов каждый модуль содержит приватное
02:56:11
пространство имён посмотреть его очень
02:56:13
легко а есть встроенная функция
02:56:17
globals и функция globals возвращает
02:56:20
словарь я сразу же верну
02:56:23
ключи вот здесь
02:56:27
разные непонятные строки храняться А
02:56:31
давайте просто объявим переменную
02:56:33
какую-то переменная My int Рав 1 и
02:56:38
запустим функцию
02:56:41
globals мы увидели переменную My int
02:56:45
здесь то есть globals содержит все
02:56:47
переменные функции классы которые вы
02:56:50
можете как-то использовать в своём коде
02:56:52
и Давайте
02:56:55
импортируем библиотеку J которой мы
02:56:58
пользовались в прошлом
02:57:00
уроке библиотека также попала в
02:57:04
пространство имён этого модуля то есть
02:57:06
импорт в модуле нужен для того чтобы
02:57:08
завести в локальное пространство имён
02:57:11
нашего файла какие-то другие библиотеки
02:57:14
или другие файлы это очень важная штука
02:57:16
потому что это помогает нам лучше
02:57:18
компоновать код и лучше ориентироваться
02:57:20
в нём потому что если бы у нас были
02:57:22
файлы не знаю там по несколько тысяч
02:57:24
строк то в них было бы очень тяжело
02:57:26
ориентироваться например допустим у нас
02:57:29
есть
02:57:31
какой-то
02:57:33
mylist и нам нужно выбрать из
02:57:39
My какой-то Рандомный элемент для этого
02:57:42
в Python
02:57:45
существует модуль
02:57:49
Random и у Random
02:57:52
есть такой
02:57:54
метод
02:57:56
Choice и в Choice передаём mylist Вот
02:58:00
давайте сейчас распечатаем исполнение
02:58:03
этой функции и распечатаем что у нас
02:58:05
есть в
02:58:09
globals ч вернул нам Рандомный элемент в
02:58:12
этот раз это оказалась тройка
02:58:14
и в нашем пространстве имн вот есть
02:58:17
модуль ROM который мы
02:58:32
импортировались здесь какие-то классы
02:58:35
представлены у них какие-то методы но мы
02:58:38
сечас не будем в это углубляться я лишь
02:58:40
хоте проиллюстрировать что мы
02:58:44
пространство им изм к нам в наш модуль
02:58:49
который называется L в данный момент
02:58:52
чтобы посмотреть методы которые можно в
02:58:55
м дёрнуть есть функция
02:58:59
DIR она также
02:59:03
встроеная и тут огромное количество
02:59:11
всего например вот зде функция Choice
02:59:14
которую мы только что дёргали ну и масса
02:59:17
других каких-то функций Ну и конечно же
02:59:20
мы сами можем создавать модули допустим
02:59:23
я вот здесь создал файл M operations у
02:59:26
него есть две функции это Add сложить он
02:59:29
складывает два числа и substr Давайте в
02:59:31
файле lessons попробуем по импортировать
02:59:34
эти функции вот Обратите внимание у меня
02:59:38
в проекте папки
02:59:40
называются через нижнее подчёркивание
02:59:44
и дальше идт число я специально так
02:59:47
сделал это не самый принятый в пайне
02:59:50
метод название папки я сделал так
02:59:52
специально чтобы сохранить очерёдность и
02:59:55
нам нужно сейчас импортировать в наш
02:59:59
файл L функции из файла operations как
03:00:03
это делается Мы пишем наш модуль
03:00:06
называется 17 и мым
03:00:12
1ка
03:00:14
и и там есть две функции Add и substr и
03:00:19
дальше мы можем их использовать
03:00:23
пример можем сложить два числа и также
03:00:28
вычесть два числа
03:00:33
запускаем всё работает импортировать мы
03:00:35
можем разными способами например Мы
03:00:37
можем взять и сделать следующим образом
03:00:39
мы можем из папки
03:00:42
17
03:00:44
импортировать просто модуль M operations
03:00:47
и уже здесь вызывать функции из этого
03:00:53
модуля так я прин
03:00:57
забыл получилось три можно делать
03:01:00
следующим образом А мы берём импортируем
03:01:03
из модуля M operations все функции
03:01:06
которые там есть с помощью звёздочки
03:01:08
такой синтаксис лучше не использовать
03:01:10
потому что мы не знаем что там внутри
03:01:12
файла M operations там может быть
03:01:14
какие-то функции или переменные названы
03:01:18
так же как у нас в нашем скрипте лучше
03:01:21
создавать импортировать по одному либо
03:01:23
импортировать м сразу же модуль math
03:01:26
operations то есть вот здесь мы можем
03:01:28
сейчас вызвать функцию Add она сразу же
03:01:32
есть уже сразу в нашем пространстве имён
03:01:34
Давайте убедимся в
03:01:40
этом вот этот абстракт присутствует
03:01:45
Давайте вызовем чтобы убедиться и
03:01:47
заприте
03:01:52
результат получилось три я так очень не
03:01:55
советую делать иногда допустим у меня бы
03:01:58
здесь была бы функция какая-то Add
03:02:00
совершенно другая которая бы
03:02:02
использовала
03:02:04
Аргументы и
03:02:07
возвращала сумму этих
03:02:10
аргументов чуть изменённая Функция
03:02:12
которую мы делали в предыдущих модулях и
03:02:15
мне нужно импортировать функцию Add из M
03:02:18
operations
03:02:21
и
03:02:23
будет очень плохо Даже Python
03:02:26
подсказывает что вы
03:02:32
переопределить под другим
03:02:35
именем и я допустим
03:02:38
напишу и Давайте вызову функцию addition
03:02:44
которая складывает X Y также мы можем
03:02:48
сделать относительный импорт то есть не
03:02:50
спускаться
03:02:52
до папки в корне то есть мы по сути
03:02:56
импортируем сразу же из вот этой папки а
03:02:59
просто написать From M
03:03:04
operations import и это также будет
03:03:10
работать Всё работает также я бы в
03:03:12
рамках этой темы обратил бы внимание на
03:03:16
такой файл как init P он указывает
03:03:19
интерпретатору что вся папка является
03:03:22
питонов Ским пакетом и её можно
03:03:24
импортировать вот этим образом То есть
03:03:26
если у вас где-то не работает какой-то
03:03:29
импорт Обратите внимание что там лежит
03:03:31
файл init
03:03:35
P одно из преимуществ Python - это
03:03:39
пакеты которые не входят в стандартную
03:03:41
библиотеку вообще в
03:03:44
решены многие проблемы другими
03:03:46
разработчиками и вы можете пользоваться
03:03:48
плодами их труда в Python есть
03:03:50
установщик пакетов пип он помогает
03:03:53
управлять зависимостями которых нет в
03:03:55
стандартной библиотеке в следующем
03:03:57
модуле мы будем делать запросы к а Для
03:04:01
этого нам понадобится библиотека
03:04:03
requests и нам нужно её установить в
03:04:06
пайчарме есть кнопка терминал Давайте
03:04:10
нажмём её это терминал командная строка
03:04:13
в которой
03:04:14
активирована наша среда Где установлен
03:04:18
Python у вас в терминале среда может
03:04:21
быть не активирована давайте я сейчас у
03:04:25
себя её
03:04:29
деак как её активировать Если вы на
03:04:32
линуксе или на Маке то нужно сделать
03:04:34
следующим образом
03:04:40
sce и у нас появился вот здесь V на
03:04:44
виндоусе это делается по-другому на
03:04:46
Windows это делается через вот такую
03:04:50
команду У меня она Не сработает я её не
03:04:53
буду запускать VEN scripts Activate и
03:04:55
там слыши ещё в другую сторону у меня
03:04:58
она не пойдёт Но на Windows она должна
03:05:01
сработать и дальше мы просто берём и
03:05:07
пишем Pip Install
03:05:10
request нажимаем Enter
03:05:19
и библиотека скачивается если у вас
03:05:22
вдруг не получилось это сделать то
03:05:25
Зайдите в настройки здесь есть вкладка
03:05:27
Project и Python interpreter во-первых
03:05:30
Убедитесь что вот здесь у вас
03:05:32
интерпретатор установлен из вашей
03:05:36
папки то есть делается это следующим
03:05:39
образом у меня уже он установлен из моей
03:05:42
папки а где я
03:05:46
нахожусь либо установить библиотеку
03:05:49
можно следующим образом я Давайте её
03:05:51
сейчас удалю здесь и так вот нажимаете
03:05:55
плюс здесь куча доступных пакетов А и
03:06:01
набиваете requests и здесь должна быть
03:06:04
где-то кнопка Install
03:06:08
package всё package request installed
03:06:12
successfully
03:06:14
выходим отсюда Давайте проверим что
03:06:17
request установилось Мы просто
03:06:20
импортируем его к себя всё работает Итак
03:06:23
что такое apia apia - это интерфейс для
03:06:28
взаимодействия программ между собой вы
03:06:30
прекрасно знаете что такое интерфейс
03:06:32
приложения или сайта например с помощью
03:06:35
интерфейса юба Вы можете останавливать
03:06:37
или возобновлять воспроизведение этого
03:06:40
видео увеличивать скорость включать
03:06:43
субтитры Ну и так далее программный
03:06:44
Интерфейс - это такой же интерфейс Но
03:06:47
для другой компьютерной программы и мы
03:06:49
сейчас будем делать Запрос к другому
03:06:53
ресурсу в Интернете у которого есть свой
03:06:56
API или App То есть я смогу из своего
03:06:59
кода вызвать другую программу через http
03:07:03
запрос мы пойдём и узнаем стоимость
03:07:05
биткоина на бинансе это не реклама мне
03:07:07
бинанс вообще ничего не платил за это я
03:07:10
взял его потому что у него есть
03:07:11
доступный AP со стоимостью криптовалют у
03:07:15
AP есть документация вы её сейчас можете
03:07:18
видеть ссылка на документацию если что
03:07:20
лежит в описании в ссылках используемых
03:07:24
в видео так первое что нам нужно - это
03:07:26
выписать URL на который мы будем ходить
03:07:29
а он выглядит вот таким образом и дальше
03:07:33
мы берём и делаем следующее мы делаем
03:07:37
переменную
03:07:39
ответ
03:07:40
и вызываем библиотеку request с методом
03:07:44
Get в Get передаём наш URL и нужно
03:07:48
передать аргумент params params будет
03:07:53
следующее нам нужно туда передать
03:07:58
а ключ симбол и дальше нам нужно узнать
03:08:02
стоимость биткоина к доллару в бинанс
03:08:06
это сделано следующим образом я два Кера
03:08:09
подряд пишу Bitcoin который имеет btc
03:08:12
тикер и usdt и Давайте посмотрим что у
03:08:18
нас
03:08:22
пришло то что вернётся нам хранится в
03:08:25
атрибуте
03:08:28
контент Давайте напишем этот контент
03:08:31
и тип этого
03:08:37
контента Всё я запустил пошёл запрос
03:08:40
запрос отработал к нам пришли вот такие
03:08:43
байты это клас bys и вот они что
03:08:46
означают то есть а симбол btc usdt - это
03:08:51
собственно курс биткоина к доллару и
03:08:54
сегодня биткойн стоит
03:08:57
29.000 долларов 781 доллар это байты с
03:09:01
байтами Мы ещё не работали и в рамках
03:09:03
этого курса не будем а работать с ними а
03:09:06
нам нужно перегнать их в J потому что ну
03:09:09
это же просто чистый J это дикт и это
03:09:13
всё очень легко
03:09:16
сделать мы возьмём сделаем переменную
03:09:20
Price и у класса response вызовем метод
03:09:28
J а заприте Прай и
03:09:33
тип прайса А да Тип dict и вот наш
03:09:38
словарь то есть дальше мы можем
03:09:40
пользоваться ключом Price и как-то его
03:09:42
использовать Обратите внимание что прайс
03:09:44
к нам пришёл в виде строки и я его
03:09:47
сейчас перегон сразу же
03:09:52
в в тип FL например давайте я сделаю там
03:09:56
Price
03:09:58
object
03:10:00
Price
03:10:02
равно Price object ключ Price вызываем
03:10:07
так я тут использую одинарные кавычки
03:10:09
Давайте чтобы для консистентность я их
03:10:11
тоже сделаю и сразу же его перегоним в
03:10:15
тип
03:10:16
FL и
03:10:20
запри да всё получилось вот прайс
03:10:24
давайте сделаем следующим образом
03:10:26
Давайте напишем код который каждую
03:10:28
секунду ходит капи бинанса и узнаёт цену
03:10:32
биткоина и добавляет её в
03:10:35
список А что нам нужно для этого сделать
03:10:39
во-первых нам нужно делать секундные
03:10:41
задержки как их делать
03:10:43
есть модуль стандартной библиотеки Time
03:10:46
и здесь мы
03:10:48
пишем нам нужно сделать 30 раз раз в
03:10:51
секунду 30 раз а и in Range 30 делаем
03:11:02
запрос Get запрос по урлу в params
03:11:11
передаём
03:11:15
btc usdt Price сразу же переведу его во
03:11:21
флот respon
03:11:25
Jon
03:11:27
Price так вот здесь надо вызов сделать и
03:11:32
сделаем здесь список Bitcoin
03:11:37
prices пустой список и в этот список
03:11:41
добавим
03:11:43
Price и здесь нам нужно замереть на
03:11:46
секунду а это делается это с помощью
03:11:50
метода
03:11:52
Sleep сюда передают секунды Time Sleep о
03:11:55
и давайте
03:11:57
а в конце затим Bitcoin prices запри
03:12:01
длину объекта Bitcoin prices запри
03:12:05
максимальное значение из списка Bitcoin
03:12:09
prices и
03:12:11
минимальное
03:12:17
поехали ждём 30 секунд Итак программа
03:12:21
отработала получился список из стоимости
03:12:27
биткоина в нём получилось 30
03:12:31
элементов мы сразу это закладывали в
03:12:34
нашем Рей и максимальная цена получилась
03:12:39
2963 доллара и минимальная 29 759
03:12:43
долларов в этом модуле есть домашнее
03:12:45
задание обязательно выполните его оно
03:12:48
тоже связано с
03:12:52
запросами следующая тема comprehensions
03:12:56
перевести на русский язык это можно
03:12:59
словом включение списочное включение
03:13:02
list comprehensions - это такой более
03:13:04
удобный способ создания разных списков
03:13:07
списков нам нужно создавать в коде очень
03:13:09
много обычно и для того чтобы сократить
03:13:13
строчки кода сделать код более читаемым
03:13:15
мы используем list comprehensions
03:13:17
например вот есть традиционный способ
03:13:20
нам нужно создать list
03:13:23
squares list squares будет включать в
03:13:26
себя квадраты всех чисел от нуля до дев
03:13:31
а как это сделать for X in Range 10 мы
03:13:37
берм и
03:13:40
в S добавляем
03:13:44
x в степени
03:13:46
2 и Давайте посмотрим чему у нас
03:13:50
равен и на это ушло вот три строки Хотя
03:13:55
операция достаточно
03:13:57
очевидная мы эти три строки можем
03:13:59
заменить одной можем сделать так
03:14:02
S
03:14:05
равно X
03:14:07
к для
03:14:10
X из Range 10 и Давайте запри
03:14:18
squares да получилось то же самое то
03:14:21
есть вот эти способы абсолютно
03:14:24
равнозначные только один более
03:14:27
лаконичный и у него чуток другой порядок
03:14:31
элементов в синтаксисе то есть мы вот
03:14:35
здесь делаем цикл 4 и вот здесь просто
03:14:39
объявляем этот элемент или что-то делаем
03:14:41
с ним сравниваем с чем-то и так далее
03:14:44
Давайте создадим
03:14:46
список чётных квадратов
03:14:49
чисел назовём его чётные квадраты если у
03:14:53
нас X чётные то мы добавляем квадратово
03:14:57
числа в список Давайте здесь напишем это
03:15:00
если X остаток от деления на два равен
03:15:04
нулю то мы берём и
03:15:08
в list even squares добавляем этот X в
03:15:18
квадрате и вот получилось он туда
03:15:21
добавил только чётные элементы If тоже
03:15:23
можно убрать в L comprension например
03:15:26
эта запись сворачивается до
03:15:32
следующей X
03:15:38
квадра 10 если X при делении
03:15:44
даёт остаток но и Давайте Вот это уберём
03:15:46
эти записи абсолютно идентичны только
03:15:50
вот это занимает одну строку А это
03:15:53
две и Давайте
03:15:56
распечатаем получилось тоже самое туда
03:15:59
же в список можно добавить слово El
03:16:04
например Давайте решим такую задачу вот
03:16:06
у нас есть список чисел и мы на каждое
03:16:10
тно
03:16:11
число словом even чётное а каждое
03:16:14
нечётное словом od
03:16:17
нечётное Давайте назовём этот список
03:16:20
labeled Numbers и он будет пустой и
03:16:24
допустим у нас есть вот такой вот список
03:16:28
Давайте по порядку туда для простоты
03:16:30
выпишем числа
03:16:32
и in
03:16:38
Numbers если число при делении на два
03:16:43
даёт остаток ноль то мы в Label
03:16:48
Numbers добавим
03:16:51
even
03:17:00
else Давайте num
03:17:05
затим да О - это
03:17:08
even это же можно записать в
03:17:13
как это будет выглядеть тут Обратите
03:17:15
внимание Мы создаём список на основании
03:17:19
другого списка и в Lens это будет
03:17:23
выглядеть следующим
03:17:34
образом
03:17:41
El это сейчас сотрём нам нужен только
03:17:44
список Numbers так Нет я не сотру
03:17:49
я к себе в буфер обмена уберу
03:17:54
это Print Label num а получилось всё
03:17:59
тоже самое то есть вот эта запись здесь
03:18:02
аж сразу пять строк легко убирается в
03:18:06
одну Lens вообще в начале могут очень
03:18:09
тяжело восприниматься это просто
03:18:11
тренировка ну их использовать то есть
03:18:13
знать что если вы создаёте список то
03:18:15
попробовать это сделать через list
03:18:17
comprehensions Иногда правда
03:18:20
comprehensions могут быть там двух-трёх
03:18:22
этажным вот тогда их не нужно
03:18:24
использовать То есть если запись
03:18:26
умещается в одну строку то мы её
03:18:28
используем Если нет то нужно уже как-то
03:18:31
создавать другими способами типа циклами
03:18:33
они будут более явными через ли кон
03:18:36
Также можно создавать словари например
03:18:39
Давайте создадим словарь sct там мы
03:18:42
использовали листы здесь словарь и нам
03:18:45
нужно сделать следующим образом Вот это
03:18:48
ключ словаря
03:18:50
это значение словаря X и X в квара для X
03:18:56
in Range 10 и Давайте заприте
03:19:01
его и вот такой словарь получается то
03:19:04
есть у нас пары чисел 0 1 2 4 39 41 и
03:19:09
так далее Давайте выполним такую
03:19:10
операцию с помощью
03:19:12
как транспонирование матрицы Что такое
03:19:14
Матрица Матрица - это такой двумерный
03:19:16
массив чисел у которого есть строки и
03:19:19
Столбцы обычно в пайтоне он записывается
03:19:21
следующим
03:19:28
образом у нас
03:19:33
есть строки и Столбцы то есть строка Вот
03:19:37
первая вторая
03:19:39
строка там третья и соотвественно вот
03:19:42
один столбец
03:19:44
17 2 58 Ну и так далее 3 6 9 А что такое
03:19:49
транспонирование это такая операция над
03:19:51
матрицей когда её строки становятся
03:19:52
столбцами с тем же номером Столбцы
03:19:55
становятся строками то есть
03:19:56
транспонированная Матрица к этой матрицы
03:19:58
будет выглядеть следующим
03:20:06
образом 1
03:20:10
7 2
03:20:12
5
03:20:14
8 3 6 9 то есть нам вот эту матрицу
03:20:20
нужно таким образом перевернуть чтобы
03:20:22
получилось вот это как это делается
03:20:26
давайте сделаем переменную
03:20:29
transpose Марик и делаем следующую
03:20:33
штуку
03:20:36
Range
03:20:38
Mat Здесь нам нужно сделать переменную
03:20:43
и складывать в неё
03:20:49
строки делаем здесь второй
03:20:53
цикл in
03:20:58
Matrix transpose R up
03:21:03
and
03:21:04
R и то есть мы берм проходим в цикле
03:21:09
который равен длине матри по вот этим
03:21:12
то есть индексом допустим в первый
03:21:14
проход она будет равна Но дальше мы
03:21:16
берём по строкам из Матрицы проходим и в
03:21:21
строчку которую мы создали
03:21:24
здесь берём и кладём элемент с индексом
03:21:28
но потом также элемент с индексом оди
03:21:30
уже в другую строку в другую переменную
03:21:32
И вот здесь мы
03:21:40
сделаем transpose Row А и Давайте
03:21:44
заприте
03:21:45
transpose Matrix получилось ли Да всё
03:21:50
получилось и у нас получился достаточно
03:21:52
громовский и если честно не очень-то
03:21:55
понятный код согласитесь и смотрите
03:21:58
Какую красоту можно сделать с помощью
03:22:00
лист компх Так давайте это оставим чтобы
03:22:04
было пока чтобы мы Потом могли сравнить
03:22:09
и мы пишем transpose Matrix
03:22:19
равно А строка I для строки из Матрицы
03:22:25
for E in Range Len Matrix Ну как по мне
03:22:30
эта штука да пусть непонятная но
03:22:32
выглядит то потрясающе выглядит очень
03:22:36
коротко и Давайте заприте
03:22:40
это
03:22:43
Да всё получилось тоже самое как я уже
03:22:46
говорил в начале мой курс по Python даст
03:22:48
вам отличный старт и поможет написать
03:22:50
первую программу К сожалению его будет
03:22:52
мало чтобы устроиться на работу Если вы
03:22:55
хотите найти работу как можно быстрее
03:22:57
советую перейти по ссылке в описании там
03:22:59
вас ждёт классный курс от Sky
03:23:05
Pro следующий Тип который нам надо
03:23:08
изучить с вами - это множество Что такое
03:23:11
множество множество - это коллекция из
03:23:14
уникальных элементов Давайте создадим
03:23:17
такую множество в пайтоне называются се
03:23:21
и сет создаётся следующим образом
03:23:24
синтаксис похож на дикт но в дикте
03:23:26
хранится ключ значени А в сете только
03:23:31
значение и Давайте
03:23:40
заприте
03:23:44
класс Set и 1 2 3 4 5 также можно делать
03:23:49
по-другому
03:23:52
с помощью ключевого слова Set вызываем
03:23:56
его как функцию
03:23:59
и наполняем этот се in Range
03:24:03
5 Давайте My ме Add есть то есть можно
03:24:08
изменять также как словари или списки
03:24:12
и добавляем туда
03:24:14
и ин
03:24:19
My 0 2 3 4 из Сета Также можно удалять
03:24:24
элементы команды Давайте удалим
03:24:28
двойку из
03:24:31
Сета и наш сет стал меньше в сете
03:24:35
хранятся только уникальные элементы То
03:24:37
есть если я вот здесь My добавлю двойку
03:24:42
то сет не
03:24:46
изменится он будет также равен 0 2 3 4
03:24:51
Несмотря на то что я добавил ещё одну
03:24:53
двойку туда потому что сет включает
03:24:56
только уникальные элементы и с сетами
03:24:59
естественно можно сделать всякие
03:25:01
операции например пусть у нас есть сет о
03:25:04
и есть сет 2 и нам нужно объединить два
03:25:07
этих множества синтаксис
03:25:10
такой
03:25:13
Union Set 2 Обратите внимание здесь есть
03:25:17
одинаковые элементы он их запишет ровно
03:25:19
один
03:25:21
раз 1 2 3 4 5 6 Ну и естественно у Сета
03:25:27
есть
03:25:29
а давайте сделаем переменную Union Set
03:25:33
который равен Set 1 Union Set
03:25:39
2 да
03:25:42
наверное плохое название uned и
03:25:46
Давайте длину этого
03:25:50
Сета шесть а сеты Также можно находить
03:25:54
их
03:25:57
пересечения Что такое пересечение это
03:26:00
элементы которые есть и там и
03:26:08
там получился сет 34 собственно тройка
03:26:11
четвёрка есть и там и там также можно
03:26:14
делать difference например между
03:26:21
сетами будет 1 2 то есть 1 2 - это
03:26:25
элементы которых нет в сете два сеты
03:26:28
можно создавать с помощью включений
03:26:31
давайте я создам э Set
03:26:40
squares
03:26:48
вот он равен следующем сет - это
03:26:51
неупорядоченная последовательность
03:26:53
порядок элементов не не имеет никакого
03:26:55
значения То есть например вот такой сет
03:27:00
1 2
03:27:03
3 будет равен сету 3
03:27:08
2 важно лишь что и тот и тот сет
03:27:12
включают одни и те же значения неважно В
03:27:14
каком порядке
03:27:16
итом чаще всего решается Вот такая
03:27:19
задача допустим у нас есть
03:27:22
список Numbers в нём есть разные
03:27:26
одинаковые элементы и нам нужно
03:27:28
по-простому из листа удалить дубли
03:27:30
делается это следующим образом Unique
03:27:35
Numbers равно
03:27:37
Set
03:27:40
Numbers Давайте Type
03:27:43
напишем Ну Type естественно будет Set и
03:27:47
сами Unique Numbers Да typeset а
03:27:51
уникальные цифры вот от одного до семи
03:27:54
чтобы это естественно сделать
03:27:56
листом
03:27:58
нужно просто сделать вот такое
03:28:02
преобразование list Unique
03:28:08
Numbers получился вот такой ли в итоге
03:28:12
Ну и в одну строчку это можно написать
03:28:14
следующим образом list Set
03:28:18
Numbers вот такую конструкцию можно
03:28:21
частенько увидеть в
03:28:25
коде и
03:28:29
Type Да получился такой Лист и класс
03:28:34
лист вы могли заметить что се и dict
03:28:36
похожи У них даже одинаковый синтаксис
03:28:39
объявления переменных фигурных в скобках
03:28:41
внутри эта структура данных представляет
03:28:44
из себя хэш таблицу Что такое
03:28:46
хеш-таблица выходит за рамки этого курса
03:28:49
но Неплохо бы знать что это такое Я
03:28:51
советую на начальном этапе прочитать
03:28:54
книжку грокаем алгоритмы она даст вам
03:28:57
первоначальное представление о том как
03:28:59
работают алгоритмы чтобы Вы могли уже
03:29:02
дальше углубляться в эту тему потому что
03:29:04
она очень
03:29:10
важна Итак следующая тема сортировка и
03:29:13
фильтрация вообще частенько вижу что
03:29:16
понимания этих терминов Нет давайте
03:29:18
объясню на пальцах Что такое сортировка
03:29:21
в сортировке не изменяется количество
03:29:24
элементов меняется только их порядок по
03:29:26
определённому принципу сортировка может
03:29:28
быть по возрастанию по убыванию если мы
03:29:31
сортируем слова Например то мы можем
03:29:34
сортировать их по длине этих слов и так
03:29:36
далее в фильтрации же конечная выборка
03:29:40
может меняться например мы можем
03:29:42
отфильтровать только чётные числа
03:29:45
Давайте посмотрим как это делается в
03:29:47
Python допустим у нас есть вот такой
03:30:01
массив давайте
03:30:03
отсортируйте это при помощи функции
03:30:10
sorted
03:30:13
и
03:30:14
запри S
03:30:17
frs Обратите внимание поменялся порядок
03:30:20
элементов А сейчас массив отсортирован
03:30:24
по алфавиту от меньшего к большему
03:30:28
дефолтные сортировки всегда идут от
03:30:30
меньшего к большему а также Давайте
03:30:32
посмотрим изменился ли первоначальный
03:30:36
список первоначальный список остался тем
03:30:38
же допустим нам нужно делать тоже
03:30:42
самое только отсортировать в обратном
03:30:45
порядке Мы просто доки дым функцию
03:30:48
sorted аргумент
03:30:51
reverse
03:30:53
True Смотрим
03:30:56
А как мы видим сортировка в обратном
03:30:58
порядке Как сделать так чтобы
03:31:00
отсортировать слова например по длине
03:31:03
нам нужно пробросить функцию sed ещё
03:31:06
один аргумент ключ сортировки ключ
03:31:08
сортировки - Это обычно функция и
03:31:11
передаётся она как объект я сейчас
03:31:13
объясню что это такое Давайте напишем
03:31:16
вот такую функцию sort by
03:31:19
L она возьмёт какой-то элемент
03:31:23
а
03:31:24
и
03:31:26
вернёт длину этого
03:31:29
элемента так сразу же сделаем аннотации
03:31:33
для этой функции функция когда
03:31:36
вызывается у неё синтаксис Мы в скобках
03:31:41
пробрасывается
03:32:10
обекты в пайне вообще всё это объекты и
03:32:14
как и Любой объект функцию можно
03:32:16
передавать в другие функции как аргумент
03:32:18
например
03:32:22
и давайте сделаем
03:32:26
это передаём первым аргументом list
03:32:31
Fruits
03:32:34
и в аргумент Ke кладём нашу функцию sort
03:32:39
byen обязательно без скобок потому что
03:32:41
мы её не вызываем что там произойдёт под
03:32:44
капотом под капотом он вызовет вот эту
03:32:47
функцию с каждым элементом массива
03:32:50
получит результат по ней и уже этот
03:32:53
результат
03:32:56
отсортируйте напишем А давайте посмотрим
03:33:00
что
03:33:02
получилось и он отсортирован к большему
03:33:06
от Date дочери Давайте посмотрим ещё
03:33:09
одно применение
03:33:11
при сортировке допустим у нас есть
03:33:13
список из объектов каких-то персон у них
03:33:18
есть какие-то признаки и нам нужно
03:33:20
список отсортировать допустим по
03:33:22
возрасту мы пишем функцию sort by H
03:33:28
которая принимает какой-то элемент
03:33:32
Давайте Пусть это будет не элемент а
03:33:35
Person типа дикт и она будет возвращать
03:33:40
возраст наш Возраст - это переменная
03:33:43
типа
03:33:46
int и просто
03:33:51
пишем Person
03:33:59
Age То есть когда мы
03:34:02
засовывая какой-то объект типа dict в
03:34:06
эту функцию она просто возвращает
03:34:08
возраст и уже этот возраст
03:34:24
сортируется S by и обязательно без
03:34:27
скобок и заприте
03:34:34
это а Первый элемент стал Боб потому что
03:34:39
у него возраст 20
03:34:42
Обратите внимание это отличается от
03:34:43
первоначальной выборки затем Элис затем
03:34:46
Чарли допустим нам нужно сортировать
03:34:49
сразу по двум признакам то есть пусть у
03:34:52
нас в первоначальной выборке будет
03:34:55
несколько объектов с одним и тем же
03:34:57
возрастом давайте мы условимся что в
03:34:59
случае когда у объектов одинаковый
03:35:02
возраст Мы хотим отсортировать их по
03:35:05
алфавиту и пишем функцию которую мы
03:35:09
передадим как ч
03:35:12
сортировки sort by H
03:35:15
name элемент dict будет и вернёт он
03:35:21
массив из Инта и
03:35:24
строки Точнее не Масси
03:35:27
atle и
03:35:31
просто сюда возвращаем Element
03:35:34
Age и
03:35:37
Element
03:35:39
name
03:35:45
и вызываем функцию с
03:35:53
ключами смотрим что
03:35:57
получилось Боб Элис Затем идёт Чарли
03:36:01
потому что Чарли буква си раньше
03:36:03
расположена чем буква и Диана функция
03:36:06
фильтр похожа на функцию sorted в пайне
03:36:10
она также принимает какой-то массив
03:36:13
данных и ключ для фильтрации только если
03:36:17
ключ для сортировки возвращал какую-то
03:36:20
скалярную единицу которую можно сравнить
03:36:23
с другой например там когда мы
03:36:25
сравнивали длину длина слова три она
03:36:28
меньше чем длина слова пять в фильтрации
03:36:30
функция ключ должна возвращать значение
03:36:33
Бул или в зависимости от того
03:36:36
удовлетворяет ли элемент какому-то
03:36:38
условию и Должен ли он оказаться в
03:36:40
конечной выборке То есть например когда
03:36:42
мы фильтруем числа и нам нужно выбрать
03:36:45
чётное то нечётные числа будут
03:36:47
возвращать Фолс от этой функции а чётные
03:36:50
числа будут возвращать когда мы передаём
03:36:53
в эту функцию True Давайте
03:36:55
напишем такую
03:36:57
функцию из even число является чётным А
03:37:02
сюда какой-то N приходит и
03:37:08
возвращается бул и просто возвратим
03:37:12
остаток отделения N на 2 равно
03:37:17
нулю пусть у нас есть массив каких-то
03:37:20
чисел и отфильтрованные числа мы получим
03:37:24
следующим образом функцию фильтр сначала
03:37:27
пробрасывается
03:37:28
функция ключ а
03:37:32
потом массив
03:37:35
А
03:37:38
давайте распечатаем
03:37:42
отфильтрованные числа а функция фильтр
03:37:44
возвращает объект класса фильтр И для
03:37:48
него нет вывода в терминал какого-то
03:37:51
читаемого значения нам нужно результат
03:37:54
завернуть в
03:37:57
лист и тогда будет всё нормально И как
03:38:00
мы видим результат он
03:38:03
отсортированные числа также можно делать
03:38:05
с списком объектов каких-то допустим
03:38:10
нужно отфильтровать людей из этой
03:38:13
выборки которым больше 18 мы пишем
03:38:15
функцию ключ которая будет
03:38:18
фильтровать Она будет принимать об
03:38:21
Person который dict и будет возвращать
03:38:26
Bull и вернём просто Person
03:38:31
Age больше
03:38:34
18 так больше либо
03:38:39
равно
03:38:45
обязательно заворачиваем результат в
03:38:47
лист А сюда кладём
03:38:50
функцию без скобочек
03:38:53
и масив
03:38:59
нтим в финальной выборке оказались люди
03:39:03
старше 18
03:39:07
лет У нас есть проблематика вот есть
03:39:10
различные функции сортировки фильтрации
03:39:13
есть ещё некоторые функции которые
03:39:15
принимают на вход какой-то ключ нам
03:39:17
Обычно вот такой ключ нужен всего один
03:39:20
раз если мы будем всё это хранить в
03:39:22
кодовой базе то мы будем загромождать
03:39:24
код и в пайтоне есть такой механизм
03:39:27
объявить функцию очень коротко и этот
03:39:30
механизм называется лямбда функции вот у
03:39:32
нас была такая
03:39:34
функция sort by Len Она принимала
03:39:37
какой-то
03:39:39
элемент была строка и возвращала
03:39:42
int
03:39:45
мы возвращали просто Len Element Как
03:39:48
выглядит лямбда функция которая делает
03:39:51
то же
03:39:52
самое ключевое слово лямбда дальше мы
03:39:55
сразу же пишем аргумент который она
03:39:57
получает на вход здесь могут быть
03:39:59
несколько элементов
03:40:02
двоеточие Len Element то есть Обратите
03:40:05
внимание вместо слова
03:40:07
Def слово лямбда названия функции нет
03:40:11
сразу идёт аргумент двоеточие и то что
03:40:14
возвращается Давайте просто при своим
03:40:18
это в какую-то переменную чтобы понять
03:40:21
что это вообще
03:40:24
работает и туда передадим
03:40:30
А давайте чтобы сравнить я
03:40:33
вызову верхнюю функцию S by сюда передам
03:40:37
слово банана и
03:40:41
лямбду вызову с банана
03:40:48
внутри и там и там получился шесть То
03:40:51
есть это один и тот же синтаксис но
03:40:54
сейчас мы можем делать следующее У нас
03:40:57
есть массив фруктов например и мы хотим
03:41:00
их отсортировать по
03:41:06
длине и мы пишем также функци
03:41:10
который
03:41:11
принимает list frs и здесь мы просто
03:41:15
пишем лямда
03:41:17
функцию который принимает элемент и
03:41:23
возвращает длину
03:41:28
элемента так да я забыл здесь
03:41:32
а поставить что это ключ У нас сделать
03:41:36
этот аргумент
03:41:39
именованным
03:41:40
сейчас всё работает лямбда функции Также
03:41:42
можно вставлять в другие встроенные
03:41:45
функции пайтона например Max minan и так
03:41:48
далее давайте сделаем так чтобы функция
03:41:51
Max вернула нам один элемент из этой
03:41:55
выборки и условие этого элемента должно
03:41:58
быть что это самое длинное
03:42:03
слово переменная longest Word функция
03:42:07
встроена Max сюда передаём наш масив frs
03:42:12
и
03:42:23
пишем и принти самое длинное
03:42:27
слово Несмотря на то что слово банана и
03:42:29
слово Черри одинаковой длины слово
03:42:32
банана шло раньше и поэтому он вернул
03:42:36
Именно его в блоке есть домашнее задание
03:42:38
обязательно ознакомтесь с ним и
03:42:40
выполните ответ там
03:42:46
прилагается TR Accept Давайте начнём
03:42:49
Погружение в эту тему с того что напишем
03:42:52
функцию которая находит среднее
03:42:56
значение в функцию заходит какой-то
03:43:03
лист из
03:43:05
чисел и на
03:43:08
выходе возвращается Flat среднее
03:43:12
значение и функция устроена следующим
03:43:15
образом мы
03:43:17
берём
03:43:20
сумму чисел так я тут лишние скобки
03:43:24
поставил делим
03:43:27
на длину массива чисел так получаем
03:43:31
среднее значение и Давайте проверим что
03:43:34
всё
03:43:38
работает
03:43:41
передадим сюда вот такой
03:43:46
массив всё классно но Что будет если мы
03:43:50
передадим просто пустой массив длина
03:43:54
этого массива будет ноль и это будет
03:43:56
деление на ноль как отреагирует на это
03:44:00
интерпретатор
03:44:02
zis мы разделили на Но это
03:44:06
неприемлемо и наш код ул с ошибкой
03:44:10
бы вот здесь Было бы что-то
03:44:15
ещё то до этого места код просто не
03:44:19
достанет а ошибки вообще в коде это не
03:44:21
страшно Но иногда у вас может работать
03:44:23
сервер если на сервере произойдёт ошибка
03:44:26
то сервер упадёт и поэтому нам эти
03:44:29
ошибки нужно как-то перехватывать и
03:44:31
делать так чтобы программа что-то делала
03:44:33
Если она падает с ошибкой для этого
03:44:36
существует следующий синтаксис А давайте
03:44:39
оставим исполнение функции
03:44:41
здесь есть блок
03:44:45
Try естественно дальше чтото что внутри
03:44:49
блоке TR нужен отступ и дальше следует
03:44:53
ключевое слово Accept после ключевого
03:44:56
слова Accept мы перечисляем ошибки
03:44:59
которые могут при исполнении этой
03:45:01
функции случиться пример division
03:45:04
Error ошибка которая упала у нас здесь
03:45:11
и Давайте
03:45:13
[музыка]
03:45:14
запри The list is
03:45:17
empty и посмотрим что будет сейчас
03:45:19
программа зашла вот в этот
03:45:21
блок он упал с ошибкой Zero division
03:45:25
eror всё перешло вот сюда в итоге
03:45:29
интерпретатор запри что лист пустой и
03:45:33
дальше исполнение программы пошло дальше
03:45:35
если бы здесь был не пустой массив то
03:45:38
а он бы его вычислил Давайте его запри
03:45:46
просто то он его вычислил и пошёл дальше
03:45:50
по исполнению то есть в этот блок уже не
03:45:54
заходил интерпретатор в блоке про
03:45:56
запросы у нас был вот такой кусок кода
03:45:59
мы шли в апе бинанса и узнавали
03:46:02
стоимость биткоина к доллару Давайте
03:46:04
посмотрим что будет если выключить
03:46:06
интернет я сейчас потуш свой wi-fi и
03:46:10
посмотрю что случится с исполнением
03:46:13
этого
03:46:15
кода Код упал с ошибкой
03:46:21
ошибка requ exceptions
03:46:25
Connection он говорит что после
03:46:27
нескольких походок он сделал несколько
03:46:31
Раев он не Достучаться до этого ресурса
03:46:35
и так как мы частенько в коде делаем
03:46:38
какие-то походы разные а то нам нужно
03:46:41
как-то оборачивать исключения и Давайте
03:46:44
просто напишем что делать коду если у
03:46:47
нас случился Connection Error мы уже
03:46:49
весь блок убираем в Try берём выделяем
03:46:53
весь массив кода нажимаем Tab чтобы код
03:46:55
отступил Accept и здесь
03:47:00
пишем путь ошибки указан здесь путь из

Описание:

Скидка 20 000 ₽ по промокоду ILIN на профессию Python-разработчик и другие курсы Skypro. Оставляй заявку и получи бесплатную карьерную консультацию - https://sky.pro/courses/programming/python-web-courses_proftest?erid=LjN8JxfRR 🔥Skyeng: https://develop.skyeng.ru/it-english?source_type=vlogger&manager=abasova&workflow=adults&product=type-it_developer_course%7Cname-skyeng&service=english&study=individual&erid=LjN8KYYn3 пройди бесплатную диагностику своего английского. https://study.skyeng.ru/1000words?source_type=vlogger&manager=abasova&workflow=adults&product=type-skyeng_magnet%7Cname-1000words&service=english&study=individual&erid=LjN8KYYn3 скачай бесплатно 1000 слов на все случаи жизни. Курс по Python для начинающих. После прохождения курса вы начнёте уверенно использовать синтаксис Python для разных задач. ❗Роадмап Python бэкенд-разработчика почти без вложений денег: https://t.me/digital_ninjaa/135 ❗Чат, с другими участниками, где можно задавать вопросы: https://t.me/+NkGOlRwwG404YzEy Мои социальные сети: Поддержать канал на Boosty: https://boosty.to/digital_ninja Telegram: https://t.me/digital_ninjaa Twitter: https://twitter.com/digital_ninjaaa Instagram: https://www.facebook.com/unsupportedbrowser Ссылки, используемые в курсе: 1. Онлайн-интерпретатор: https://www.online-python.com/ 2. Установка Python на компьютер: https://www.python.org/downloads/ 3. PyCharm Community Edition: https://www.jetbrains.com/pycharm/download/ 4. Репозиторий с кодом курса: https://github.com/jjoskey/python_beginners_course 5. Документация к открытому API Binance: https://binance-docs.github.io/apidocs/spot/en/#symbol-price-ticker 6. Visual Crossing, бесплатный API погоды: https://www.visualcrossing.com/weather-api 7. JSON Formatter: https://jsonformatter.curiousconcept.com/ 8. Официальный бот от Telegram для регистрации других ботов: https//t.me/BotFather 00:00:00 - Интро 00:03:00 - Функция print 00:05:50 - Переменные 00:10:04 - Числа (int) 00:22:47 - Булевый тип (bool) 00:31:11 - Условные операторы 00:42:03 - Строки (str) 00:58:47 - Установка софта 00:59:25 - Установка на Windows 01:01:57 - Установка на macOS 01:04:46 - Списки (list) 01:19:59 - Индексы и слайсы 01:30:56 - Цикл for 01:44:02 - Функции 01:57:03 - Область видимости переменных 02:06:29 - Цикл while 02:27:24 - Кортежи (tuple) 02:31:13 - Словари (dict) 02:39:58 - *args, **kwargs 02:51:26 - json 02:55:41 - import 03:03:33 - Установка сторонних библиотек 03:04:05 - Библиотека requests 03:12:49 - Списочные включения 03:23:02 - Множества (set) 03:29:06 - Функции sorted и filter 03:39:04 - lambda функции 03:42:43 - Обработка исключений 03:48:02 - Классы 04:23:28 - Декораторы 04:40:14 - Простейший telegram bot 04:51:42 - Дата и время 04:57:52 - Работа с файлами 05:05:15 - Менеджер контекста 05:06:38 - Изменяемые и неизменяемые структуры данных 05:26:28 - Заключение

Готовим варианты загрузки

popular icon
Популярные
hd icon
HD видео
audio icon
Только звук
total icon
Все форматы
* — Если видео проигрывается в новой вкладке, перейдите в неё, а затем кликните по видео правой кнопкой мыши и выберите пункт "Сохранить видео как..."
** — Ссылка предназначенная для онлайн воспроизведения в специализированных плеерах

Вопросы о скачивании видео

mobile menu iconКак можно скачать видео "Python — полный курс для начинающих. Этот навык изменит твою жизнь."?mobile menu icon

  • Сайт http://unidownloader.com/ — лучший способ скачать видео или отдельно аудиодорожку, если хочется обойтись без установки программ и расширений. Расширение UDL Helper — удобная кнопка, которая органично встраивается на сайты YouTube, Instagram и OK.ru для быстрого скачивания контента.

  • Программа UDL Client (для Windows) — самое мощное решение, поддерживающее более 900 сайтов, социальных сетей и видеохостингов, а также любое качество видео, которое доступно в источнике.

  • UDL Lite — представляет собой удобный доступ к сайту с мобильного устройства. С его помощью вы можете легко скачивать видео прямо на смартфон.

mobile menu iconКакой формат видео "Python — полный курс для начинающих. Этот навык изменит твою жизнь." выбрать?mobile menu icon

  • Наилучшее качество имеют форматы FullHD (1080p), 2K (1440p), 4K (2160p) и 8K (4320p). Чем больше разрешение вашего экрана, тем выше должно быть качество видео. Однако следует учесть и другие факторы: скорость скачивания, количество свободного места, а также производительность устройства при воспроизведении.

mobile menu iconПочему компьютер зависает при загрузке видео "Python — полный курс для начинающих. Этот навык изменит твою жизнь."?mobile menu icon

  • Полностью зависать браузер/компьютер не должен! Если это произошло, просьба сообщить об этом, указав ссылку на видео. Иногда видео нельзя скачать напрямую в подходящем формате, поэтому мы добавили возможность конвертации файла в нужный формат. В отдельных случаях этот процесс может активно использовать ресурсы компьютера.

mobile menu iconКак скачать видео "Python — полный курс для начинающих. Этот навык изменит твою жизнь." на телефон?mobile menu icon

  • Вы можете скачать видео на свой смартфон с помощью сайта или pwa-приложения UDL Lite. Также есть возможность отправить ссылку на скачивание через QR-код с помощью расширения UDL Helper.

mobile menu iconКак скачать аудиодорожку (музыку) в MP3 "Python — полный курс для начинающих. Этот навык изменит твою жизнь."?mobile menu icon

  • Самый удобный способ — воспользоваться программой UDL Client, которая поддерживает конвертацию видео в формат MP3. В некоторых случаях MP3 можно скачать и через расширение UDL Helper.

mobile menu iconКак сохранить кадр из видео "Python — полный курс для начинающих. Этот навык изменит твою жизнь."?mobile menu icon

  • Эта функция доступна в расширении UDL Helper. Убедитесь, что в настройках отмечен пункт «Отображать кнопку сохранения скриншота из видео». В правом нижнем углу плеера левее иконки «Настройки» должна появиться иконка камеры, по нажатию на которую текущий кадр из видео будет сохранён на ваш компьютер в формате JPEG.

mobile menu iconСколько это всё стоит?mobile menu icon

  • Нисколько. Наши сервисы абсолютно бесплатны для всех пользователей. Здесь нет PRO подписок, нет ограничений на количество или максимальную длину скачиваемого видео.