Архив метки: Python

Python. NumPy pad()

В этой статье будет рассмотрена NumPy pad(). Мы также рассмотрим его синтаксис и аргументы для лучшего понимания. Затем на нескольких примерах мы покажем, как все элементы теории применяются на практике. Но сначала давайте посмотрим на определение функции, чтобы лучше понять ее.

 

Определение NumPy и его синтаксис

Как мы все знаем, NumPy — это мощный математический пакет Python. Он включает в себя функцию под названием NumPy pad(), которая добавляет отступы к массивам. По мере продвижения по тексту определение, которое мы только что обсуждали, станет более ясным. Синтаксис, относящийся к этой функции, будет рассмотрен в прилагаемом разделе.

# numpy.pad(array, pad_width, mode='')

 

Общий синтаксис нашей функции показан выше. Существуют различные критерии, которые сопровождают это, и мы рассмотрим их сегодня. Параметр «array» указывает входной массив, к которому должно быть применено заполнение. Количество значений, добавленных к краю каждой оси, представлено аргументом «pad_width».

«mode» — это параметр. Он может представлять собой одно из приведенных ниже строковых значений или предоставленную пользователем функцию.

  • constant: при использовании этой опции заполнение выполняется с постоянным значением.
  • edge: в этой ситуации заполнение выполняется значением края массива.
  • maximum: когда выбран этот параметр, заполнение рассчитывается путем сложения наибольшего значения всех частей вектора вдоль указанной оси.
  • mean: заполнение в этой ситуации использует среднее значение всех секций вектора вдоль указанной оси.
  • median: когда выбран этот параметр, заполнение использует наибольшее значение из всех частей вектора вдоль предоставленной оси.
  • reflect: в этом случае вектор дополняется путем отражения его между начальным и последним значениями по каждой оси.

‘maximum,” mean,”median,’ и ‘minimum’ используют аргумент длины «stat». Статистическое значение рассчитывается с использованием количества значений на краю каждой оси.

В «constant» используется параметр «constant values». Значения используются для заполнения значений для каждой оси здесь.

 

Пример 1:

Мы рассмотрим, как работает этот метод и как он помогает нам достичь желаемого результата в этой части, когда мы рассмотрели всю теорию, лежащую в основе NumPy pad(). Мы начнем с простого экземпляра и перейдем к более сложным. Мы рассмотрим, как работает функция клавиатуры NumPy, в нашем первом примере.

Во-первых, мы импортировали модуль NumPy в пример программы ниже. После этого мы определили вход (обозначенный как abc), на котором должна быть выполнена операция. Затем мы использовали наш синтаксис, чтобы получить желаемый результат.

В этом примере мы выбрали «maximum» в качестве нашего режима. В результате передняя и задняя части дополняются максимум до 32 (максимальное значение). Ниже приведена реализация, как вы можете видеть.

import numpy as ppool

abc=[2,32,7,8]

print(ppool.pad(abc,(2,3),"maximum"))

 

Вот результат, где вы можете увидеть максимальное значение в начале и в конце массива.

[32 32 2 32 7 8 32 32 32]

 

Пример 2:

Давайте посмотрим на другой пример, используя другой режим. Вторая иллюстрация, похожая на первую. Однако в данном случае мы использовали другой массив. Кроме того, мы выбрали «reflect» в качестве режима наблюдения. Можно увидеть изменение выхода.

import numpy as p

abc=[12,33,22,37,60,80,2]

print(p.pad(abc,(5,1),"reflect"))

 

Вот результирующий экран приведенного выше кода.

[80 60 37 22 33 12 33 22 37 60 80 2 80]

 

Пример 3:

Первый аргумент, один (3,2) кортеж, указывает, что в этом примере три компонента добавляются перед осью, а два элемента добавляются после оси.

Опция режима определяет тип значения, которое будет использоваться для заполнения массива. Мы используем постоянные значения 1 и 5 для заполнения массива в нашем коде, но мы можем изменить этот режим на медианный, средний, пустой, перенос и т. д. Каждый режим добавляет новый элемент в массив, чтобы дополнить его.

import numpy as p

one = [2,4,6,8]

two = p.pad(one,(3, 2), mode =  'constant', constant_values = (1, 5))

print(two)

 

Ниже приведен экран вывода для вашей помощи.

[1 1 1 2 4 6 8 5 5]

 

Пример 4:

В этом случае мы импортировали NumPy с псевдонимом «pp» в приведенном выше коде. Используя вектор, ширину площадки, ось и kwargs, мы разработали метод pad. Чтобы получить значения заполнения из предоставленной функции get(), мы объявили значение переменной padding.

Значения заполнения были предоставлены части вектора.

Мы использовали функцию np.arange() для построения массива «one» и функцию reshape() для изменения его формы. Результирующее значение функции np.pad() было присвоено переменной ‘two’. Функция предоставила список «один» и параметр ширины pad. Наконец, мы попытались напечатать значение «two».

import numpy as pp

def pad_with(vector, pad width, iaxis, kwargs):

         padding_val = kwargs.get('padder', 5)

         vector[:pad_width[0]] = padding_val

         vector[-pad_width[1]:] = padding_val

one = pp. arange(6)

one = one.reshape((3, 2))

two = pp. pad(one, 2, pad_with)

print(two)


Результирующий экран показывает ndarray, дополненный определенным размером и значениями в выходных данных.

[[5 5 5 5 5 5]

 [5 5 5 5 5 5]

 [5 5 0 1 5 5]

 [5 5 2 3 5 5]

 [5 5 4 5 5 5]

 [5 5 5 5 5 5]

 [5 5 5 5 5 5]]

 

Заключение

Pad() — очень важная функция для специфического кодирования, она стала часто используемой функцией в Python. Функция позволяет изменять массив, чтобы ограничить количество конфликтов системы памяти. Функция numpy.pad() широко используется для полной функциональности AST. Эта функция, в частности, позволяет пользователю указать новый размер или даже позволить системе автоматически рассчитать размер для них.

В результате возможность оптимизации ресурсов памяти была настроена так, чтобы сократить время обработки системы. Этот пост был о том же, и мы обсудили функцию с несколькими примерами для вашей помощи.



2022-03-12T15:06:48
Python

Базовое имя Python

Python предоставляет различные методы взаимодействия с операционной системой для управления именами файлов и именами каталогов через модуль os. В этой статье обсуждается один из встроенных методов Python, используемых для получения базового имени файла по заданному пути: метод os.path.basename(), который позволяет нам извлечь имя файла из указанного пути.

Мы должны использовать os.path.basename() в коде, импортируя модуль os. Этот метод os.path.basename() дополнительно использует функцию split() для разделения строки пути на пару, которая будет возвращать начало и конец. Головная часть предназначена для имени каталога, а хвостовая часть возвращается методом os.path.basename(). Давайте подробнее об этом методе.

 

Синтаксис базового имени Python:

Чтобы получить имя файла, которое является базовым именем из пути, мы должны использовать этот синтаксис.

Os.path.basename(path)

 

Os.path — это подрежим модуля os для манипулирования именами путей. Итак, сначала нам нужно импортировать модуль os для этого метода базового имени.

 

Параметр передается в базовом имени python:

Этот метод os.path.name() принимает только указанную строку пути, представляющую путь к файловой системе.

 

Возвращаемое значение в базовом имени python:

os.path.basename() вернет значение в строке заданного пути, которое является базовым именем файла. Теперь у нас будет простой пример реализации того, как работает этот метод os.path.basename().

 

Пример 1:

В Windows и Unix у нас есть разные форматы для извлечения базового имени файла с указанным путем, поэтому в этом примере мы собираемся извлечь базовое имя с синтаксисом окна и синтаксисом Unix. Сначала у нас есть пример окна.

В окне используется разделитель с обратной косой чертой ‘’; мы можем проверить или подтвердить этот разделитель с помощью метода os.path.sep(). Переменная «file_dir» имеет путь «UsersabcDownloadsMy Window», который является именем каталога файла, а «file_name» имеет путь, заданный «UsersabcDownloadsMy Windowindex.html». Обе переменные возвращают базовое имя файла с синтаксисом Window. Мы также будем печатать разделитель окон с помощью метода os.path.sep().

import os.path



file_dir = os.path.basename("UsersabcDownloadsMy Window")



print(file_dir)



file_name = os.path.basename("UsersabcDownloadsMy Windowindex.html")



print(file_name)



print(os.path.sep)

 

Экран консоли покажет выходные данные, печатающие имя каталога файла, базовое имя файла и знак разделителя.

Теперь у нас есть разделитель Unix, используемый в этом примере ниже. Unix использует косую черту ‘/’ в качестве разделителя пути. Мы можем получить этот разделитель, напечатав метод os.path.sep().

import os.path



file_dir = os.path.basename("/Downloads/ My Unix")



print(file_dir)



file_name = os.path.basename("/Downloads/ My Unix /unix.txt")



print(file_name)

 

Пример 2:

Давайте рассмотрим пример извлечения имени файла с помощью метода os.path.basename(). Мы импортировали os.path для доступа к методу os.path.basename() в этом конкретном примере. У нас есть «базовое имя», которое вернет базовое имя файла, которое мы назначили в os.path.basename. С оператором print() у нас будет базовое имя.

import os.path



basename = os.path.basename("/home/example/exampleFile.txt")



print(basename)

 

Здесь у нас есть «/home/example/» в качестве имени пути и «exampleFile.txt» в качестве базового имени.

 

Пример 3:

В этом примере мы найдем базовое имя каталога или имени папки. Имя папки или каталога также имеет базовое имя в полном пути. В этом примере у нас есть «Документы» в качестве базового имени из пути «/home/MyDocuments/Documents», который передается в os.path.basename(). Переменная ‘basename’ вернет вывод, который вызывается в функции print().

import os.path



basename = os.path.basename("/home/MyDocuments/Documents")



print(basename)

 

Мы получим «Документы» в качестве базового имени из приведенного выше кода.

 

Пример 4:

Чтобы получить базовое имя из URL-адреса, нам нужно импортировать библиотеку из модуля стандартного пакета urllib, который называется urlparse. Это поможет нам разделить строки URL на компоненты или снова объединить строку URL в компоненты.

В этом примере будет получено базовое имя URL-адреса для формирования переменной «URL», которая имеет строковый URL-адрес «https://docs.python.org/3/download.html». URL-адрес передается в метод urlparse() в качестве аргумента, который разделит URL-адрес на части. Этот анализ URL-адреса хранится в новой переменной «x», которая будет отображать строку разделенного пути URL-адреса. На этот раз мы используем os.path.basename() через оператор печати.

import os



from urllib.parse import urlparse



url = "https://docs.python.org/3/download.html"



x = urlparse(url)



print(x.path)



print(os.path.basename(x.path))

 

Отображение разделенной строки URL-адреса и базового имени из URL-адреса.

 

Пример 5:

В этом примере используется метод os.path.split() для возврата пары «голова» и «хвост» по отдельности. Для этого мы должны передать указанный путь в качестве аргумента в метод os.path.split(). Мы получим «голову» и «хвост» отдельно через оператор печати.

import os



path = "/Users/Desktop/Article/python/code.py"



head_tail = os.path.split(path)



print(head_tail)

 

Вы можете увидеть вывод этого кода, поскольку он показывает головную часть и хвостовую часть по отдельности.

 

Пример 6:

Мы извлекли базовое имя и расширение, определенные в этом примере. Мы будем извлекать имя файла без расширения с помощью другого метода os.path.splitext(). Этот метод даст только базовое имя, определенное в os.path.basename().

Мы назначили путь как «home/example/example3.txt» в переменной «basename». Используйте индекс как «0», чтобы получить базовое имя без расширения.

import os.path



path_name="home/example/example3.txt"



basename = os.path.splitext(os.path.basename(path_name))[0]



print(basename)




 

У нас есть вывод basename как «example3» без расширения на экране консоли.

 

Заключение

В этой статье мы рассмотрели все возможные способы получения базового имени по указанному пути. Кроме того, мы продемонстрировали получение базового имени в Windows и Unix с разными разделителями. Теперь, надеюсь, эта функция даст вам четкое понимание.



2022-03-10T17:23:26
Python

Python. встроенный If-Else

Язык программирования Python удобен для чтения и эффективен при написании операций. В этой статье обсуждаются встроенные условные операторы if-else. В Python нет тернарного оператора, поэтому мы используем if-else в одной строке, что имеет тот же эффект, что и тернарный оператор. Это условие оценивает условия в состоянии истинности или ложности.

Как встроенные операторы if-else — это логические операторы, которые предлагают одну строку, которая сохраняет качество кода, заменяя несколько строк кода if-else. Встроенные операторы if-else следует использовать с выражениями и их выполнением на основе условий оценки.

 

Синтаксис встроенного if-else в Python

Чтобы написать встроенный оператор if-else, мы должны следовать этому синтаксису.

<expression1> if <condition> else <expression2>

 

В этом синтаксисе <expression1> будет возвращено или выполнено, если условие истинно, иначе будет возвращено или выполнено <expression2>, и эти условия всегда выполняются слева направо.

 

IndentationError во встроенном if-else

Python использует отступы, чтобы различать, какие строки кода соответствуют другим. Потому что файл Python может содержать несколько определений функций. Функция должна иметь одну строку кода, чтобы быть допустимой. Это также означает, что даже если условие истинно, должна быть выполнена хотя бы одна строка кода; в противном случае возникает исключение IndentationError с сообщением «ожидается намеренный блок».

 

Пример 1:

Давайте начнем с простого примера того, как работает это встроенное if-else. Помните, что условия оцениваются слева направо. Здесь мы определяем переменную «a» равной «5», а a_output имеет условие if-else, которое мы передаем функции print() для отображения вывода. Встроенное условие if-else здесь вернуло «20», если переменная «a» равна «20», иначе вернуло «10».

a = 5



a_output = "20" if  a==20 else "10"



print(a_output)

 

Итак, у нас есть «а» равно «5», поэтому условие ложно, и мы получаем 10 после выполнения этого кода.

 

Пример 2:

В этом примере у нас есть две переменные во встроенном операторе as. В коде мы определяем переменную как «x» и присваиваем значение «20». Кроме того, у нас есть еще одна переменная, поскольку «y» равно «10». Таким образом, условие «y» равно «10», если «x» меньше «20», иначе будет напечатан «0». Что ж, передайте «x» через условие, поэтому слева направо, если «x» меньше «20», ответ будет «нет», поэтому мы ожидаем, что «y» будет «0». Давайте запустим пример и посмотрим на значение ‘y’.

x=20



y=10  if x<20 else '0'



print(y)

 

Здесь «у» равен «0», потому что условие ложно, так как «х» не меньше «20», он равен «20».

Из приведенного выше кода мы получили значение «y» как «0». Теперь, что, если «x» меньше «20», взяв значение «x» как «19». Мы ожидали, что «y» будет «10». Мы можем увидеть значение «y», напечатав значение.

x=19



y=10  if x<20 else '0'



print(y)

 

Поскольку у нас есть выходное значение «y» равное 10, условие истинно, поскольку «x» меньше «20».

 

Пример 3:

В этом конкретном примере у нас есть код строки. Присвоив значение «красный» переменной «цветок» и применив встроенное условие if-else, которое печатает «Цветок белый», если переменная «цветок» равна «белому», иначе будет напечатано выражение «цветок не белый». .

flower='red'



print("Цветок белый" if flower == 'white' else "Цветок не белый")

 

Значение цветка красное; в результате условие не выполняется, и реализуется оператор в другой части. Вы можете увидеть вывод ниже, который печатает «Цветок не белый».

 

Пример 4:

Все примеры представляют собой просто встроенные условия if-else, но сейчас мы обсудим вложенные условия if-else. Мы берем пример одобрения автомобильных прав для людей, имеющих возраст, равный 18 или старше 18 лет.

У нас есть переменная «age», которая принимает данные от пользователя. В условном встроенном заявлении будет напечатано «вы не имеете права подавать заявку», если возраст младше 16 лет. Если возраст составляет от 16 до 18, будет напечатано «нужно подождать, пока вам исполнится 18+»; в противном случае будет показано «вы имеете право подать заявку».

age = int(input("Введите ваш возраст = "))



message= 'Вы не имеете права подавать заявку' if age<16 else 'вам нужно подождать, чтобы вам исполнилось 18+' if 16<age<=18 else 'вы имеете право подать заявку'



print(message)

 

Вывод этого кода показывает сообщение «Вы не имеете права подавать заявку», поскольку пользователь вводит возраст 15 лет, что меньше 16 лет.

Теперь, когда пользователи вводят возраст 17 лет, мы печатаем «вам нужно подождать, чтобы вам исполнилось 18+», поскольку возраст составляет от 16 до 18.

На экране консоли было напечатано «вы имеете право подать заявку», поскольку возраст старше 18 лет.

 

Пример 5:

Это пример чрезвычайно очевидного случая в реальном времени, когда мы должны оценить несколько условий. Здесь мы должны выделить оценку из набранных баллов; мы определяем переменную «AndreyEx» и инициализируем ее значением «80».

Условие хранится в переменной с именем «Результат», которая будет печатать оценки от «А» до «Неудачно» при выполнении. На этот раз оценки выше 90, поэтому ожидается, что на выходе будет A+. Давайте запустим этот код, чтобы увидеть, каков результат этого кода.

AndreyEx = 95



Result = 'Grade = A+' if AndreyEx > 90 else 'Grade = A' if AndreyEx > 80 else 'Grade = B' if AndreyEx >70 else 'Grade = C' if AndreyEx >60 else 'Grade = D' if  AndreyEx > 40 else 'Fail'



print(Result)




Оценка A+ выводится на экран консоли.

 

Заключение

Мы подробно рассмотрели встроенные if-else в python с несколькими допустимыми примерами с помощью терминала Spyder. Встроенный if-else имеет гораздо более короткий и аккуратный код, который понятен и прост в использовании. Надеюсь, это поможет вам понять фундаментальную концепцию встроенных операторов if-else.



2022-03-07T20:29:58
Python

Изучаем pandas

Изучаем pandas

Книга: Изучаем pandas. Библиотека pandas – популярный пакет для анализа и обработки данных на языке Python.

Он предлагает эффективные, быстрые, высокопроизводительные структуры данных, которые позволяют существенно упростить работу.

Данная книга познакомит вас с обширным набором инструментов, предлагаемых библиотекой pandas, – начиная с обзора загрузки данных с удаленных источников, выполнения численного и статистического анализа, индексации, агрегации и заканчивая визуализацией данных и анализом финансовой информации. Читать

Анализ поведенческих данных на R и Python

Behavioral Data  Analysis with R  and Python

Книга: Анализ поведенческих данных на R и Python. Задействуйте всю мощь поведенческих данных в своей компании, используя инструменты, специально разработанные для их анализа. Общепринятые алгоритмы науки о данных и инструменты предсказательной аналитики трактуют данные о поведении клиентов, такие как клики на веб-сайте или покупки в супермаркете, аналогично любым другим данным. Однако в этой книге представлены мощные методы, специально приспособленные для анализа поведенческих данных.

Усовершенствованный экспериментальный дизайн позволяет вам получать максимальную отдачу от ваших A/B-тестов, тогда как причинно-следственные диаграммы позволяют выявлять причины поведений, даже если вы не можете проводить эксперименты.

Книга написана в доступном стиле для исследователей данных, бизнес-аналитиков и бихевиористов. Приведены полные примеры и упражнения на языках R и Python, которые помогут вам получать более глубокую информацию о ваших данных — и не откладывая в долгий ящик.

Скачать с mail облака

2022-02-14T09:59:00Книги и Курсы

Добавление DataFrame в Pandas

Pandas — это специальный пакет Python, основанный на анализе, который специально используется для оценки и контрабанды данных Python. Он предлагает функцию «DataFrame()», которая была популярна для выравнивания данных Python в строках и столбцах, то есть в матричной форме. Как следует из названия, функция «append()» используется для добавления чего-либо в конец некоторой структуры. Таким образом, мы можем сказать, что в pandas функция append() должна использоваться для добавления данных из одного фрейма данных в конец другого фрейма данных. Таким образом, мы будем реализовывать некоторые примеры Python в Spyder 3, чтобы увидеть работу функции pandas DataFrame.Append() в Windows 10. Давайте начнем.

 

Пример 01:

Давайте начнем с первого примера, чтобы увидеть, как можно инициализировать фреймы данных Python с помощью pandas. В инструменте Python Spyder 3 мы импортировали пакет panda с ключевым словом «import» как объект «pd». Это будет использоваться для инициализации фрейма данных в коде. Итак, мы добавили новую переменную d1, получая новый фрейм данных pandas через объект «pd», используя функцию «DataFrame()». Функция DataFrame() предназначена для создания фрейма данных табличной формы при добавлении двух списков 2*2, т.е. строк в столбцы. Столбцы были названы как 1 и 2, используя структуру списка для них. Индексы для строк были объявлены как 1 и 2. Оператор печати здесь для вывода фрейма данных «d1» на консоль.

После создания первого фрейма данных мы также создали еще один фрейм данных тем же методом. Единственное изменение здесь в списках значений, т.е. другие значения. Оператор печати отображает второй фрейм данных d2 на консоли. Теперь предпоследний оператор печати сообщает нам, что мы будем отображать фрейм данных добавления. Таким образом, второй фрейм данных d2 был добавлен в конец первого фрейма данных d2 с помощью функции append(). Оператор печати отображает добавленный фрейм данных.

import pandas as pd

d1 = pd.DataFrame([['a', 'b'], ['d', 'e']], columns=list('12'), index=['1', '2'])

print("Dataframe 1 ...")

print(d1)

d2 = pd.DataFrame([['c', 'f'], ['g', 'h']], columns=list('12'), index=['1', '2'])

print("Dataframe 2 ...")

print(d2)

print("Appended Dataframe...")

print(d1.append(d2))

 

После того, как код был завершен, пришло время выполнить этот код Python, чтобы увидеть результаты. Используйте кнопку запуска Spyder 3 на панели задач и вперед. Взамен мы получили следующий результат. Он показывает первый и второй кадры данных отдельно. После этого на выходе отображается второй фрейм данных, добавленный к первому фрейму данных.

Добавление кадра данных Pandas

 

Пример 02:

Давайте рассмотрим еще один пример использования функции append() для соединения двух фреймов данных панд. На этот раз мы использовали словари для создания фреймов данных. Итак, мы запустили программу для импорта пакета pandas как «pd». Два фрейма данных, d1 и d2, были созданы и инициализированы с помощью функции pandas DataFrame() с объектом «pd». Мы инициализировали библиотеку в обоих фреймах данных, имеющих два значения пары ключей. Ключ представляет собой некоторый алфавит или символ, и он одинаков в обоих фреймах данных «x» и «y». В то время как пара ключей «x» и «y» — это два списка совершенно разных значений в каждом для обоих фреймов данных. Первые два оператора печати предназначены для отображения кадров данных d1 и d2 отдельно с разрывом строки на «n».

import pandas as pd    

d1 = pd.DataFrame({"x":[1, 3, 5], "y":[2, 4, 6]})  #использование словаря

d2 = pd.DataFrame({"x":[7, 9, 11], "y":[8, 10, 12]}) #использование словаря

print(d1, "n")

print(d2, "n")

print(d1.append(d2))

 

После запуска этого кода мы получили кадры данных, отображаемые по отдельности, а затем вместе.

Добавление кадра данных Pandas

 

Пример 03:

Давайте взглянем на наш последний пример использования фрейма данных panda с функцией append(), чтобы объединить их в один. На этот раз мы начали наш код с создания двух словарей строкового типа, dic1 и dic2, после импорта пакета панды как объекта «pd». Оба словаря dic1 и dic2 имеют 3 значения пары ключей. Ключи имеют строковые типы, первые два значения — списки строкового типа, а последнее значение ключа — списки целочисленного типа. dic1 и dic2 были преобразованы во фрейм данных pandas путем вызова функции DataFrame с объектом pandas «pd». Кадры данных сохраняются в d1 и d2. Теперь функция append() используется для соединения d1 с d1 и сохраняется в переменной d3. Фрейм данных соединения d3 распечатывается с помощью функции print().

import pandas as pd

dic1 = {

    'Name': ['John', 'William', 'Laila'],

    'FName': ['Jack', 'Worth', 'Sky'],

    'Age': [36, 50, 25]

}

dic2 = {

    'Name':['Elizebath', 'Diana', 'Marshal'],

    'FName':['Patinson', 'Penty', ''],

   'Age': [56, 25, 29]

}

d1 = pd.DataFrame(dic1)

d2 = pd.DataFrame(dic2)

d3 = d1.append(d2)

print("nThe appended dataframe:n", d3)






Кадры данных были добавлены и отображены в соответствии с выводом.

Добавление кадра данных Pandas

 

Вывод:

В этой статье было рассмотрено использование функций pandas DataFrame() и append() в python при использовании инструмента Spyder 3. Мы использовали списки и словари целочисленных, символьных и строковых типов для создания фреймов данных и последующего добавления их вместе. Мы надеемся, что это руководство окажется полезным при использовании  или любого другого инструмента Python.



2022-02-12T22:43:50
Python