ym104432846
Вставьте ссылку на видео из Youtube, Rutube, VK видео
Задайте вопрос по видео
Что вас интересует?
00:00:33
Основы Python и тестирование:
  • 1. Курс посвящен изучению основ языка Python в контексте тестирования программного обеспечения
  • 2. Участники узнают практические аспекты языка на лекциях и самостоятельно проверят знания через выполнение домашних заданий
  • 3. Домашнее задание включает написание тестов на основе полученных знаний
00:02:05
Типы данных в Python:
  • Участники обсудили различные типы данных в Python, включая числа (целые и дробные), строки, списки, кортежи и другие
  • Особое внимание уделено особенностям работы с типом данных Decimal и его применению
  • Рассмотрены базовые операции над числовыми типами данных, такие как сложение, деление, умножение, возведение в степень и использование оператора возведения в степень ()
00:05:44
Особенности чисел и дробных значений:
  • В Python реализована поддержка чисел практически неограниченной размерности благодаря динамическому расширению участка памяти
  • Питон поддерживает работу с разными системами счисления (десятичная, двоичная, восьмеричная, шестнадцатиричная)
  • В Python допустимо использование дробных чисел, включая запись дробей через точку
00:10:19
Проблема сравнения дробных чисел:
  • Обнаружена проблема с точностью операций над числами с плавающей точкой в Python, особенно при сравнении результатов тестов с правильными значениями отображаемых в интерфейсах
  • Рассмотрены три возможных подхода к решению проблемы
  • Округление чисел до десятых (не подходит для больших сумм)
  • Преобразование чисел в целые путем умножения на 10^n и последующего деления обратно (наиболее простое решение)
  • Предложено использовать специальный тип данных `decimal` в Python для точного представления чисел и предотвращения ошибок округления
00:21:22
Генерация случайных чисел и тестов:
  • 1. Для тестирования используют случайные числа, фиксируя начальное значение (сид), чтобы обеспечить воспроизводимость результатов тестов
  • 2. Существуют специальные библиотеки для генерации тестовых данных, включая `faker`, позволяющие создавать разнообразные типы данных, такие как имена, адреса и пароли, с возможностью локализации
  • 3. В Python строки могут быть представлены разными способами: в двойных, одинарных или тройных кавычках, позволяя комбинировать символы и использовать специальные символы, такие как новая строка (`
00:53:57
Форматирование и работа со строками:
  • Обсуждалась возможность вызова инструкций по описанию функций Python через документацию, доступную в среде разработки и на официальном ресурсе `docs.python.org`
  • Упоминалось, что для преобразования типов данных (например, чисел в строки и обратно) часто возникает необходимость, поскольку большинство данных, полученных с веб-страниц, представлены в формате строк
  • Поднимался вопрос хранения описания ручных тест-кейсов рядом с автоматическими тестами, однако решение проблемы не было принято окончательно
01:09:20
Конкатенация строк в Python:
  • 1. Для объединения (склеивания) двух строк предложено использовать оператор сложения («+») и символ запятой в качестве разделителя
  • 2. Дополнительно решено добавить пробел после оператора сложения и перед символом запятой
  • 3. В результате конкатенации строк получена итоговая строка, завершающаяся восклицательным знаком
01:10:18
Использование функции format() для форматирования строк:
  • 1. Для объединения строк решено использовать либо символ «+», либо функцию формата
  • 2. Разработан шаблон строки с переменными a и b, где значения переменных будут подставляться через аргументы функции формат
  • 3. Проверена корректность работы функции форматирования на примере вывода строки «hello world»
01:11:43
Применение f-строк в Python:
  • 1. В Python появились новые типы строк (ф строки), позволяющие использовать произвольный код в фигурных скобках, выполняемый во время создания строки
  • 2. Существует устаревший метод форматирования строк через символ `%`, применяемый преимущественно в логировании и реже в других случаях
  • 3. Функция `format` применяется для отложенного форматирования и повторного использования одного и того же шаблона с разными наборами переменных
01:17:50
Преобразование типов данных в Python:
  • Участники обсудили способы приведения типов данных из строки в число и обратно
  • Приведение чисел в строку возможно любым числом, ошибки не возникает
  • Конвертация строки в число возможна только при наличии корректной числовой последовательности, иначе происходит ошибка
01:20:51
Работа со списками в Python:
  • Рассмотрели особенности работы со списками в Python, включая хранение различных типов данных, использование индексов и срезов, выполнение операций добавления, удаления и изменения элементов
  • Узнали о работе с множествами (тип данных, содержащий уникальные элементы), возможности выполнения операций пересечения и вычитания множеств, а также способах избавления от дубликатов в списках через преобразование в множества
  • Озвучены примеры синтаксиса и основных операций над списками и множествами, продемонстрированы практические способы обращения к элементам и выполнению манипуляций с ними
01:30:09
Создание и использование словарей в Python:
  • Рассмотрены особенности работы со словарями (структура данных, хранение пар ключ-значение)
  • Обсуждены преимущества словарей перед списками (быстрая работа с элементами по ключу)
  • Упоминаются методы словарей (`clear`, `pop`, `keys`, `values`, `items`, `get`), используемые для управления содержимым словаря
01:44:23
Изменяемость списков и словарей в Python:
  • В Python передача списка между функциями или присвоение одного списка другому приводят к использованию одной и той же области памяти, что вызывает изменение оригинального списка при модификации копии
  • Для корректной работы с вложенными структурами данных (списками в списках, словарями и др.) рекомендуется использовать метод глубокого копирования (`deepcopy`) из модуля `copy`, чтобы избежать проблем с изменением оригинальных объектов
  • Использование метода простого копирования (`copy`) эффективно только для простых структур данных, однако при наличии вложенных структур он создает поверхностную копию, оставляя оригинальные вложенные объекты доступными через ссылку
01:53:04
Картежи и неизменяемые коллекции в Python:
  • Обсуждались различные неизменяемые типы данных Python (кортежи, множества), включая особенности их использования и ограничения
  • Упоминалось отсутствие стандартного типа данных «замороженный словарь» («фрозендикт») в Python, однако предлагалось создавать его вручную через использование кортежей
  • Предложено домашнее задание, включающее выполнение тестов на питоне, связанных с использованием изученных типов данных, таких как вычисление периметра и площади фигур, удаление уникальных элементов из списка и создание словарей
0: Такс, я думаю, что мы можем начинать потихоньку.
1: О чем мы сегодня с вами будем говорить? Сегодня у нас стартует 1 из 3 занятий по основам питона. Естественно, в рамках курса по тестированию мы сам язык программирования не можем прям
2: Целиком, супер подробно раскрыть и так далее. Более того, многие детали мелочи вы будете узнавать только лишь на практике. Это в целом вполне себе нормальная ситуация. И если, к примеру, у вас есть какой-то опыт каких-то просто
3: Вопросов по питону это будет на самом деле огромным огромным плюсом или если ещё нет, то может быть для опять же практики для проверки своих знаний, даже после вот этих 3 лекций какие-то
4: Моменты почерпнуть из просто бесплатных открытых курсов по питону будет полезно. В целом мы с вами, естественно, будем говорить только про основы. И в некоторых местах я буду акцентировать внимание.
5: На, может быть, особенности языка или какие-то моменты, которые будут важны именно в тестировании. Соответственно, мы не просто изучаем сегодня питон, мы все равно на какие-то моменты тестирования будем обращать внимание, собственно,
6: Найти особенности языка, которые могут быть важны в автотестировании, так что без Тестов не останемся. Более того, домашка у нас будет представлять собой как раз-таки написание Тестов. Окей, что мы сегодня рассмотрим? Мы
7: С вами сегодня поговорим про примитивные типы данных, числа и строки и про составные типы данных, списки, словари. Поговорим про изменяемость типов данных. Это очень важный, обязательный совершенно термин, который
8: В питоне особенно важен, может быть, в отличие от других Языков программирования, мы обязательно сегодня это с вами рассмотрим. Я, конечно же, тут уже написал, какие типы данных мы сегодня будем смотреть, но спрошу вас, как
9: И вы знаете, типы данных, с чем вы уже работали. Скорее всего, вы работали с числами и строками, но, может быть, ещё с какими-то, естественно, это не все типы данных, которые в питоне есть. Но, собственно, расскажите про ваш опыт. Можно просто в чат написать, с чем работали. А если
10: Приведёте какие-нибудь классные примеры, условно какие данные могут быть представлены в виде списков? Например, да, что может быть списком у нас в тестах будет вообще замечательно.
11: Вот кортежи децимал децимал это прям замечательно, мы сегодня отдельно тему про decimal посмотрим откуда он взялся, зачем он нужен, какую проблему он решает это очень здорово, что вы с ним работали болевые обязательно да, но мы
12: Сегодня не будем про него говорить. Массивы. Скорее всего, когда вы говорите массивы применительно, н, вы, скорее всего, имеете ввиду просто лист это немножко другое. Между массивом и списком есть некоторые различия.
13: Кортежи, да, про кортежи тоже сегодня чуточку поговорим. Флот. Угу. Классно. Окей, давайте тогда приступать и смотреть, что у нас все-таки есть самое простое, о чем мы можем с вами поговорить.
14: Это как раз-таки просто числа да, тип данных int integer то есть целое число или тип данных float это дробное число, с ними все предельно просто, но опять же с некоторыми особенностями давайте просто посмотрим как они могут.
15: Быть, как они могут быть записаны, что с ними можно делать и так далее, и так далее. Присвоим, создадим просто какую-нибудь переменную в неё запишем значение. 1, 2, 3. Давайте. Да, это мы просто присвоили какое-то число в
16: Собственно, нашу переменную. Дальше можем использовать эту переменную. Что мы с этим числом можем сделать? Мы можем прибавить к нему, например, какое-нибудь другое число, да, мы можем вычесть из него
17: Мы можем поделить на число, мы можем умножить на число, мы можем что сделать? Возвести в квадрат, поставив 2 звёздочки, вот этот оператор. Если вот эти ещё более менее очевидны, то оператор
18: 2 звёздочками. Это синтаксис, который есть далеко не во всех языках программирования в питоне. В частности, он есть. Это возведение не в квадрат. Почему я сказал в квадрат это возведение в степень, в степень, вот в эту. Давайте, чтоб не такую большую степень сделать. Возьмём просто тройку.
19: Собственно, операция на числами может быть сколько угодно. Да, это может быть просто выражение. Мы условно берём 1 число, прибавляем другое делим на 3, умножаем там на 4.
20: И так далее, и так далее. И, естественно, везде, где нам нужно, можем поставить операторные скобки. Все предельно просто и очевидно, работает так как, собственно, и ожидается важное момент.
21: Про числа, что мы можем записать?
22: Число практически неограниченной размерности в питоне. То есть я могу сделать вот примерно вот так. И в целом это вполне себе валидное, большое, очень большое число в питоне оно будет совершенно нормально восприни.
23: И над ним можно делать различные операции и так далее. Лимит у чисел в питоне все-таки есть, но он достаточно достаточно большой. Почему я на этом акцентирую внимание? Потому что в разных языках программирования бывает по разному.
24: Собственно, зачастую, к примеру, числовые типы данных в более строгих языках программирования, они ограничены в размерности и ограниченны довольно-таки заметно, скажем так, да, к примеру, в питоне такого
25: Ограничений нет, потому что питон динамически позволяет, скажем так, расширить тот участок памяти, в котором прямо в данный момент хранится вот это число в компьютере, в оперативной памяти, и дописать в него, собственно, тот размер числа, который нужен
26: Из за того, что питон может подобные штуки делать прямо на лету, да, во время работы программы питон считается, скажем так, не супер эффективным, не супер быстрым языком программирования, но, с другой стороны, весов, он позволяет вот так просто работать практически с любыми
27: Размерами чисел на самом деле не только чисел, но и других типов данных. И это тоже несравненный. Плюс, это просто облегчает очень сильно. Именно этап разработки. Собственно, за это питон и любят
28: Что мы можем ещё сказать про числа? Мы можем использовать разные системы счисления, когда мы пишем числа и, собственно, делаем над ними операции. Понятное дело, что вот это просто у нас десятичные числа. Можем мы использовать
29: Шестнадцатиричные. Давайте начнём с двоичных чисел для того, чтобы написать двоичное число, мы ставим префикс 0 и букву б бинни и дальше пишем, собственно, какое-то двоичное число, и оно будет сохранено именно в этой системе счисления все замечательн.
30: Даже если я попробую писать какие-то другие цифры, в данном числе даже сама нам подсвечивает о том, что это какая-то невалидная, странная конструкция, и мы здесь написали ерунду, точно также пишутся восьмиричные
31: Числа, да, вот, да, начиная с восьмёрки, у нас, собственно, подсвечивает, что какая-то ерунда и точно также пишутся шестнадцатиричные 8, 9 0. А. Б, ц д е ф.
32: J уже не влазит, да, собственно, если вам вдруг в вашей работе почему-то нужны подобные штуки, вполне себе можно, к примеру, не знаю, так как я.
33: Работа с различными криптовалютами, подобный подобный вариант записи каких-нибудь приватных ключей или чего-нибудь подобного. Это, собственно, постоянно используемая штука. Окей, что ещё?
34: Очевидно, что мы можем писать просто дробные числа, да, 0 5, да, просто записываем число через точку. Это дробное число. С ним тоже так же точно можем делать все те же самые операции. Очевидно, что при делении мы также точно получим дробное число на самом
35: Деле и как раз подробные числа. Хочется на 1 момент немножко заострить ваше внимание. Момент следующий. Давайте мы прям попробуем вывести нашу переменную, а в данный момент
36: Вот здесь вот мы выведим число 0 5. Последнее, присвоенное. Далее ниже мы выведем число, как не трудно догадаться. 0 3. Да, все согласны, что 0 1 + 0 2 будет равно 0 3. Давайте.
37: Даже не принц. Сделаем. Я сделаю асерт, ассерт, а равно равно 0 3. Пройдёт ли этот ассерт, как вы думаете?
38: Да.
39: Все, все ли в этом уверены?
40: Собственно, вопрос, конечно же, с подвохом, потому что если б все было так просто, я бы не спрашивал. Вот как раз человек, который работал с демо, да, Александр, кажется, знает, в чем, в чем, в чем будет дело, собственно.
41: Давайте проверим, мы можем просто запустить наш файл исполнение и, как ни странно, серт не проходит. Вот мы напечатали 0 5 вот здесь, а 0 1 + 0 2, почему-то 0 3. Неровно. Давайте, собственно, проверим почему
42: 0 3, не 0 3 3, а переменная.
43: Запускаем и вот какой у нас результат получается мы не получили ровное число 0 3. Вместо этого мы с каким-то там огромным длинным хвостом получили в конце четвёрку
44: Почему это происходит? Как вы думаете, кто, кто знает, почему так происходит?
45: Есть целый специальный сайт, объясняющий эту проблему. Это, собственно, проблема не специфична. Питона это проблема в принципе, с тем, как в современных архитектурах компьютеров, в современных архитектурах процессов считают
46: Дробные числа, операции с плавающей точкой. Не буду подробно вдаваться в то, как они считаются, но вы можете здесь полистать и увидеть, что подобная проблема есть ну чуть ли не во всех языках программирования современны.
47: Вот, в том числе потом 3, эта проблема спокойно воспроизводится и во 2 питоне, и так далее, и так далее. Здесь, собственно, достаточно много представлено. Давайте я даже эту ссылку оставлю к сегодняшнему.
48: Занятию. Собственно, суть в том, что подобное допущение, оно имеет смысл, оно, как минимум, оно несёт в себе, скажем так, оптимизацию, да, то есть считать числа с плавающей запятой, это достаточно часто
49: Операция. И если условно мы не можем считать это достаточно точно, то условно давайте не считать это достаточно точно просто для того, чтобы не замедлять кардинально наши отчёты, потому что подобные
50: Далеко не всегда нужна так, what естественно, в тестировании. Когда мы говорим про подобные штуки, это может быть супер важно. Да, мы написали ассерт, мы ожидали конкретное значение. И это значение, собственно, мы не получили. Мы получили ошибку и
51: Собственно, где это может выстрелить? К примеру, предположим, что мы считаем, у нас есть условно какой-нибудь кошелёк, да, на нашем веб сайте, и мы считаем его баланс, когда
52: Мы, не знаю, там прибавляем к нему какую-то сумму или вычитаем какую-то сумму, да, сумму там с копейками, естественно. Вот. И, соответственно, когда мы делаем там какую-то операцию, например, покупаем что-нибудь, да, мы ожидаем, что из суммы вычтется какое-то число дробное и
53: Собственно, мы считаем и сравниваем с тем, что мы должны в итоге получить. И в веб интерфейсе мы получаем правильное число, потому что там написан правильный код, который правильно это посчитает. А в тесте мы делаем какую-то вот такую операцию и в итоге у нас сравнение не проходит, потому что мы
54: 2 разных числа 1 число, точное и правильное, и красивое в интерфейсе, а другое число, которое мы в тесте посчитали для того, чтобы проверить и подобные расхождения, это правда, частая проблема, и я сам на своей практике пару раз с таким сталкивался, и надо было это
55: Исправлять. Собственно, давайте попробуйте подумать, как мы можем эту проблему исправить самостоятельно, не прибегая к каким-то специальным типам данных и так далее и так далее.
56: Как как как-нибудь по простому то придумайте простой способ, как мы можем написать правильный ассерт, да, чтобы вот этот ассерт, собственно, у нас сработал, как мы можем или сложить? Может быть эти 2 числа мы можем как-то по другому
57: Есть ли у вас идеи?
58: Очень плохо слышно.
59: К сожалению, не разобрал.
60: Простите, микрофон округлить до десяток. Может быть, попробуем?
61: Округлить до Десятых, да, в целом это решение, когда мы действительно можем пренебречь, да, какой-то частью знаков после запятой. И, собственно, действительно просто взять и округлить. Это, правда, решение, но
62: Если мы, к примеру, опять же работаем с деньгами, да, ведём какой-то, введём какие-то сложные подсчёты, вот этот вот остаток может однажды очень сильно нам навредить, просто потому что мы, ну, мы не можем
63: Округлить, да, если мы считаем какой-то большой большой хвост копеек там и так далее, скорее всего, мы не можем просто так взять и округлить с какой-то приемлемой точностью другое решение. Здесь может быть это просто не округлять никаких
64: Числа здесь, а работать с дробными числами так, будто это целые числа. Ну, то есть, домножить оба эти оба эти числа просто на 10, да? Ну или там, в зависимости от нужной вам точности на сколько-то.
65: Нулей, то есть сдвинуть эту запятую так, чтобы её в принципе не было. И, соответственно, сложить эти 2 числа просто как целые числа, собственно, 1 + 2 равно 3. С этой операцией никаких проблем здесь не будет. И дальше просто разделить обратно. Да, это просто сдвиг запятой, и мы получим верный
66: Число это тоже вполне себе решение. Так можно сделать. И 3 вариант наиболее правильный. В данном случае это как раз-таки использовать специальные типы данных для таких точных подсчётов. Собственно, повторюсь, что не везде
67: Подобные подсчёты нужны, но в питоне есть тип десма специальный, который как раз-таки позволяет эту проблему решить, это гораздо более точный тип данных, и в нём этой проблемы.
68: Не будет, если его использовать. Более того, есть просто специализированные на самом деле библиотеки для точных вычислений, для работы с высокой точностью, но это уже тема для немножко отдельного разговора. Так вот.
69: Вы когда пишите тесты, когда сравниваете подобные числа, вы просто должны держать в голове о том, что подобная проблема, да, при обычных, совершенно математических операциях с числами, может с дробными числами может возникнуть, и вы должны
70: Данных в таких моментах, собственно, применить какое-то из решений округление зачастую не самое лучшее решение сдвиг.
71: Сдвиг дробной части так, чтобы это стало целое в целом нормальное решение, но это вам нужно будет написать код, который это делает. Это немножко усложняет вашу работу. Ну а просто использование специального типа данных в определённых местах, да, это, это, собственно, вполне
72: Себе решение. Окей, что мы ещё можем делать с нашими числами? Конечно же, у нас есть целый отдельный пакет в питоне, который называется математика масс. Да, в нём есть огромный
73: Количество различных функций для работы, собственно, с числами из по сути школьного курса математики, да, косинусы, синусы, тангенсы, катангенсы, корни, округления и
74: И так далее, и так далее, и так далее. Конечно же, на всех останавливаться я не буду. Логарифмы можно взять возведение в степень. Опять же, здесь также точно есть функция возведения в степень, если вам, к примеру, не очень привычен вот подобный синтаксис и
75: В целом, что мы можем ещё из этого пакета полезно извлечь. В этом пакете есть пара констант, которые опять же с определённой точностью у нас просто сохранены прям в самом питоне мы ими можем
76: Пользоваться, к примеру, число, да, естественно, просто с какой-то приемлемой точностью, которая считается, что, скорее всего, вам будет её достаточно.
77: Ну и в общем то мы можем просто это дело импортировать и использовать у себя в коде.
78: У нас точка p числа, конечно же, можно генерировать какие-то случайные да, мы можем генерировать случайные числа для того, чтобы использовать их в тестах, и собственно тема случайных чисел или вообще случайных.
79: Данных. Это тоже совершенно огромная тема именно для Тестов, потому что в целом тестирование на каких-то случайных данных это очень важная часть тестирования. Приходилось ли вам работать с
80: Данными. И как вы считаете, хорошо ли это вообще писать такие тесты, которые всегда будут тестироваться на каких-то случайных данных? Или здесь есть какие-то проблемы?
81: Да, кажется, я ушёл.
82: Не в тот проект, пока вам рассказывал в целом материал, конечно же, один и тот же, но почему-то я его закрыл.
83: Ну, наверное, ничего страшного. Да, у нас тут все есть, все прекрасно. Давайте я закрою. Ну, я так понимаю, будет проблема в генерации этих чисел. Ну, то есть они могут просто некорректные, там, допустим, вместо интежеров какие-то дробные пойти, как вы говорили, такого?
84: Да, в целом, когда мы тестируемся на каких-то тестовых данных, мы не можем. Ну, проблема, если обобщённо звучит так, что мы не можем гарантировать, что у нас будет всегда один и тот же результат теста, да, и что мы тестируем, по сути, одно и то же.
85: Тесты это очень важная характеристика. Соответственно, когда мы генерируем какие-то случайные данные для наших Тестов, мы должны быть уверены, что эти случайные данные всегда имеют одинаковую одинаковую природу, одинаковые характеристики.
86: А если это числа, это числа, там в определённом диапазоне допустимых для нас это не дробные числа, это там, например, не отрицательные числа, там, где этого нельзя. И, или это не сверхогромные числа, которые просто наша система не поддерживает. Если это строки, то
87: Опять же, да, это тоже определённые форматы строк и так далее, и так далее. Тестовые данные зачастую могут быть полезны, собственно, для генерации каких-то просто заглушек, да, шаблонных тестовых данных, которые используются от теста к тесту.
88: И есть механизмы, есть средства для того, чтобы сделать даже такие тесты, скажем так, повторяемыми. Собственно, что мы можем сделать, в принципе, со случайными. В питоне у нас есть библиотека.
89: И из этой библиотеки мы можем генерировать какие-то
90: Генерировать какие-то данные в самом простом варианте это просто числа используется функция rand int, то есть да, случайное целое число, и мы прям берём и задаём диапазон, в котором это число будет давайте возьмём от нуля до 100.
91: И сделаем принт, просто выведем это число и сделаем подобную операцию 3 раза. Вполне очевидно, что у нас будет 3 разных числа. Давайте запустим наш код.
92: 90, 51, 12. Вот мы получили 3 числа, если я запущу ещё раз, мы, я получу другие данные. То есть наш, наш тест уже, по сути, выполнится не с 90 51, 12, а каждый раз это будут какие-то новые случайные числа.
93: Так вот, мы можем использовать random как средство для заполнения, скажем так, изначальных данных для теста и мы скажем так, можем зафиксировать этот самый рандом, который в тесте будет использоваться для
94: Того, чтобы от запуска к запуску это все ещё были одни и те же данные. Это все ещё будут случайные данные, но это будут одни и те же данные от запуска к запуску, как это выглядит. Вот мы сейчас получаем число числа, такие-то
95: Теперь я беру и делаю следующую операцию. Рандом сид. Я указываю так называемый сид зерно, да, по которому, которое, собственно, используется в алгоритме рандомизации. И если этот
96: И будет константа, да любое вообще слово.
97: Совершенно любое неважно какое, главное, чтобы оно было неизменным от запуска к запуску, то и random наш будет собственно зависеть именно вот от этого слова, а оно у нас не меняется от запуска к запуску и мы будем получать из библиотеки рандом.
98: И те же числа 48, 44, 31 я запускаю ещё раз, и я получаю Ровно эти же самые числа. Так вот, в целом для теста я получил изначально тестовые данные случайные, да, я их не придумывал эти 3 числа.
99: Но они у нас зафиксировались, и все последующие запуски будут именно на этих тестовых данных гоняться это может быть достаточно удобно в тестировании, собственно, для
100: Для генерации различных тестовых данных в питоне есть специальные библиотеки, их 2 известных это faker и 2. Как же называется 2?
101: Я забыл, как называется 2. Если вы знаете, напишите в чат. Собственно, фейкер. Это 1 из самых известных библиотек. Она есть, кстати говоря, не только на питоне, но, да, 1 фейкер робби фейкер, фейкер. Вот. Соответственно, эта штука умеет
102: Тестовые данные совершенно разных типов. Более того, она умеет генерировать какие-то более специализированные типы данных, да, вот, например, генерирует случайное имя. То есть это строка, которая представляет собой, что, ну какой
103: Это текст, похожий на настоящее имя или адрес, это что-то похожее, правда, на настоящий адрес он мог быть так выглядеть, но он, естественно, фейковый, ну или текст это просто, да, текст определённой длины с различными предложениями.
104: И подобных штук много. Более того, у фейкера есть локализация, да, он может генерировать вам имена, например, на русском языке или адреса на русском языке. Такое тоже вполне себе удобно. Русская локаль у него есть, да.
105: Про все специализированные примеры сейчас, конечно же, не буду говорить, но суть в том, что подобный подобная установка вот этого ключевого слова, по которому будут генерироваться следующие тестовые данные, оно применимо и для подобных библиотек.
106: Работает совершенно одинаково соответственно вот эту механику вы должны понимать ну а если вам нужно просто сгенерировать какие-то совершенно обычные случайные числа, вы можете просто воспользоваться модулем random?
107: Окей, ну ещё 1 совершенно небольшой момент, который стоит проговорить про строки. Да, мы уже упоминали о том, что числа можно округлять. Совершенно очевидно, что в питоне есть для этого функция. Она называется раунд, эта функция она build in.
108: Да, билтин, функции это которые доступны у нас просто без какого-то импорта, они вот просто есть и все. Принт, это 1 из таких функций функция 'round. Это тоже такая же точно функция, она позволяет нам округлить какое-то число, например, вот такое дробное, да?
109: До стольки то знаков после запятой, собственно, раунд вот этого числа, до стольки, то знаков после, до 2 знаков после запятой даст нам 1 33.
110: Все предельно просто и понятно. Я думаю, окей, с числами мы проговорили все основное, что я вам хотел рассказать. Давайте я посмотрю в чат и будем двигаться дальше.
111: Есть ли какая-то разница между маспо и 2 звёздочками разницы нет, это разница лишь синтаксическая.
112: Проблемы с воспроизведением багов. Если все на рандоме, как мне кажется, да, вот это хорошее замечание, потому что если у вас, правда, все тесты всегда гоняются на случайных данных, вам будет очень сложно воспроизвести ту ситуацию, когда у вас, например, там действительно возникла ошибка. И, предположим, у вас не
113: Достаточно логируется информации, да, о том, что происходило.
114: Это хорошее замечание использовал random для выбора строки в фильтре.
115: Но не уверен, насколько хорошая практика дом для выбора строки в фильтре.
116: Я предположу, что вы имеете ввиду какой-нибудь рандом чойс, может быть, да, вот эту вот штуку.
117: Вот функция часть позволяет нам выбрать случайный элемент из какого-нибудь списка или коллекции достаточно полезная штука.
118: Насколько это хорошая практика, это, естественно, зависит от конкретного применения, да, то есть одни, одни вещи мы вполне можем случайно выбирать, другие скорее нет, чем, да, мы же не будем, к примеру, я не знаю.
119: Случайно выбирать браузер, на котором мы тестируемся. Да, это, это, это скорее странная практика.
120: Ну, случайно выбирать, не знаю, тестового пользователя, например, да, на котором тестируемся. Это в целом какой-то смысл несёт.
121: Если осторожно опять же зачем тогда seat, если нужно зафиксировать значение, почему их не заходить прямо в коде это может быть трудоёмко опять же в примере с 3 числами это достаточно просто если мы говорим.
122: Про, например, нам для теста нужно сгенерировать 100 емейлов, да, или там нам нужно сгенерировать пользователя, у которого очень много полей. У него есть имя, у него есть адрес, у него есть емейл.
123: Надо придумать классный подходящий пароль, у него есть какое-нибудь описание и ещё там много разных атрибутов, и нам их надо 50 штук для теста. Да, мы тестируем какую-нибудь там банк, операцию, массовую операцию по созданию подобных пользователей. Ну,
124: Мы можем, конечно, это захардкодить, но это очень трудоёмко, и мы можем ошибиться. Более того, когда мы захотим внести изменения в подобный процесс, нам будет очень больно править все 50 записей условно, соответственно, подобные
125: Практики рандома, они вполне имеют себе место быть
126: Значение в интервале, в рандоме не включительно, то есть сотни никогда не будет до 99.
127: Что в скобках написано, смысла особо не имеет. Здесь любая Константная строка. Можете вот так вот написать, она тоже вполне себе будет. Окей.
128: То есть, то есть какой-то прям логики за этого здесь нет, за этим. Окей, двигаемся дальше. Дальше. У нас тоже вполне себе вам знакомый тип данных. Это строки, строки. Вы тоже все видели. Я думаю, строки у нас пишутся в кавычках.
129: В каких кавычках пишутся строки вопрос такой к вам, понятное дело, что вы здесь видите двойные кавычки.
130: Ну, может быть, ещё какие-нибудь, знаете?
131: Если нотации типов в классах, там, по моему, тройные кавычки. Угу. Есть тройные кавычки. Да, собственно, давайте разберёмся с кавычками. Питон немножко здесь тоже.
132: Даёт некоторую свободу, потому что в других языках программирования это зачастую не так прям свободно и просто. Давайте посмотрим собственно, мы можем писать строки просто в Двойных кавычках мы можем писать строки в
133: Одинарных кавычках. И вот в такой записи здесь вообще нет никакой разницы. 2 варианта написания кавычек. Они нужны для того, чтобы в 1 строке мы могли использовать спокойно кавычки другой строки. Да, я вот здесь внутри.
134: Одинарные кавычки могу совершенно спокойно использовать, и это окей. Здесь же, в в строке с одинарными кавычками я могу использовать внутри двойные, да, и это не ломает строку, если я здесь поставлю посередине двойную
135: Кавычку. Все, он у меня вот эта часть строки, она разломалась синтаксически это какая-то ерунда получилась. И также точно здесь наоборот. Если я внутри поставлю одинарную кавычку, у меня вот эта часть строки отломается, потому что фактически строка, она вот здесь закончилась на вот этой
136: Кавычки. Другой вариант. Это, собственно, операция называется на самом деле экранирование. То есть мы таким образом, используя двойные кавычки, мы, мы экранируем, экранируем внутри все одинарные кавычки мы можем
137: Записать спокойно, используя одинарные кавычки, мы экранируем двойные кавычки внутри. Далее есть ещё несколько вариантов. Если мы хотим внутри использовать и одинарные, и двойные кавычки, да, мы можем поступить следующим образом. Можем
138: Записать строку в любых кавычках из них, сделать вот так. Ну, собственно, двойные я могу и так использовать, но я могу сделать, поставить одинарную кавычку и поставить перед ней слэш, то есть вот этот вот символ.
139: Это символ, собственно, опять же, экранирования, это та же самая операция. Мы экранируем символ, одинарные кавычки, чтобы он перестал учитываться как синтаксический символ, да, скажем так. То есть в данном случае экра,
140: Вот эта одинарная кавычка, это будет просто часть строки, а не символ, который закончит эту строку. Да, соответственно, это тоже вполне себе вариант. Обратная операция с двойными кавычками.
141: Здесь мы тоже можем поставить двойную кавычку и точно также её экранировать. Это валидный синтаксис. Ещё 1 вариант экранировать различные символы внутри. Это записать их не просто
142: В двойные или одинарные кавычки, а в тройные двойные.
143: Или тройные одинарные кавычки. Становится уже страшно. Собственно, внутри подобных строк мы можем спокойно вообще писать и двойные кавычки одинарные кавычки, более того, их можем аж по 2 штуки ставить.
144: И это будет вполне себе. Окей, если 3 штуки поставим, опять же, да, наш синтаксис сломается. Но здесь мы тоже можем экранировать подобные символы. В общем, все это сделано. Ну, 1 из причин, почему такое разнообразие
145: Способов это как раз-таки для экранирования, но есть и другие причины. Конечно же, об этом сейчас тоже поговорим. Собственно, строки в Двойных строки, в Тройных
146: Тройных, Двойных и одинарных кавычках. То бишь вот такие вот такие строки. Это также строки, которые на самом деле могут содержать в себе несколько строк текста, да, то есть если в данном
147: Варианте это просто слово hello world в 1 строчку, то здесь мы можем поставить, к примеру, перенос строки вот здесь, да, и это будет 1 строка, которая внутри содержит в себе перенос строки. То есть это несколько строк.
148: Текста, мы можем переносить это дело сколько угодно. Соответственно, когда мы говорим про сохранение какого-то текста многострочного, да, это не просто строка какая-то, а это прям текст то практически
149: Наверняка подобный текст будет сохранён в каких-то Тройных кавычках, либо таких, либо таких. Даже если мы посмотрим на тот же самый фейкер, не было ли здесь примера подобного походу не было, да, хотел вам показать.
150: К примеру, его тут и нет. Ну ладно, ничего страшного. Собственно, это 1 из способов сделать многострочную строчку, то есть записать в неё текст не просто 1 строку, а другой способ.
151: Опять же обычную строку в обычных кавычках.
152: Но использовать специальные символы, специальные символы, они опять же пишутся. Мы пишем специальные символы, начиная с слэша, и ставим, к примеру, слэш н. Собственно, это символ.
153: Новой строки не переноса кореек есть ещё символ переноса корректи это не то, это символ новой строки, соответственно, просто добавление подобного символа. Слэш н внутри строки, да, это не будет воспринято как буква.
154: Это будет воспринято как специальная команда, и в этом месте у нас будет поставлен перенос строки. Это, собственно, равнозначно, что если мы написали данную строку в Тройных кавычках и
155: Поставили бы здесь вот такой перенос строки. Давайте, собственно, проверим если с этим все более менее очевидно давайте проверим, что у нас будет, если мы выведем нашу строчку вот здесь, вот здесь
156: И вот здесь, да, то есть мы видим вот этот многострочный вариант, вот этот многострочный вариант и вот этот
157: Запускаем наш файл. Готово, что у нас получилось? 1 строка многострочная. Вот она, она содержит в себе 4 строчки. 2 строка вот с этим символом. Вот она, да, она действительно содержит себе перенос.
158: И 3, ну это просто многострочная строчка в себе. Перенос строки также точно содержит, когда вы пишите подобную строчку, а просто
159: Обычную строку, да, не многострочную, и нажмёте, к примеру, enter, находясь вот посередине данной строки, произведёт следующее. О, кстати говоря, вот этот синтаксис, по моему, немножко изменился раньше, не так делал, но тем не менее,
160: Так, тоже любопытно, что что, собственно, произошло вот эти скобки, добавил пайчарм и разделил эту строчку на 2 тоже pycharm это произошла так называемая собственно.
161: Как это правильно сказать? Это по сути, конкатинация строки. Он, и он разделил данную строку на 2 разные строчки. Но так как они у нас написаны вот в этих скобках, они, кстати говоря, необязательные. Я могу сделать
162: Вот так.
163: Так как? Да, давайте, правда, что посмотрим оба синтаксиса в таком случае, если он так делает.
164: Да, вот так вот, собственно, что здесь происходит печа, когда я ставлю вот этот enter, он разделяет эту строчку на 2. Это становится 2 разные строки и 2 строки, идущие друг за другом в питоне.
165: Просто даже на самом деле, без всяких символов они, по сути, будут сконкатенированные, ни собьются в 1 строку, соответственно. Но чтобы написать саму команду в питоне в несколько строк мы должны
166: Поставить вот такой вот флешик, вот этот flash обозначает, что команда данная строчка команды ещё не завершена. Мы просто переносим на следующую строчку либо альтернативный синтаксис мы можем взять это все в скобки. Собственно чтобы вы поняли концепцию именно с командами. Давайте
167: Вернёмся в наши числа и посмотрим.
168: Например, ну опять же, да, вот давайте на вот эту вот строчку, к примеру, да, у нас вот есть какое-то длинное выражение, мы можем прям поча, взять и вот здесь вот попросить поставить перенос строки, вот он делает опять же, этот же синтаксис. Интересно, почему
169: Он раньше не так делал, даже удивительно, собственно, он ставит эти скобки, потому что мы как бы разделили 1 команду. 1 выражение это цельное выражение на 2 разные строки. Альтернативно мы можем записать это же самое просто вот
170: Флешком. То есть это не деление. Здесь этот флешек используется просто как символ переноса данного текущего выражения в текущей строчке на следующую строку. Это бывает удобно именно для просто красивого удобного форматирования вашего
171: Кода это не никак не влияет на его работу, но удобно именно с точки зрения того, что мы можем как-то длинную, длинное выражение, длинную команду разделить на несколько строк.
172: Ну и, соответственно, 2 строчки подряд идущие, они будут скортировано, они будут склеены в 1 строку. Давайте проверим и с
173: Делите, чтоб у нас тут было чуточку более понятно. И да, вот он, а у нас склеился в 1 строчку. Красота работает собственно, подобных спецсимволов на самом деле.
174: В строках много на них останавливаться особого смысла нет, их, правда, достаточно много, и они достаточно редко используются, совершенно используются часто это символ переноса, и в питоне есть так называемые специальные сырые строки.
175: Которые позволяют нам писать подобные символы просто как текст. Представьте, что у вас есть какая-то строка, в которой вот данное выражение символов, флэшек и должно просто
176: Выражаться как текст, оно не должно быть воспринято как спецсимвол какой-то, что мы можем сделать, мы можем сделать следующее.
177: Во первых, мы можем поставить слэш н и перед слэшом, который экранирует следующий символ, поставить, собственно, ещё 1 слэш, как это будет работать. Вот этот slash экранирует вот этот slash. Соответственно, вот этот слэш, 2 слэш.
178: Он становится обычным текстом, он перестаёт быть командой, и буквочка н. У нас тоже остаётся просто в тексте.
179: Вывидим её вот он, hello, слэш н. Ворлд теперь вот эти 2 символа, они просто стали частью строки, они не воспринимаются как команда и другой способ сделать тоже самое на самом деле, но для всей строки.
180: А не для конкретного места это добавить перед строкой специальный модификатор буквочку р. Мы можем поставить букву р от слова raw сырой да, это так называемая сырая строка, в которой внутри никакие вообще подобные.
181: Слешик не будут восприняты как команды, соответственно, мы можем здесь писать любой текст с любыми слешик ми. Это будет просто текст.
182: Таким образом, мы получим, собственно, Ровно тоже самое готово.
183: То есть ещё несколько подобных модификаторов. Про 1 из них мы сейчас с вами поговорим, про остальные скорее нет, чем, да. Окей. Что мы можем, собственно, делать со строками ещё?
184: Мы можем строки разбирать на какие-то составные части, да, вполне очевидно, что если у нас есть какое-то большое длинное предложение, мы можем брать отдельно какие-то части из этого предложения и как-то с ними работать.
185: Самый простой частый пример, это, ну, например, разобрать наш емейл на какие-то составные части. Собственно, давайте что-нибудь такое мы сделаем, что мы можем сделать, мы можем
186: У емейла обратиться к какому-нибудь символу, который внутри находится. Давайте, к примеру, возьмём 1 символ в строке для того, чтобы взять 1 символ в строке. Мы после вот этой
187: Переменной, либо на самом деле после любой строки. Вот прям здесь эти квадратные скобки можем поставить собственно ставим квадратные скобки и указываем индекс символа, который мы хотим взять. Собственно, мы возьмём 1, 1 символ и
188: И какой результат мы получим в результате? Да, такой результат мы распечатаем на, а мы берём из этой строчки символ с индексом единица.
189: Да, собственно, ребята, которые уже понимают, что индексация в питоне начинается на самом деле не с единицы, а с нуля, правильно отвечают, что результат будет буква с. Давайте запустим и
190: Действительно, вот она, буква с у нас распечаталась, потому что 1 буква в емейле, это индекс 0. Если мы возьмём емейл, если мы возьмём символ с нулевым индексом, мы получим именно вот этот вот симво.
191: Вот этот синтаксис с квадратными скобками, он на самом деле достаточно мощный. Важно понимать, что когда мы с ним работаем, мы обязательно должны указать символ, который индекс, точнее, который действительно в строке есть, если мы укаже
192: Например, 50, и в строке его не будет. Мы получим очень частую ошибку, которая может встречаться, в принципе, в питоне практически везде. Индекс эр это 1 из самых частых встречаемых ошибок.
193: Она, собственно, достаточно говорящая сама за себя, да, мы обратились к индексу, которого там нет. Мы вышли за пределы. В данном случае строки. Подобная ошибка будет ещё и со списками, но об этом чуть позже, соответственно, 5.
194: 10 индекса у нас нету. Давайте вернёмся к чему-то более лённому. Мы подобным обращением к индексу можем, например, написать какой-нибудь отрицательный индекс. Да, мы можем
195: Написать - 2. В таком случае мы возьмём 2 символ, начиная с конца данной строки.
196: Давайте сделаем. И в данном случае мы вводим букву оо, да, потому что это 2 с конца, минус 1, это м. Далее. Что мы ещё можем делать с данным синтаксисом? Мы можем на самом деле указать
197: Прям целый диапазон символов, который мы хотим из этой строки взять. К примеру. Давайте возьмём с нулевого символа, с самого начала строки по 5. Это синтаксис собственно, диапазона.
198: Граница диапазона это 0 символ. Правая граница диапазона это 5 символ не включительно. Так мы возьмём целую подстроку из нашей исходной строки, да, мы прям вырежем кусок из неё и
199: Выведем на это собачка. Это как раз оно и есть. Что мы ещё можем сделать, мы можем
200: В случае, если мы хотим взять данный слайс, да, вот этот вообще механизм, он называется слайсингом в некоторых языках программирования в питоне. Это, собственно, тоже слайсы, либо срезы по-русски, да.
201: Как это ещё можно назвать в питоне, если мы хотим просто взять вот этот вот отрезок, начиная с начала строки, то есть с нулевого элемента, мы можем просто откинуть на самом деле этот 0, просто не писать, потому что по умолчанию он и так будет нуле.
202: То есть символ двоеточие 5, да, вот, вот этот вот он будет обозначать. Вот тоже самое мы возьмём с нулевого, то есть 0 тут подразумевается по 5 символ из строки. Далее, на самом деле мы
203: Можем добавить ещё 1, ещё 1, ещё 1 цифру в данное выражение поставить ещё 1 двоеточие и написать, к примеру, 2, что
204: Будет, значит, 3 число, 3 число обозначает шаг, с которым мы идём по вот этой строке и берём собственные какие-то элементы. Давайте сделаю вот так как, как читать подобное выражение с нулевого, мы бежим
205: По строке с нулевого элемента по 10 не включительно и берём каждый 2 элемент. То есть, да, если это строка, например, с числами, то мы возьмём, по сути, только если это строка с нуля, то
206: Мы возьмём нечётные числа, по сути, если ничего не путаю.
207: Ну и в случае нашей строки с емейлом мы возьмём вот такие странные символы, просто оттуда вырежем. Да, мы возьмём просто те символы, которые мы возьмём. По сути, каждый 2 символ из этой строки в данном диапазоне, соответственно,
208: По умолчанию это единица, то есть мы идём по умолчанию с шагом единица, то есть берём каждый символ из нашей строки.
209: Как мы, что эти штуки можем использовать чуточку более полезно, да, то, что мы сейчас делаем, это какая-то ерунда. На самом деле, 1 из чуточку более полезных применений. Это, к примеру, мы можем сделать вот такой трюк мы можем, во первых,
210: Взять все элементы мы берём с нулевого. Во вторых, мы берём все элементы до конца, тоже выпускаем это число, возьмём то, что там будет по умолчанию, просто оставим 2 двоеточия и, допустим, мы возьмём все наши символы.
211: С шагом в минус единицу. В таком случае мы, по сути, что получим, мы получим перевёрнутую нашу строчку. То есть мы развернули нашу строку задом наперёд. Для этого на самом деле есть отдельный метод, но тем не менее просто как
212: Упражнение, да, понять, как эта штука может работать. Это полезно. Не совсем понятно, зачем разворачивать емейл, но забегая вперёд Ровно точно такой же синтаксис с квадратными скобками и вот этими 3 шагами рабо
213: Например, для списков, а, к примеру, развернуть какой-то список данных. Если он, например, отсортирован в 1 порядке, то мы хотим его в другом. Можно каким-то другим способом. Ну, 1 из это, опять же, просто вариант, собственно,
214: Что мы можем ещё классного делать с функциями, с функциями, со строками в отличие от чисел у строк у каждой строки есть достаточно много своих встроенных функций для работы.
215: Собственно, эти, эти функции мы можем получить, нажав, например, точку возле переменной либо возле строчки и посмотреть просто на список. Он достаточно большой. Здесь много разных операций, которые мы можем делать со
216: Если мы подобное попробуем сделать с числом, мы на самом деле толком ничего не получим. Тут и тут достаточно все бедно, да, тут какие-то мелкие преобразования, но, по сути, никаких прям серьёзных операций.
217: Здесь нет.
218: Да, собственно у integer тоже нету. Есть, к примеру создание интеджер из white, но это достаточно редкий сценарий. А вот у строк подобных функций очень много. Некоторые из этих функций вам нужно буде
219: Использовать домашки, что, например, мы можем посмотреть. Мы можем найти какой-нибудь символ или какую-то подстроку в нашей строке и понять, на какой позиции она стоит. Либо мы можем посчитать количество элементов строки, можем
220: Что мы ещё можем? Можем, к примеру, если у нас наша строка похожа на какой-то текст, мы можем сделать такую странную штуку, сделать заглавными буквами все слова в этом предложении такая это title функция называется.
221: В целом у неё есть на самом деле применение. Можем банально взять и просто проверить, начинается ли или заканчивается ли строка на какие-то определённые символы, то есть подобные штуки это
222: По сути, функции проверки, да, они нам возвращают какой-то результат, то есть правду либо ложь. То есть прошла проверка или не прошла. Соответственно, в случае с емейлом мы, например, можем проверить, что емейл заканчивается на вот такой-то домен, и это должно быть там обязательн.
223: К примеру да, вот емейл точка Энс н vs и написать что-нибудь вроде собака мейн точка ком и написать прям такой се вот вполне себе применение.
224: Подобные серты можт, что ещё полезного есть? Можем привести всю строку к нижнему регистру или всю строку к верхнему. Наоборот, регистру. Это тоже бывает полезно, когда у нас там по каким-то причинам определённый
225: Текст, опять же, не знаю. Ну, емейл тот же самый, он может быть в разных местах написан в разном регистре, так или иначе, да, у вас, например, в вашей системе она отображается в верхнем регистре, но в целом это тоже самое, что если бы он был написан в нижнем регистре для
226: Сравнение мы можем привести оба емейла, да, из нашей системы, из того, что мы сравниваем к 1 регистру. Просто, например, все сделать в нижнем регистре и проверить, равны ли они, если они будут в разных регистрах. Сравнение, конечно же,
227: Не пройдёт, мы получим ошибку.
228: Так, из полезных проверок со строками есть ещё, к примеру, is digit или из децимал это проверки на то, является ли наша строка, которую мы записали и откуда-то получили числом это, собственно, проверка может быть.
229: Достаточно полезной. Опять же, когда мы с какой-нибудь веб страницы читаем значение какого-то элемента, да, если это просто число, записанное в какой-то атрибут или в какой-то, ну, собственно, как текст на странице, оно
230: Нам в тест, если мы его просто прочитаем, оно придёт строкой. И, собственно, перед тем, как конвертировать строку в число, мы можем проверить, мы можем убедиться, что там действительно число в этой строке, если там не число, упасть ошибкой, конечно же.
231: Такс, что тут ещё у нас полезного? Собственно, на просто пробежаться по этому списку я рекомендую вам самостоятельно здесь на самом деле.
232: Плюс некоторые штука потребуется в домашке на этом чуть чуть более подробно больше останавливаться, наверное, пока что не будем. Окей, у нас с вами ещё есть чуточку большая тема про форматирование строк.
233: Способов форматировать сроки тоже достаточно много. Давайте я отвечу на вопросы из чата, и мы прервёмся буквально на 10 минут, чтобы вы сходили за кофе.
234: Так что у нас без ошибки можно взять и 50 51 хороший вопрос, честно говоря, никогда такое не проверял. Давайте попробуем.
235: Я думаю, что нельзя. Нет, кстати, можно, да, можно сделать диапазон из, можно взять несуществующий диапазон. Любопытный, кстати, момент. Я думал, что оно упадёт, но нет.
236: То есть можно, получается, взять с нулевого по 51. Мы просто получим всю строку. Хороший вопрос. Да, спасибо.
237: Как взять все символы до знака собачка ну можно, естественно, просто посчитать то, как мы делали, то есть до 4, либо правильнее будет воспользоваться функцией mail точка сплит это функция.
238: Строчку на на несколько разных строк по какому-то символу, например по символу собачка, вот такой вот в результате там вернётся list и про списки мы как раз после перерыва поговорим.
239: Ну, собственно, да, вам в
240: Здесь уже подсказали. Окей, давайте прервёмся на 10 минут в 21 10. Мы возвращаемся и продолжаем говорить про строки.
241: Пока можете позадавать вопросы, я на них тоже отвечу. Необязательно простроч.
242: Вот как раз про форматирование мы сейчас и будем говорить строки это по сути строки для форматирования.
243: Хватит ли этих уроков по пайтону для автоматизации? Это на самом деле от вас зависит по большей степени моё мнение здесь такое, что, ну, во первых, никаких уроков не бывает достаточно. И самое глав.
244: Знания самые главные вообще, как бы, ну, по сути, да, самые главные знания, они придут с опытом. Чем больше вы будете практиковаться, тем больше вы всех вот этих деталей будете запоминать, потому что
245: Вы, к примеру, ни сегодня, ни завтра не столкнётесь никак. Вот с подобным поведением, и это такой момент, то есть вы его
246: Изучите на практике, либо когда у вас уже возникнет эта проблема, вы пойдёте разбираться и узнаете о подобной проблеме, собственно.
247: Зависит от вас, если вы схватываете все на лету и задаёте классные вопросы из разряда, что будет, если взять такой-то слайс и сразу же попробовать. Да, это, это по сути, гораздо более такой
248: Правильно, хороший путь, чтобы
249: Ну, в таком случае вам, наверное, не понадобятся отдельные какие-то курсы.
250: В целом важно понимать, что чем больше вы программируете тем, чем больше вы изучаете чего-то, да, неважно, там на курсах и так далее или нет, тем Реже вы, в принципе будете обращаться к каким-то
251: Материалом вроде опять же, всяких бесплатных курсов. И тем больше вы будете обращаться к официальным документациям, потому что все эти штуки, которые я рассказываю, они, естественно, описаны в документации. Просто эти документации надо научить
252: Сочетать. Надо, знать, где они находятся. Надо знать, собственно, как они написаны.
253: Недавно меня спрашивали про то, какие можно пройти курсы, про какое-то углублённое изучение языка python там и так далее, или там углублённое изучение каких.
254: Фремворков ну, по сути, нет таких курсов. Ответ был такой, что нужно просто практиковаться, читать документацию и быть вовлечённым, по сути, да, в жизнь не только вашего проекта там с вашими тестами, но и инструментов, которыми вы
255: Пользуетесь, то есть достаточно классно открывает глаза чтение ченджлогов, то бишь версии списков изменений в различных версиях питона, чтобы просто понимать, во первых, какие
256: Новые штуки там появляются, а во вторых, почему они там появляются? Потому что все изменения, которые происходят с языком, они, ну, во первых, базовые штуки не меняются, да, и то есть базовый питон можно преподавать на курсах, потому что он не меняется.
257: Глубокие штуки, которые меняются, они зачастую объяснены, почему происходит то или иное изменение, зачем в python добавляют ту или иную штуку, и вот это достаточно интересное чтиво, но опять же, это совершенно не уровень базового питона и
258: Это зачастую не уровень необходимых знаний для автоматизации тестирования, но это уровень такого продвинутого хорошего инженера, который разбирается в своих инструментах.
259: Как в пайтоне вызвать инструкцию по описанию?
260: Не совсем понял вопроса. Вы имеете ввиду вот эту вот документацию функции?
261: Собственно.
262: Все функции библиотеки, да, давайте посмотрим. Это фишка не пайтона, но пара, ну, собственно, как среды разработки вы можете сделать несколько вещей. Во первых, вы можете просто навести на любую функцию и
263: И вылезет, как какая-то документация по ней, да, она даже немножко раскрашена по эйчара. Важно откуда она берётся. Она берётся прям с документации питона можно перейти по ссылке. И вот она, собственно, кусок документации прямо на
264: Docs python org к текущей версии питона причём 3 10 да, вот вот это, кстати тоже хорошо и вот описание данной функции а он прям просто подтягивает кусок текста из этой документации вам здесь показывает тоже самое работает с
265: Да, мы можем просто навести и почитать, что тут написано. Либо же, что можно ещё можно с там, либо с контролом на винде кликнуть на данную функцию, и мы тут ничего не увидим полезного.
266: К сожалению, это будет, это будут какие-то очень страшные куски документации.
267: Документации.
268: Это будут страшные куски кода питона, но тем не менее, вот до куда-то можно докопаться. Вот, к примеру, функция сид у неё вот она, документация, это на самом деле тот же самый текст. Да? Нет, кстати говоря, это другой текст.
269: Странно, что это другой текст, но тут тоже, короче, какая-то документация может быть. Более того, даже исходный код есть. В общем, суть в чем, если мы говорим про встроенные в питон штуки.
270: Правильный источник знаний по ним это документация, потому что далеко не все функции в питоне, они вообще с открытым исходным кодом принт, например, вот, вот у неё нет кода. Есть, кстати говоря, вот такое описание.
271: Вот, а кода нет, исходников нет. Если мы говорим же про использование функции из каких-то библиотек, то практически наверняка документации этих библиотек она будет именно такой, что мы просто кликаем на
272: Ту или иную функцию и читаем вот этот вот самый докстринг.
273: Собственно, блок строки в Тройных кавычках после начала функции это документация к данной функции. Вы можете точно такую же документацию вставлять самостоятельно. Более того, я это покажу на следующем занятии.
274: Но именно вот в таких обычно штуках хранится документация во всех проектах, по сути, которыми вы будете пользоваться в пайтесте, в selena и так далее, и так далее. В питоне зачастую это работает, но не всегда вот функция.
275: У неё реальная сигнатура неизвестна, документации у неё нету. Ну, на этом все.
276: Но если я наберу квит, то у неё будет.
277: Документа. А, ну ладно, я думал, у неё будет документация. Нет, документации у неё нет. И даже на сайте питона очень грустно. Ну, собственно, ладно, можно по названию догадаться, что она
278: В общем, мысль такая, что для всех внешних библиотек вы можете посмотреть исходный код, документацию в каждой функции, а для питона правильный источник это docs, python org.
279: Когда в пачарме вот так наводите на функцию вот эта документация, если она есть во внешней библиотеке в виде такого докстринга, Ровно она и будет здесь показана, то есть это в целом универсальный способ, есть ещё горячие клавиши, по моему, команд q.
280: Или что-то такое. Правда, у меня комат кью закроет окно чарма, так что я не буду этого нажимать, но, по моему.
281: Она выводит документацию, но я точно не помню, это лучше горячая кнопка посмотреть.
282: Часто необходимо преобразовывать разные типы данных, очень часто, честно говоря, чаще, чем хотелось бы.
283: По сути, практически все данные, которые вы будете, например, читать с вашей страницы в браузере, да, с той страницы, это практически все, это будут строки, а там могут быть числа, которые нужно будет
284: Конвертировать, собственно, числа в питоне, да, и на самом деле это почти везде. То есть работаете с каким-нибудь странным форматом данных. Вам нужно его распарсить в какой-то более менее удобный для вас. Мы это, кстати, тоже будем делать.
285: Следующих занятиях периодически, так что мы ещё об этом точно поговорим.
286: Документацию зашивают обычно прямо в коде, то есть даже если мы пойдём и посмотрим на документацию того же теста.
287: Tops тест, ок.
288: Здесь есть, например, статьи, которые просто описаны в документации, но в том числе здесь есть api reference вот такой, да, и здесь все, все, все, все, все функции, которые описаны, это буквально
289: Те строчки, которые взяты из кода, то есть вот это описание функции икс фейл или вот это описание, не знаю, там пайтест, что там у нас было ещё
290: Неважно, ну что угодно, мы об этом попозже будем говорить. Вот это описание функции скипп это тоже самое описание, что и в коде находится. То есть вы когда контролом кликните на функцию скип, вы увидите тот же самый текст.
291: То есть документацию на сайтах зачастую строят, используя исходный код. И это в целом достаточно распространённая практика. Естественно, дополняем какими-то вещами оо.
292: Да, использовать код как единый правильный источник данных. Это очень хорошая практика.
293: Могу вкинуть вопрос на подумать, особенно если вы работали ручным тестировщиком. Возможно ли хранение описания ручных тест кейсов как кода?
294: Рядом с автотестами это большой сложный вопрос. Пока пока можете просто поразмышлять и написать ваши варианты в чат.
295: Потом, если у нас останется время, может быть, поделюсь своим опытом на эту тему.
296: Ок, давайте продолжать. Что мы можем сказать про строки. Я надеюсь, все вернулись, все взбодрились и
297: Мы готовы посмотреть форматирование, собственно, что такое форматирование строк в пайтоне? Это способ так или иначе как-то склеивать те или иные строки между собой. Собственно, мы уже видели вариант, что мы можем написать просто 2 строк.
298: Друг за другом, да, вот так вот. И они склеятся. Что мы ещё можем сделать? Мы можем написать print, а плюс б мы можем использовать знак сложения как способ склеить 2 строки. Запускаем
299: Вот он, он у нас склеился без всяких пробелов, без, собственно, какого-то разделителя между ними. Давайте добавим какой-нибудь разделитель, сделаем, что мы сделаем. Мы поставим запятую.
300: Пробел поставим ещё 1 плюс, то есть строка, а плюс строка, в которой содержится запятая и пробел плюс строка б.
301: Запускаем и вот он world можем в конце ещё добавить плюс восклицательный знак вот так мы конкатенировали строчки, то есть мы их сложили между собой и получили какую-то результирующую строчку. Это самый простой способ
302: Просто использовать символ plus, чтобы склеить эти строки между собой, все предельно просто другой вариант вариант склеить данные строки это использовать функцию, формат.
303: Мы можем сделать вот такую штуку. Мы можем написать строчку, в которой напишем
304: А запятая пробел в фигурных скобках б. Восклицательный знак у нас такой шаблон получился. Да, здесь у нас будет переменная, а здесь у нас будет переменная б, то есть значение этих перемен.
305: На самом деле теперь мы вызываем функцию формат у данной строчки и говорим в а положи, пожалуйста, переменную. А а, в б. Положи, пожалуйста, переменную b, что тут будет происходить? Вот.
306: Здесь вот у нас будет переменная, а потому что мы передали её в аргументах формат, а вот здесь вот у нас встанется переменная b фигурных скобок не будет. Это просто специальные символы для того, чтобы вставить сюда какое-то значение в качестве шаблона.
307: Ну и давайте проверим, что у нас получится. Вот он, hello world точно такой же вывелся. Собственно, данная функция, формат, она использовалась очень долго. Это, по сути, был основной способ форматирования.
308: Строк в питоне, но к нему на замену пришли так называемые ф строки. Это на самом деле было совершенно не так давно. Уже версия питона, это было то ли 3, 5, наверное, 3, 5 или 3, 6 уже.
309: Уже, честно говоря, не помню, наверное, 3, 5 все-таки и эти строки это очень похожий синтаксис, но проще, собственно, такой же точно модификатор, как мы уже использовали с вами р. Да, сырые строки, это
310: Называемый формат строки в них мы пишем Ровно тоже самое фигурные скобки, переменная, а запятая пробел, фигурные скобки, переменная б и восклицательный знак все.
311: Как, как это читать, как это работает в ф строках, в строках, вот с таким префиксом внутри все, что будет внутри, в фигурных скобках скобок, это будет какой-то кусок кода, который будет выполнен собственно
312: В момент создания данной строки в данном случае будет выполнен кусок кода, который сюда вставит просто переменную а а, сюда вставит переменную b. И мы получим Ровно тот же самый результат, что и здесь, только написал гораздо меньше кода запускаем.
313: World. Вот он у нас появился прелесть данного подхода в том, что в этих фигурных скобках мы можем на самом деле писать прям полноценное какое-то выражение. К примеру, мы можем написать б точка
314: Upper, да б точка аппёр. Мы сразу же прям в дан внутри строки, внутри вот этих фигурных скобок переменную б привели к значению аппёр, да, то есть к заглавным буквам и у нас
315: Результирующее сообщение выглядит вот так world заглавными буквами написано это очень мощно, это очень удобно. И это основной способ форматирования строк сегодня. И в целом он всем очень нравится, у него есть на самом деле
316: Всякие сложные крутые штуки, специальные для этого синтаксиса, но я на них не буду сильно подробно останавливаться, просто сделаю вот такую штуку.
317: Star равно это просто такой специальный модификатор, который это скорее просто больше прикол, нежели супер полезная фича. Да, но это такой специальный модификатор, который позволяет нам вывести
318: Значение переменной очень красиво вместо того, чтобы самим писать, а равно фигурные скобки а или б равно фигурные скобки б мы можем просто очень кратко записать, а равно в фигурных скобках и питон сам за нас сделает вот такое вот выражение.
319: Прикольно, очень кратко, но пользы в этом не супер много, разве что просто для какой-то отладки может быть.
320: Так вот, есть ещё на самом деле способ форматирования строк достаточно старый, но он тем не менее все ещё встречается, и он имеет причины жить.
321: Где-то.
322: Потерял процент почему-то вот так вот этот способ форматирования пришёл к нам из 2 питона.
323: И в некоторых местах он все ещё используется, он будет выглядеть вот как-то так. Процент с это значит, что сюда нужно вставить значение в виде строки. А сюда нужно вставить 2 значение в виде строки. И вот с помощью вот такого синтаксиса это и будет сделано.
324: Результат будет Ровно тот же самый подобный способ форматирования встречается редко, но имеет своё место быть по той причине, что тут такая сложная техническая грань.
325: Зачем он нужен? Нужен он затем, что есть разница между тем, что вот эти строки, они будут выполняться в момент, в момент собственно, создания данной строки. А вот эти строки, они будут выполняться.
326: Они могут выполняться, скажем так, отложено только в тот момент, когда будет происходить сама запись данного выражения в какой-то, скажем так, приёмник, собственно, например, в консоль либо файл, либо ещё куда-либо. Соответственно, вот этот спосо,
327: Все ещё активно используется, к примеру, в логировании, и вы можете его встречать, если встретите. Ладно, не бойтесь, знайте о том, что он есть такой, но применять, скорее всего, вам его не понадобится.
328: Ну, ещё пару слов про подобный способ. Самый 1, про который мы с вами поговорили, про функцию format. Этот способ может использоваться не только как здесь, да, как я показал. То есть у нас, раз есть какой-то шаблон, мы используем
329: Функции формат вставляем в него переменные, но и для опять же отложенного форматирования или для разного даже форматирования 1 и того же шаблона. Вот к примеру у нас есть вот такой шаблон да, есть какая-то ссылка на наш, на наш сайт, у него есть
330: Какой-то префикс api, да и дальше, собственно, сам наш сайт, он будет всегда один и тот же а вот какую конкретно команду дальше мы будем вызывать, она будет на самом деле всегда разная. Соответственно, мы
331: Можем сделать вот так вот users урл равно берём темплейт точка формат.
332: Формат юзерс, да, дальше берём у url тот же самый теплейт точка формат рус. Да, то есть идея в том, что один и тот же формат мы можем переиспользовать
333: Множественное количество раз. Мы 1 раз задали вот этот вот темплейт, а дальше просто в него вставляем разные данные. Но, собственно, шаблон остаётся один и тот же. И здесь нам полезна именно функция, формат.
334: Окей, это, наверное, все, что хотел рассказать про форматирование и буквально 3 строчки кода для того, чтобы показать, как работает приведение типов туда из строки в число и обратно. Собственно, мы с вами знаем теперь уже 2 новых типа данны.
335: У нас есть строка, которая выглядит вот так. И у нас есть число, которое выглядит вот так очевидно, что если мы их попробуем проверить, у нас эта проверка не пройдёт, потому что 2 этих значения, они
336: Вот мы получили совершенно собственно, для того, чтобы сделать подобный сет, мы можем сделать следующую штуку. Мы можем привести, к примеру, наше число.
337: В строку, да, мы можем написать стр. То есть тип данных string, он, он у нас пишется как стр, и просто в скобках указать число, которое мы хотим привести в строку. Собственно, такой способ приведения чего-то в строку, это совершенно
338: Способ, он работает не только с с числами делаем подобную проверку и вот она проходит все хорошо. Либо же мы можем поступить иначе. Мы можем, наоборот, привести число, привести строку.
339: Наше число, используя, используя int, то есть integer целое число, да, тип данных int. Мы его, мы строку приводим к Инту и проверяем с нашим числом. Такая проверка тоже пройдёт, но здесь.
340: Важное отличие в том, что если мы здесь пишем любое совершенно число, мы вряд ли сломаем приведение этого числа в строку, да, собственно, совершенно любое число можно привести в строку, и здесь никаких ошибок не будет, то с обратной операцией.
341: Введение строки в число все по другому. 1, 2, 3, 4. Это, очевидно, число. А если вот 1, 2, 3, 4. Вот с какими-то такими буквами это на число не похоже. И подобная конвертация, она у нас упадёт с ошибкой.
342: Да, у нас и вообще упал. Давайте документируем. Вот ошибка будет следующая. Какая-то невалидная штука пришла у нас винт, вот эта вот, то есть эта строка не похожа на число, мы не можем её сконвертировать явно, и мы получим здесь ошибку. Это важно.
343: Напомнить и всегда убеждаться перед подобной конвертацией в том, что там действительно будет число. То есть те данные, например, которые мы взяли с сайта, действительно число, как это сделать, например, из диджит, да, мы можем
344: Проверить, что с у нас является числом.
345: Так, на этом мы со строками закончили. Есть ли у вас какие-то ещё вопросы?
346: Если у нас нет вопросов, давайте двигаться дальше.
347: Далее мы с вами рассмотрим составные типы данных и самый простой составной тип данных. Это список. Собственно, логично предположить, что такое список. Список. Это просто специальный тип данных, который
348: Внутри может хранить сразу же несколько разных элементов. К примеру, он может хранить несколько чисел. Да, списки у нас пишутся в квадратных скобках. Вот мы внутри перечислили 3 числа. Дальше этот же самый список может хранить
349: Строки. Совершенно никаких ограничений на те типы данных, которые внутри этого списка находятся. Более того, никаких ограничений и по длине данного списка тоже нет. Мы можем пихать столько элементов, сколько у нас есть оперативной памяти.
350: Сколько выделено оперативной памяти питон. Более того, в списке могут быть другие списки. Так делать тоже совершенно не возбраняется. Это получается двумерный список, список, который внутри содержит в себе другие списки. Почему?
351: И нет, собственно, это все прекрасно работает со списками. Ровно точно так же, как со строками мы можем обращаться к элементам, которые в этом списке лежат точно также с помощью квадратных скобок на нулевом элементе у нас будет
352: Лежать число 1, да, там на минус 1 элементе у нас будет лежать весь вот этот список, да, потому что с точки зрения вот этого списка, вот этот список это 1 элемент просто вложен, да. Вот давай
353: Прям запустим, да, собственно, 1 элемент у нас единица 4, 5, 6. Это у нас последний элемент, чтобы обратиться к элементу, который находится внутри данного списка, да, то есть мы, мы обраща
354: К списку, который находится внутри списка, мы можем поставить ещё одни квадратные скобки и обратиться уже к индексу вот этого внутреннего списка. Ну, поставить, например, 0, да, 0 элемент минус.
355: Элемента вот этого списка, это будет вот этот список и вот эта четвёрка
356: Запускаем. Вот она, четвёрка наша появилась здесь все предельно просто. Также точно здесь работают слайсы. То есть мы можем указать 0 либо 2 двоеточие - 1. Это будет развёрнуто наш списо.
357: Запускаем. Вот он готово. Получили Ровно тоже самое. В общем, данный синтакс совершенно не отличается от того, как мы работали со строками. Только мы теперь работаем прям с целым набором разнотипных элементов.
358: Со списками, естественно, мы можем делать какие-то различные операции, и эти операции будут, конечно же, специфичны для списков. Здесь же отличие от строк будут операции следующие. Давайте
359: Откроем. Также точно просто посмотрим, что нам поча выдаёт. Мы можем, к примеру, отсортировать наш список, да, если мы можем отсортировать, очевидно, что мы не можем отсортировать список, если там будут сильно разные типы элементов, да, для того, чтобы отсортировать. Спи.
360: Список элементов внутри должны быть однотипные, которые можно друг с другом сравнивать и понять, какой из них больше, какой меньше. Соответственно, напрямую сравнить число и строку. Например, мы не можем, чтобы понять, что из них больше, как мы можем это сделать.
361: Мы можем делать, мы можем добавлять элементы в список с помощью функции, когда новый элемент добавится просто в конец списка.
362: Добавим, давайте добавим такую строчку. Мы можем сделать экстент, расширить 1 список другим списком.
363: Сделать вот так, например, да, то есть так мы как бы сольём 2 списка в 1, он просто удлинится на 2 новых элемента из вот этого списка мы можем
364: Вставить какой-то элемент в определённую позицию, посчитать количество элементов, количество определённых элементов в списке можем, например, использовать функцию lang и посчитать просто длину, посмотреть, сколько элементов в данном списке.
365: Да, и, соответственно, функция Ван точно также работает и для строк, кстати говоря, можем удалить какой-то элемент, либо развернуть элемент, да, не использовать вот этот вот страшный синтаксис, который в целом работает прекрасно, но тем не менее, и
366: Использовать функцию реверс так тоже можно, почему бы и нет? Вот все кажется предельно просто дополнительно. Что мы можем делать с списками, чего мы не можем делать со строками мы можем
367: Переопределять или как-либо изменять элементы на определённых позициях. То есть, что мы можем сделать? Мы можем написать л от нуля.
368: Plus от нуля равно давайте сделаем 200 вот так мы просто прям перезаписали значение, которое стоит у нас на 0 позиции, и записали туда новое значение записать новую строчку.
369: На позиции, на какую-то позицию в другой строчке мы не можем, мы должны явно сконкатенировать и составить нужную нам строчку самостоятельно. Ну и давайте посмотрим, что у нас в итоге после всех наших операций получилось
370: С нашим списком. Вот у нас 1 элемент заменился, да, вот туда добавились новые элементы из вот этого списка.
371: А, да, у нас получается, вот этот вот элемент заменился, как ни странно. А, да, мы же его реверснули точно. Да, я забыл, что мы делали вот эту операцию. Ну, собственно, да, получается, так мы добавили вот эти 2
372: Элемента, a3 элемент мы перезаписали на число 200 ok. Что ещё важно здесь сказать? Есть ещё 1 тип данных, который похож на списки, но тем не менее, чуточку отлича
373: Это множество, множество, они у нас пишутся в фигурных скобках.
374: И их отличие в том, что они содержат в себе, обязательно содержат в себе только уникальные элементы, и они не содержат в себе сортировку. Это специальный тип данных, который предназначен для того, чтобы работа
375: С данными как с множествами, собственно.
376: Даже если мы их создаём такими, что они содержат в себе какие-то дубликаты.
377: 2. Давайте сделаем 2. Они будут благополучно убраны при
378: Созданий. Давайте посмотрим на оба этих множества. 1, 2, 3, 4, 5, 1, 2, 5. Да, собственно, пятёрка вот эта, которую даже я здесь несколько раз написал, она на самом деле 1. Так вот зачем нужны множества множества, позволяют нам
379: Делать достаточно классные, удобные операции друг с другом. То есть, когда, к примеру, у нас есть 2 множества, мы можем сделать следующее. Мы можем взять, к примеру, пересечение 2 множеств, да, и посмотреть, собственно, какие
380: Общие элементы у этих 2 мы можем взять и из 1 множества вычесть другое множество, чтобы проверить, собственно, что останется из элементов в 1 множестве, если из него убрать все элементы, из 2 можт.
381: И в общем, делать вот такие вот штуки на пересечении какой-то группы элементов, это тоже зачастую бывает достаточно удобно и полезно и
382: Иногда данный, да, вполне себе применяется. Ну и опять же, достаточно важное свойство в том, что множество не содержит в себе дубликаты. Соответственно, если вы, к примеру, хотите избавиться от дубликатов из списка, вы можете сделать, что
383: Такое вот у нас есть список 1, 2, 3, 4, 5, 5, 5. Вы можете сделать сет, то есть множество, да, привести список во множество, а потом привести его обратно в список.
384: Вот как-то так.
385: Тыц запускаем и да, вот мы получили список, из которого дубликаты были убраны просто с помощью того, что мы его конвертировали во множество, а потом конвертировали обратно в список вот такой небольшой трюк.
386: Окей, есть ли у вас вопросы про множество, про множество и списки? По сути, правда, этих типов данных про картёжи. Вопрос я увидел, мы к нему вернёмся обязательно, чуточку позже.
387: Замечательно. Идём дальше. Ещё 1 составной тип данных, который тоже совершенно обязательно знать. Вы его будете встречать, и вы, скорее всего, его уже встречали. Это словари, словари они тоже пишут.
388: В фигурных скобках, так же как множество, но здесь важно не путать, потому что, в отличие от множеств, словари внутри содержат немножко другую структуру. Словарь это специальная структура данных, которая
389: Содержит в себе специальные пары, пары ключа и какого-то значения, которое соответствует этому ключу. Соответственно, пишется данная структура данных. Данная структура данных, тавтология у меня постоянная, конечн.
390: Пишется эта структура данных следующим образом мы пишем какой-то ключ, например, строка k da, двоеточие и значение, а соответственно, именно вот такой синтаксис двоеточием позволяет отличить множество просто.
391: По синтаксической записи от множество, от словарей словарики пишутся как вот такие вот пары, ключ, двоеточие, значение.
392: А ключ, двоеточие?
393: 2 значение. Вот соответственно, мы можем эту штуку чуточку более красиво поформатировать, чтобы было чуточку наглядно вот так вообще хорошо множество позволяет нам хранить какие-то
394: Немножко, скажем так, структурированные типы данных, в которых мы зачастую заранее знаем какие-то будут ключи, и мы просто можем иметь множество разных наборов данных с одними и теми же ключами, но данные там буду
395: Разные, к примеру, такими данными могут быть, предположим, описание какого-нибудь нашего пользователя на нашем сайте. Давайте сделаем вот так вот, user дин равно нейм двоеточие, Вася.
396: Ich двоеточие 18.
397: Ну, давайте так, так и оставим и сделаем 2 пользователя.
398: Петя, и суть в том, что, работая в коде с подобными словариками, мы будем всегда, мы будем всегда знать, что в нашей такой специальной структуре данных есть вот такие
399: Ключики, а что за конкретные данные внутри там лежат, это уже другой вопрос. Мы их можем получить, например, из нашей системы и уже дальше использовать. Либо ещё как-то. Главное, что мы знаем, что в этой структуре данных такие ключики есть, и мы по ним можем обращаться.
400: Чтобы получить, собственно, те значения, которые там лежат в случае с со списками, мы можем просто обращаться по индексу и гадать, что там за значение лежит. Да, если мы хотим отобразить какую-то подобную структуру со списком,
401: Мы условно должны договориться, что на 0 позиции у нас лежит имя на другой позиции, у нас на 2, на, там, на 1 позиции у нас лежит возраст, но условно. А почему на 0? Почему на 1?
402: Почему не наоборот? Или там, в общем, могут возникать вот такие странные вопросы и правильного ответа здесь нет, потому что именно словарики подобную проблему решают просто тем, что мы подобным
403: Подобным ключам даём имя подобным индексам. Вместо обращения по циферке мы обращаемся по именованному ключу. Собственно, как это выглядит? Мы можем обратиться, например, к пользователю, написать квадратные скобки.
404: И написать name, да, вместо обращения по индексу мы обращаемся прямо по ключу, чтобы получить, собственно, его имя. Делаем принт и выводим как раз вот это вот имя тоже самое у 2.
405: Пользователи, не меняя, даже не задумываясь о том, где там лежат эти данные, по какому ключу там, на каком индексе. Условно, да, если мы знаем структуру этих данных, мы спокойно можем обращаться по ключам в этой структуре.
406: Соответственно, можем запустить наш файл и увидеть. Вот они 2 имени инились у нас. Соответственно, словарики это очень часто используемая структура и будут также другие структуры, очень похожие на слова.
407: Мы об этом будем говорить с вами в 3 занятии, когда будем говорить про про что, про ооп, по сути, и в принципе, про разные форматы хранения различных данных. Соответственно, там мы будем говорить об этом чуточку.
408: Подробнее посмотрим на альтернативные штуки, например, на дата классы. Ну а сейчас нам важно понимать, что есть словарики, которые позволяют нам хранить данные именно в виде пар, ключ и значение. Собственно, ребята, которые работали
409: Например, с форматом данных json могут задаться вопросом, что это это вообще то тоже самое на самом деле не совсем, если вы знаете джисон, да, это формат хранения данных, который пришёл к нам из java script.
410: Словарики очень похожи, но есть у них некоторое синтаксическое отличие они спокойно конвертируются друг в друга, и в питоне есть библиотека джисон для этого, но об этом будет подробнее. Опять же на отдельном занятии.
411: Окей. В чем, собственно, прелесть словариков по сравнению со списками? Ещё, предположим, у нас есть список, в котором содержится огромное количество элементов. Это, предположим, не знаю, там мы получили 50000 записей.
412: Из нашей базы данных, соответственно, чтобы найти нужные записи, нужную 1 запись из этого списка, нам, по сути, в худшем случае нужно перебрать вообще все записи в этом списке. Мы будем просто идти по этому списку и проверять каждый элемент. Это тот элемент, который мы хотели
413: Нет, не тот. Ага. Переходим к следующему и так далее, и так далее. Пока не найдём нужный нам элемент. Соответственно, со словариками. Подобная работа может быть очень сильно оптимизирована и упрощена. В качестве вот такого ключика мы можем
414: Использовать какое-то значение, которое условно и позволит нам найти какой-то элемент очень быстро, к примеру, у нас список, ну, есть просто список пользователей с айдишниками, да, у каждого пользователя есть айдишник.
415: Добавим здесь поле id двоеточие 25, не знаю. Вот. И соответственно, если это список, мы будем перебирать все элементы и проверять вот это вот поле id, пока мы не найдём собственно нужный нам элемент в случае
416: Со словариками мы можем сделать следующую структуру данных users.
417: Равно делаем словарик и делаем следующим образом. 25 двоеточие, юзер 1 42 двоеточие, юзер 2. То есть мы где-то там 1 раз
418: В коде делаем подобную структуру. Записываем айдишники пользователей как ключи и, собственно, данные пользователей, как значение. Соответственно, дальше в коде, зная айдишники пользователей, мы можем обращаться к
419: Данной структуре и за константное время, за всегда постоянное время, за очень маленькое время нам не нужно перебирать все элементы, мы можем получать данные о нужном пользователе, просто зная вот это вот число, мы можем написать
420: 42. Да, мы получаем пользователя с индексом с айдишником 42.
421: И там будет наше значение, которое, собственно, мы туда положили, и это будет не поиск по структуре, не перебор всех элементов. Это будет прямая операция. Возьми, пожалуйста, из вот этой структуры данных данный элемент и верни его.
422: В, собственно, в программу дай на огромных объёмах данных. Это совершенно обязательная процедура.
423: Окей. Также точно как у функций, так же точно, как у списков, у словарей есть различные функции функций. На самом деле здесь не так много. И давайте
424: Пробежимся по ним. Есть функция clear. Очевидно, что она делает. Она просто очищает наш список. Есть функция поп, которая позволяет убрать по сути, вытащить элемент из нашего словарика. Мы можем сделать юзер точка поп 40.
425: Да, мы получим данного пользователя. Это будет тоже самое, что вот подобная запись, но в то же время он будет убран из исходного списка.
426: Что тут ещё есть? Есть 3 функции айтом, валес и кейс, которые возвращают нам 3 списка. Валес возвращает список значений всех значений.
427: Которые в словаре есть. Кейс возвращает список ключей и айтом возвращает список пар ключей и значений, которые в словарике есть. Вот эти 3 функции, они нужны для циклов, и мы их посмотрим подробно. На следующем занятии как раз
428: Когда будем говорить про цикл юзер точка, что тут у нас ещё есть хорошего у нас есть
429: Функция get вот эта функция достаточно важная, эта функция позволяет нам получить какой-то элемент по ключу.
430: Соответственно, возникает вопрос, чем это отличается от квадратных скобок? Да, кажется, что это одно и то же. Разница здесь будет в том, что здесь на самом деле будет разное поведение в
431: Данном примере. Если мы просто обращаемся в квадратных по квадратным скобкам, если данного элемента у нас не будет, да, мы обращаемся по несуществующему ключу, то мы получим опять же, очень распространённую в питоне ошибку кие.
432: Это такая же точно ошибка, как индекс применительно к спискам, но данная ошибка применима именно к словарям. Соответственно, 50 индекса у нас нет. Мы упали с ошибкой. Мы не нашли того пользователя, которого ожидали в то же время.
433: Имя функция get позволяет нам вполне попытаться получить этого пользователя и не упасть с ошибкой. Если данного пользователя там нет, мы просто получим ничего, мы получим.
434: На специальный тип данных, который как раз-таки говорит о том, что значения нет, но здесь не произошла ошибка. Важное отличие в том, что здесь не произошла ошибка. Более того, вместо на мы можем написать какое-нибудь своё специальное значение.
435: Вместо того, чтобы, собственно, получить вот этот навык, к примеру, давайте сделаем нейм дефолт юзер.
436: То есть значение по умолчанию, когда мы обращаемся к несуществующему пользователю, будет, собственно, пользователь с именем какой-то пользователь по умолчанию, да, то есть это значение будет возвращено в тот
437: Момент, когда мы не получили, не нашли такого ключа в нашем списке. Если я возьму 42, я получу, естественно, здесь правильное значение. Вот он.
438: Вот это основное про словарики. Ну и да, давайте ещё проговорю, естественно, с со словариками, так же как
439: Списками работает следующий синтаксис мы можем положить в определённый по определённому ключу определённое значение или переопределить его, да?
440: Ну, например, так, да, то есть я поместил в пользователя с ключом 55 вот данную структурку.
441: Соответственно, далее она в словарике уже будет фигурировать. Либо я также точно могу переопределить, например, 42. Окей, давайте посмотрим вопросы и будем
442: Заканчивает самой на сегодня важной темой, как раз применительно к нашим словарикам из списка.
443: Можно ли обратиться к словарю через значение ключа? Собственно, да, вот именно вот это мы и делали.
444: Перебор списков делается циклом, да, и перебор. Если мы хотим перебрать все элементы словаря, то это тоже делается циклом. Есть способ конвертировать большой список в словарь, есть способы конвертировать
445: Словарь. Если мы чётко знаем, что из них будет ключом, что из них будет значением об этом, кстати, возможно, сегодняшняя домашка, сейчас я вспомню.
446: Да, да, кстати говоря, вот последнее задание про словарики сегодня как раз будет про конвертацию списков в словарь об этом чуточку позже. Ну и давайте поговорим про очень важную тему.
447: Когда мы говорим про списки и словари в питоне, это их свойство, свойство, которое называется метаби ити или изменяемость, выглядит это свойство.
448: Следующим образом.
449: Собственно, это свойство, оно супер простое, оно говорит о том, что на самом деле списки словарей мы можем менять. Мы видели это с вами. Мы добавляли элементы в список, мы перезаписывали элементы на определённом индексе со словариками тоже самое, соответ.
450: В чем здесь проблема? Почему это плохо или в чем здесь особенность? Давайте рассмотрим следующий пример. Вот я беру, создаю список 1, 2, 3.
451: Это у меня будет 1 список. Далее я беру, создаю 2 список и говорю, пожалуйста, будь как 1, я во 2 список присваиваю 1 список может показаться очевидным, что
452: У меня теперь будет 2 списка. Я беру и делаю следующую штуку. Л. 2, точка аппенд 4. Я добавляю четвёрку во 2 список. 1 список я не трогаю.
453: Давай я выведу оба списка, и мы посмотрим, что получилось.
454: Запускаем наш код.
455: И результат следующий. Я вывел 1 список, я вывел 2 список, и вот эта четвёрка появилась в обоих списках.
456: Собственно, хотя я её добавлял только во 2, почему так происходит? Потому что в питоне по умолчанию, когда вы так или иначе в разных местах под разными именами используете список на самом деле вы.
457: Пользуете Ровно один и тот же список. То есть вот эта операция, она не копирует ваш список, она лишь просто говорит о том, что теперь вот у этого исходного списка на самом деле просто 2 имени вы к нему могли обращаться. Пал 1. Вы к нему теперь можете обращаться. Пал 2 и
458: Соответственно, вот эта операция, она на самом деле будет модифицировать один и тот же список, и обе переменные, они смотрят на один и тот же список. У нас все ещё 1 список. Соответственно, почему так сделано? Потому что, по сути, создание целой
459: Большой копии нового списка. Это достаточно дорогая операция. Если у вас, к примеру, в коде используется, в вашем тесте используется опять же список там на огромное количество элементов, то на каждое копирование данного списка вам придётся затра.
460: Тратить Ровно столько же памяти, сколько занимает ваш 1 список. И это действительно дорого. Соответственно, зачастую в питоне может быть просто полезно взять, сделать 1 список, а далее просто делать над ним множество разных операций, которые
461: Его изменяют. И это в целом нормально. И вы должны помнить о том, что даже передавая список туда сюда в разные функции, ещё куда-то и так далее. Вы просто меняете один и тот же список, но не создаёте новое, собственно, для того, чтобы создать
462: Действительно, новый список в питоне есть метод copy, и мы можем сделать вот такую штуку л. 2 равно л. 1 точка копии мы копируем, делаем явную операцию копирования 1 списка и кладём её во 2 список.
463: Теперь запускаем. И действительно наша проблема решена. У нас есть 1 список, он остался неизменным, и мы его просто скопировали во 2 список. Теперь у нас 2 одинаковых списка, они занимают разное количество памяти, и мы модифицировали
464: Успешно. Только 2 список. Теперь у нас 2 копии этого списка, и мы можем с ними работать по отдельности. Замечательно кажется, что решили проблему.
465: Теперь я беру и добавляю в данный список вложенный список. 1, 2, 3, 5, 6, 7. Четвёрка у нас, вот она копирую 2 точка н четы.
466: И сделаем 2.
467: - 1, точка n 8. Вот так вот, да, то есть в последний элемент, да, примерно вот это тогда могу убрать. То есть в последний элемент 2 списка, то бишь вот в этот вот
468: Я добавляю восьмёрку.
469: Ну, давайте вот так.
470: Запускаем. И что у нас получается? Мы действительно скопировали 1 список и 2 список. Это теперь копия 1. Вот эта четвёрка, которую мы добавляли, она действительно есть только во 2 списке. Вот только восьмёрка.
471: Который мы добавляли вот в этот вот вложенный внутрь список, она добавилась снова в оба наших списка, она есть в обоих списках. И, собственно, опять же, почему так происходит не трудно.
472: Догадаться, что когда мы делаем вот такой новый список, это опять же будет Ровно тот же самый список. В нашем случае, когда мы скопировали 1 список, во 2 мы скопировали все элементы, но элемент на
473: Вот этой позиции, это на самом деле не весь вот этот вот список, который там есть, а просто как бы указатель на данный список. И мы этот указатель просто скопировали. А список вот этот вложенный, он остался неизменным, он остался Ровно там, где он и был, соответственно.
474: Особенности при работе вот с такими вложенными друг в друга списками может быть очень много неочевидного поведения и ошибок. Когда вы будете модифицировать подобным образом элементы, вы должны помнить всегда, что копии вот этот метод он не копирует по настоящему
475: Вложенные вот такие сущности и вложенных их, по сути, может быть, ну, сколько угодно, да, это может быть список в списке в списке или в случае со словарями. Это ещё более наглядно. Это словарь, в котором ключ, в котором значение это другой словарь и так далее и так далее.
476: Глубина эта может быть достаточно большой даже в нашем случае, который мы здесь смотрели, вот этот вот вариант, это уже словарь, который внутри содержит другой словарь, да, это словарь, в котором есть + 25 внутри.
477: 1 это тоже словарь, который содержит вот такие ключи. То есть это уже вложенность такой вложенности может быть много соответственно.
478: Мы можем решить эту проблему и решить эту проблему чуточку более чуточку другим образом, нежели просто сделать копию. Мы можем Фром модуль из модуля дип копи. Нет.
479: Копии импортировать функцию дип копи, то есть глубокое копирование. Это по сути, точно такое же копирование, как вот это только которое будет работать рекурсивно. То есть вообще для всех, всех, всех вложенных сущностей, которые там
480: Есть, если там есть списки, он пройдёт по всем спискам и скопирует, честно скопирует все элементы из этих списков. Если там есть словари, он скопирует все элементы из этого словаря. Соответственно, вместо просто точка копии мы можем вызвать дип копи функцию и указать
481: Теперь, если я вызову данный код, он работает Ровно так, как, собственно, я его написал. 1 список у нас остался целиком, неизменным, Ровно точно таким, как он выглядит здесь, потому что он
482: Честно скопирован, он скопирован рекурсивно вниз. Собственно, все вложенные списки, которые в нём они скопированы честно. И мы добавили новый элемент в 1 список. Вот она, четвёрка. И мы добавили новый элемент, во вложенный список, вот она.
483: Восьмёрка и 1 список это никак не задело. Собственно, именно в этом и заключается свойство изменяемости. Да, мы можем менять и списки, и словари, собственно, Ровно вот этот же самый пример.
484: Мы можем воспроизвести со словарями, будет Ровно тоже самое. Собственно, мы можем менять и списки словари, и питон позволяет нам это делать. И когда мы передаём списки словари из 1 места в другое или там присваиваем из 1
485: Переменной другую. Мы на самом деле продолжаем работать с 1 и тем же списком. Вот это свойство очень важно понимать. Если вам нужно явно скопировать, используйте в случае в случае вложенных данных дип копи метод
486: Естественно, он может быть затратным по ресурсам в зависимости от того, насколько у вас большие данные. Это тоже важно помнить. Собственно, для того, чтобы разграничить вот эти вот типы данных, которые мы можем менять, и
487: Вести типы данных, которые на самом деле вообще то и не подразумевается менять в питоне. Придумали ещё несколько типов данных. 1 из них это картёжи, это, по сути, список кото
488: Который выглядит просто как список, но его нельзя никак поменять. После того, как он был создан, он пишется в круглых скобках. Дальше мы просто перечисляем элементы. Это, собственно, тоже самое.
489: Потому что список только в круглых скобках мы с ним можем работать точно так же, как со списком мы от него можем брать.
490: Слайсы, да, там с 1 по 3 элемент, там и так далее и так далее. Работа с ним толком никак особо и не отличается. Отличие будет в том, что мы не сможем его переопределить, например, т. От 1, да.
491: Там 3, я не могу сделать подобную операцию, потому что таплы, то бишь картёжи, не поддерживают присвоение значений. Этот тип данных не изменяется, это неизменяемые списки. Соответственно, если я вызову список методов,
492: У данного тапла их тоже будет, ну, сильно меньше, чем просто у списков. Здесь не будет никаких Апенов, экстендов и так далее, и так далее. Ничего здесь такого не будет, здесь будет только индекс, там.
493: Мы можем просто попробовать найти какой-то элемент в этом кортеже и на самом деле все в отличие от списков, в которых 1 точка вот они мы можем добавлять, расширять, можем перевернуть
494: Можем очистить, можем вставить какой-то элемент, можем убрать элемент, можем отсортировать с картажа и ничего подобного мы сделать не можем. Соответственно, присвоение картажа в новую переменную. Это будет создание нового
495: Ну, потому что, собственно, это неизменяемый тип данных.
496: Так вот, есть ещё 1 тип данных ресет это неизменяемые множества
497: Собственно.
498: Да, тебе не нравится такой синтаксис? Да, я понял. Можно сделать вот так. Собственно, это множество, точно такое же множество, как обычное, только которое, опять же, мы никак не можем изменять. Мы не можем добавлять в него элементы, мы не можем убирать из него элементы.
499: Со словарями ситуация чуточку сложная, в питоне нет как такового, скажем так, Фрозен дикт, да, словаря, который нельзя менять, нет его как минимум по той причине, что мы можем что-то подобное собрать самостоятельно, просто используя картёжи.
500: Мы можем сделать кортеж, в котором будут внутри ключ значения и всякие подобные штуки, но на самом деле здесь есть некоторые детали.
501: В питоне давным давно был proposal, то бишь предложение добавить так называемый фрозендикт в
502: Список типов данных, которые должны быть в языке, этот пропозал был как минимум в 12 году, хотя подозреваю, что это 1 из недавних пропозалов, я не уверен.
503: В общем, а, да, да, это старый по, в общем, статус у него реджект по каким-то причинам здесь можно почитать, он был отклонён в питоне как такового, а сейчас нет, да, собственно, вот.
504: Основная причина в том, что пользы от этого никакой нет. Да, зло, но, насколько я помню, есть какой-то более свежий пропозл о том, чтобы-таки добавить продикт в
505: Современный питон. Пока что этого не произошло. И если прям очень сильно, правда, зачем-то такого хочется. Есть сторонние библиотеки, которые такое делают, например, вот она так и называется. Но я думаю, что однажды разработчики питона добавят
506: Тип данных просто стандартный набор типов данных, но опять же они правильно замечают, что толку использования этого особо никакого нет, просто для удобства в то же время у кортежей, да, у неизменяемых
507: Списков. Использование есть, к примеру, мы будем видеть много кортежей на следующем занятии, когда будем говорить про аргументы функций, возвращаемые значения и так далее. Но 1 из
508: 1 из применений картёжей будет следующим. Смотрите, у нас есть функция у словарей, которая возвращает айтемс. Что такое items? Давайте посмотрим, что такое items в словаре. Перейдём к списку сразу же.
509: Не тот файл запустил run.
510: Давайте сделаем разделитель, чтобы было чуточку удобнее видеть.
511: Вот, вот эта вот строчка.
512: Нет, не очень наглядно давайте покажу вам классную библиотеку, которая в питоне есть. Import print.
513: Print это специальный принт, который
514: Позволяет вам очень красиво, а в форматированном виде распечатывать те или иные структуры данных, например, собственные словарики либо списки под красиво. Я имею ввиду следующее вы просто заменяете принт принтом.
515: И он вам вот так вот красиво выводит, просто форматируя, да, вашу структуру данных в разные строчки. Так вот, обратите внимание, что здесь есть кортежи, кортеж здесь вот в результате мы получили список, собственно, да, вот он
516: Список я его сам сделал, написал, сконвертировал картёжи. Здесь будут следующие каждая пара ключа и значение, которое ему соответствует, эта пара, она на самом деле никак не может поменяться. Мы не можем поменять значения.
517: Мы не можем поменять соответствие ключам и значениям никак в словаре, да, потому что это неизменяемые всегда пары, и они всегда идут рядом, они всегда идут друг с другом. Соответственно, когда мы пытаемся получить
518: Эти данные напрямую из словарика, они идут именно в виде кортежа. Вот они в круглых скобках, вот, вот эта вот строчка, ну и следующая строчка точно также именно по той причине, что мы не можем внести изменения в эту связь. Вот, собственно,
519: 1 из таких примеров использования кортежей. Но опять же, повторюсь, больше мы их увидим на следующем занятии. Когда будем говорить про функции. На этом мы с вами сегодня заканчиваем, я скажу пару слов про домашку и
520: В целом вы можете уже задавать вопросы.
521: Можно про ваш опыт хранения ручных Тестов вместе да, об этом сейчас тоже поговорим чуточку в общем тема про YouTube lithium достаточно сложная и я вам рекомендую проделать вот подобные операции самостоятельно для того чтобы понять.
522: В какой момент вы работаете с 1 списком? В какой момент вы работаете со 2 списком? А если вы подобное попробуете со словарями, изменяя ключи словарей, будет ещё лучше. Соответственно, сегодняшняя домашка, она посвящена как
523: С тем типом данных, которые мы сегодня прошли, домашка у нас будет выглядеть следующим образом. У меня подготовлен файлик, в котором уже мной написано несколько Тестов. Эти тесты написаны на питоне.
524: Вы их можете запускать.
525: И если я их сейчас все запущу, они все будут красные, они все упадут падать они будут по той причине, что здесь этот код этих Тестов не дописан. Собственно, что здесь
526: Должно быть, к примеру, здесь мы должны написать программу, которая выводит на экран приветствие. Собственно, у нас есть 2 переменные, у нас есть какая-то переменная, собственно, с выводом, да, и уже написана проверка, которая должна выполниться.
527: Соответственно, чтобы она выполнилась, вы должны правильно форматировать данную строку, то есть вставить 2 данных значения в строку, чтобы получилось данное предложение и так далее. В остальных заданиях примерно тоже самое вы читаете.
528: Задание. Здесь нужно посчитать периметр, да, то есть вы должны написать прям формулу того, как вы считаете периметр и сделать, и удостовериться, да, что вы считаете все правильно, ассерты, они уже правильные, здесь не хватает просто подсчёта, вы должны написать прям формул.
529: Используя числа переменные тоже самое с площадью тоже самое со списком. Здесь вы должны потренироваться немножко в создании рандомных чисел, используя список опять же.
530: Важный момент, в частности, вот с этим тестом, что здесь вам не нужно использовать никакие циклы, мы их ещё не проходили. Вы можете здесь просто в тупую накопировать 10 строчек с созданием рандомных чисел, случайных чисел в диапазоне и этого
531: Будет достаточно, повторюсь, цикл мы ещё не проходили, это будет позже.
532: Данное задание это скорее больше задание на внимательность. Да, вы должны удалить из списка все уникальные элементы. Если вы слушали внимательно, вы знаете, как сделать это буквально за 1 строчку, не используя никаких циклов, условий и так далее.
533: И небольшое задание на словарик вы просто должны сделать создать словарик, используя 2 списка, внимательно читайте подсказку к этому заданию. На этом все также точно домашку.
534: Данному заданию прикладывайте к занятию на сайте, выкладывайте на гитхаб и на этом мы с вами заканчиваем. Можете позадавать вопросы, но в целом мы с вами закончили. Если вам нужно идти, можете
535: Пока пока.
536: Есть проблемка, непонятно, как это все можно применить на реальном проекте нормально со временем пройдёт.
537: Смотрите, да, мы не можем, естественно, никак взять и начать сразу же писать тесты на ваш проект. Конечно же, да, вы будете писать тесты на ваш проект скорее на момент сдачи дипломного.
538: Проекты, да, собственно дипломный проект, это могут быть, может быть проект автотестами на ваш личный проект, на работе, на реальном проекте. Соответственно, для того, чтобы прийти нам к данному состоянию, мы должны пройти
539: Достаточно много нюансов, и эти нюансы будут необязательно связаны с тестированием, тестированием. Непосредственно. Мы пробовали в начале данного курса уделять достаточно мало внимания конкретно
540: У нас было всего лишь 1 занятие, сейчас их 3, и было достаточно тяжело, потому что студенты не понимали уже на следующих занятиях, да по написанию настоящих Тестов по разбору.
541: Что важно, разбору различных концепций, которые в тестах можно применять, в частности, например, пейдж обжект или концепции в пайтесте, как работает параметризация и всякое такое ребята не понимали из за того, что у них отсутствовало.
542: На самом деле, такая, отсутствовали базовые знания по каким-то штукам в питоне. И это очень сильно затрудняло и решение домашек, и преподавание дальнейшее. Соответственно, несмотря на то, что есть огромное количество материалов по
543: Питону в паблике и бесплатных, и в принципе, других курсах мы решили какое-то внимание этому тоже уделять. Так что в целом, да.
544: Смотря на то, что это пока что непонятно, как применять на практике это такие базовые знания, которые даже ещё не относятся напрямую к автотестированию, это лишь знание нашего инструмента python это наш инструмент для работы.
545: И эти знания, естественно, помогут вам в дальнейшем разбираться и понимать те концепции, о которых мы будем говорить в дальнейшем. Соответственно, нет ничего страшного в том, что сейчас есть проблема с таким пониманием, это совершенно нормальный
546: Реакция.
547: В этих структурах можно тестовые данные хранить, можно что за файл коллекшнс экзампл хороший вопрос. Есть библиотека в питоне стандартная коллекшнс, она содержит в себе несколько любопытных, опять же, специали чуть чуть.
548: Чуточку более специализированных типов данных. Если у нас иногда остаётся время, мы можем посмотреть на них чуточку подробнее. Сейчас у нас времени не осталось. Вы можете сделать это самостоятельно, либо уделим пару минут на следующем занятии, если очень хочется. В частности, здесь из любопытного можно посмотреть на
549: Дефолт дикт и на name тапл. Вот эти 2 штуки достаточно хорошие и любопытные.
550: Можно про ваш опыт хранения ручных автотестов вместе? Да, собственно, это, это очень большой вопрос, но в 2 словах это можно делать, и это имеет место быть, особенно когда
551: Вы не пользуетесь какой-нибудь тмс системой, и ваши тестировщики умеют работать с гитом, работать с гитом. Собственно, это большой большой большой блокер, чтобы вести подобную работу, так и сложность в том, что при подобном подходе придётся
552: Делать очень много кастомного тулинга, который будет, например, связывать ваши автотесты и ручное описание Тестов, которое прям рядышком лежит. Но зато у вас вся работа на проекте ведётся прям
553: 1 пространстве, да, скажем так, у вас ручные тестировщики проходят полноценный процесс ревью ваших тест кейсов. Вы прям читаете код, оставляете замечания на определённые строчки. И вот это вот все на самом деле очень здорово и удобно, но это
554: Имеет, имеет место быть только там, где хорошо развита техническая культура работы, например, там с гитом или вот с гитхабом, с инструментами для работы, с кодом, в общем,
555: Описание её сохранить в коде можно, но это очень, очень сильно зависит от культуры тестирования в компании. Если у вас есть какой-нибудь тестреил и там живёт 30 тестировщиков, ну, вы не сможете применить.
556: Данный подход физически заставить людей и объяснить им, зачем это надо.
557: В хорошо слаженной технической команде, в которой, собственно, которая чувствует себя уверенно при работе с кодом, вы можете применить этот подход.
558: Ну, собственно, будьте готовы, да, что кода для интеграции, для, для различных, может быть, там соединение Тестов между собой, линковки или, может быть, записи вот этих файликов.
559: Тестами в какие-то сторонние системы. Вам придётся написать какой-то код, собственно, который это все будет связывать. К примеру. Это конечно здорово хранить тест кейсы в коде, но покажете ли вы эти тест кейсы в
560: Вашему менеджеру условно, который привык смотреть в джиру, или тестреил, или какую-то подобную штуку. В общем, подобных проблем может возникнуть очень много. Подход имеет место быть, но у меня ощущение, что мир к этому ещё не готов.
561: Средний.
562: На эту тему есть очень интересные доклады на YouTube можно попробовать поискать доклады артёма Ярошенко, к примеру.
563: Окей, если у вас нет вопросов, тогда давайте заканчивать. Спасибо всем большое за занятие и пока, пока ссылочку на