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

Превратить список в String в Python

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

 

Пример 1: Метод Join()

В Python функция соединения — один из самых простых способов преобразования списка в строку. Самая важная вещь, которую следует помнить при использовании этого метода, — это то, что он будет переводить только списки в строки, которые включают только строки в качестве элементов. Итерируемые объекты признаются как параметры для метода join(). Он также извлекает новую строку в качестве входных данных, которая содержит элементы, объединенные из итерируемого объекта.

В этом примере метод join() принимает входной список в качестве входных данных и объединяет элементы списка с выходной строкой, возвращая строку в качестве выходных данных. Изначально мы инициализировали список, в котором есть несколько элементов.

inp_list = [‘Привет’, 'Я', 'Andrey', 'Ex']



out_str = " "



print("Ознакомьтесь со списком прямо сейчас:n")



print(out_str.join(inp_list))

 

Пример 2: понимание списка

В Python понимание списка генерирует список элементов из уже доступного списка. Затем цикл for используется для поэлементного обхода итерируемых объектов. Метод join() объединяет компоненты списка в новую строку и возвращает ее в качестве вывода, в то время как понимание списка просматривает элементы один за другим. Из существующего списка Python List Computing генерирует список элементов. Он также использует цикл for для изучения компонентов итерируемого объекта в шаблоне «элемент за элементом».

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

X = ['Я', 'хочу', 4, 'торта', 'и', 18, 'мороженых'



listToStr = ' '.join([str(elem) for elem in x])



print(listToStr)

 

 

Пример 3: метод map()

Итерируемые объекты, такие как кортежи, списки и строки, принимаются функцией map(). В результате он используется для сопоставления компонентов итерационных объектов указанной функции. Чтобы преобразовать список в строку, функцию карты можно использовать двумя способами. Если список состоит полностью из цифр или если список разнообразен. Метод str() преобразует указанный тип данных в строковый тип данных, а функция map() принимает два ввода. Метод str() будет вызываться для каждого элемента в повторяемой последовательности. Итератор будет использоваться для получения строковых значений. Наконец, все значения, созданные функцией str(), объединяются с помощью метода join().

На этом прикрепленном снимке экрана у нас есть список под названием «x», в котором есть некоторые элементы, включая целые числа и символы. После этого мы использовали метод карты списка и распечатали его результат с помощью оператора печати.

x = ['Я', 'пишу', 2, 'решаю', 'для', ‘andreyex']



listToStr = ' '.join(map(str, x))



print(listToStr)

 

Заключение

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



2021-11-05T20:37:51
Python

Python 3. Вывод текста на консоль. Функция print()

В статье узнаем как в Python 3, с помощью встроенной функции print(), вывести текст на консоль. А для закрепления напишем небольшую программу.





Читать

Как найти среднее значение списка в Python

Среднее (среднее арифметическое) — математическая функция, которая вычисляется путем сложения числовых значений в списке и их деления на количество чисел в списке. Python предоставляет несколько встроенных математических функций; следовательно, он предоставляет различные способы вычисления среднего значения списка.

В этой статье будут обсуждаться различные подходы для получения среднего значения списков в Python в системе Linux. Вот список методов, упомянутых ниже:

  • Нахождение среднего значения списка с помощью функций sum() и len().
  • Нахождение среднего значения списка с помощью функции mean() путем импорта модуля статистики.
  • Нахождение среднего значения списка из функции mean() путем импорта модуля numpy.
  • Нахождение среднего значения списка из функции reduce() путем импорта функций functools и lambda().

 

Требования

Любая версия Python, которая будет установлена ​​в вашей системе Linux, python3 предустановлен в последней версии Ubuntu.

 

Создание файла Python

Чтобы писать код на Python в Ubuntu, вы должны создать файл Python с расширением «.py», создать файл «python_file.py» с помощью указанной ниже команды:

$ nano python_file.py

 

Важная заметка:

  • # используется для написания комментариев (пояснительных операторов), они не выполняются во время выполнения программы.
  • Нажмите Ctrl + s, чтобы сохранить вновь созданный файл python, и Ctrl + x, чтобы выйти из файла.

 

Методы поиска среднего значения списка в Python

Общий синтаксис для поиска среднего по списку упомянут ниже:

среднее = [ сумма значений в списке ]/[ количество значений в списке ]

 

Следуйте любому из приведенных ниже методов, которые помогут вам найти среднее значение списка чисел в python:

 

Как найти среднее значение списка с помощью функций sum() и len()

Первый способ найти среднее — с помощью «функций sum() и len()». Функция sum() вычисляет сумму всех значений в числовом списке, а функция len(), сокращенная до length, дает количество значений в списке. Ниже приведен синтаксис для вычисления среднего значения с использованием функций sum() и len():

average= sum(list)/len(list)

 

Список содержит числовые значения которых среднее должно быть вычислено. Напишите приведенный ниже код в «python_file.py», чтобы найти среднее значение по списку:

print("Поиск среднего с помощью функций sum() и len()")



list_values={1,3,5,7,9,11}



average=sum(list_values)/len(list_values)



print("Среднее значение list_values равно: ",average)

 

Чтобы получить желаемый результат, выполните код, написанный в «python_file.py», с помощью указанной ниже команды:

$ python3 python_file.py

 

Как найти среднее значение по функции mean() из модуля статистики

Другой способ вычислить среднее значение списка — использовать функцию mean(), импортировав модуль статистики. Функция mean принимает числовой список в качестве аргумента и выполняет функцию среднего значения в списке, но мы не можем использовать эту функцию без импорта модуля статистики, ниже указан его синтаксис:

import statistics



average= mean(list)

 

где:

  • statistics: встроенный модуль в python, для выполнения средней функции импортировать этот модуль
  • list: содержит числовые значения, среднее значение которых должно быть вычислено.

 

Напишите приведенный ниже код в python_file.py для вычисления среднего значения списка с помощью функции mean:

import statistics



print ("Поиск среднего значения с помощью функции mean() в модуле статистики")



list_values={1,3,5,7,9,11}



average=statistics.mean(list_values)



print("Среднее значение list_values равно: ",average)

 

Чтобы получить желаемый результат, выполните код, написанный в python_file.py, с помощью указанной ниже команды:

$ python3 python_file. ру

 

Как найти среднее значение с помощью функции среднего из модуля numpy

Мы можем вычислить среднее значение списка с помощью функции mean() из модуля «numpy». Модуль numpy — популярный выбор для работы с большими многомерными массивами. Он также имеет огромное количество математических функций, которые можно применять к массивам для выполнения множества задач. Одним из наиболее важных является метод mean(), который возвращает среднее значение для предоставленного списка, но этот список должен иметь тип массива.

Чтобы использовать модуль numpy для вычисления среднего значения, сначала вам необходимо установить его с помощью указанной ниже команды:

$ pip install numpy

 

Ниже приводится синтаксис для вычисления среднего значения с использованием модуля «numpy»:

import numpy



average=numpy.mean(list)

 

где:

  • numpy: библиотека, которую нужно импортировать, чтобы использовать функцию среднего для вычисления среднего значения.
  • list: содержит числовые значения, среднее значение которых должно быть вычислено.

 

Напишите приведенный ниже код в «python_file.py», чтобы найти среднее значение списка, используя функцию mean из модуля numpy:

import numpy



print ( "Поиск среднего значения с помощью функции mean() в модуле numpy" )



list_values = [ 1 , 3 , 5 , 7 , 9 , 11 ]



average = numpy. mean ( list_values )



print ( "Среднее значение" list_values ":" , среднее )

 

Чтобы получить желаемый результат, выполните код, написанный в «python_file.py», с помощью указанной ниже команды:

$ python3 python_file.py

 

Как найти среднее с помощью функций сокращения и лямбда

Чтобы найти среднее значение списка с помощью reduce() и лямбда, вам необходимо импортировать модуль functools, чтобы использовать функцию reduce() в Python. Функция lambda() может использоваться для вычисления суммы, а функция reduce() может использоваться для итерации по списку.

import functools



average=functools.reduce(lambda i,j : i+j,list)/len(list)

 

где:

  • «i, j»: аргументы лямбды.
  • i + j: выражение для вычисления суммы списка с использованием аргументов лямбда.
  • len(): дает количество значений в списке.

 

Напишите приведенный ниже код в «python_file.py», чтобы найти среднее значение списка с помощью функций lambda() и reduce() из модуля «functools»:

import functools



print("Поиск среднего с помощью функций lambda() и reduce()")



def find_average(list_values):



average= functools.reduce(lambda i, j: i + j, list_values)/len(list_values)



return average



list_values={1,3,5,7,9,11}



average=find_average(list_values)



print("Среднее значение list_values ​​равно:" , среднее)

 

Чтобы получить желаемый результат, выполните код, написанный в «python_file.py», с помощью указанной ниже команды:

$ python3 python_file.py

Заключение

Python предоставляет множество встроенных модулей для использования математических функций. Для расчета среднего значения списка используется метод. В статье 4 описаны методы с примерами для расчета среднего значения списка; используя функции sum() и len(), используя функцию mean() из статистического модуля, используя функцию mean() из модуля numpy и используя функции lambda() и reduce(). Прочитав эту статью, вы научитесь различным методам нахождения среднего значения на языке Python.



2021-10-21T20:22:12
Python

QR и штрих-коды в Python

QR-коды, метод 1

Код QR (Quick Response) — это двухмерный код, содержащий информацию. Фактически, он может хранить больший объем информации, чем даже штрих-коды. Как правило, это пиксельный блок, черно-белый (черные пиксели на белом фоне). На самом деле QR-коды используются всевозможными организациями и фирмами для хранения большого количества данных о себе для своих клиентов. Итак, допустим, вы проходили мимо компании и хотели узнать о ней больше. Предположим также, что у них был QR-код на рекламном щите или визитной карточке. Как правило, вы отсканируете QR-код и получите доступ к хранящейся в нем информации. Затем мы спрашиваем, как мы можем записать информацию в QR-код? Что ж, это легкая часть; мы можем легко сделать это с помощью Python. В этом разделе мы узнаем, как сгенерировать QR-коды с помощью Python.

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

pip install qrcode [pil]

 

После того, как мы его установили, мы импортируем его.

import qrcode

 

Затем мы определяем веб-сайт или информацию, которую хотим сохранить в QR-коде.

h_url = """

www.google.com

This is a search engine. Another great search engine is

www.duckduckgo.com """

 

Теперь мы определяем переменную qr как qrcode.QRCode (), которая принимает не более 4 аргументов — версию, исправление ошибок, размер поля и границу. Параметр версии представляет собой размер QR-кода и находится в диапазоне от 1 до 40. Параметр размера блока, в частности, представляет собой размер каждого блока в пикселях. Параметр границы определяет толщину границы. Параметр исправления ошибок определяет контроль ошибок для QR-кода.

qr = qrcode.QRCode(

version=1,

error_correction=qrcode.constants.ERROR_CORRECT_L,

box_size=20,

border=4,

)

 

После создания переменной qr мы добавляем информацию, которую хотим сохранить в ней, с помощью qr.add_data (). Для этого нужен один аргумент — информация, которую нужно добавить в QR-код.

qr.add_data(h_url)

qr.make(fit=True)

 

Затем мы создаем изображение и используем fill_color и back_color, чтобы определить цвета, которые мы хотим сделать для наших пикселей и фона. Однако здесь мы можем изменить цвета на RGB, если захотим.

image = qr.make_image(fill_color="black", back_color="white")

# image = qr.make_image(fill_color=(0,0,225), back_color=(125, 211, 124))

 

Наконец, чтобы сохранить сгенерированный QR-код, мы используем save (), сохраняя его в каталоге python. Лучше всего хранить его как изображение png.

image.save("qrcode.png")

 

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

import qrcode



h_url = """



www.google.com



This is a search engine. Another great search engine is



www.duckduckgo.com """



qr = qrcode.QRCode(

version=1,

error_correction=qrcode.constants.ERROR_CORRECT_L,

box_size=20,

border=4,

)



qr.add_data(h_url)



qr.make(fit=True)



image = qr.make_image(fill_color="black", back_color="white")



image.save("qrcode.png")

QR-коды, метод 2

Есть много модулей для генерации QR-кодов! В этом примере мы будем использовать FoxHustle-QR.

Сначала установите его, используя:

pip install FoxHustle-QR

 

Полный код занимает всего три строки:

import FoxHustle_QR



QRGen = FoxHustle_QR.QRGenerator()

link = QRGen("https://www.duckduckgo.com", qr="colored light")

link.save('qrcode5.png')

 

В этом модуле требуется всего три строки кода вместо 10. Здесь мы использовали метод QRGenerator () для достижения этой цели. Затем мы передаем в QRGen два аргумента — контент, который вы хотите сохранить в QR-коде, и тип qr. Имейте в виду, что этот модуль дает QR-коды, которые иногда трудно декодировать с помощью декодеров QR-кодов.

 

QR-код, метод 3

Еще один генератор QR-кода (среди множества их) — qr-img.

Для начала установим нужный нам модуль:

pip install qr-img

 

Затем мы можем создать QR-код, используя следующий код:

import qr_img

image = "enemy.png"

out_image = "qrcode6.png"

data = "www.duckduckgo.com"

name = "Kalyani" # this can be anything, it’s there just for fun

saved = qr_img.qrpic(name, image, data, out_image)

print(saved)

 

Это генерирует QR-код с изображением в центре (в моем случае «own.png»). Немного необычно, но тем не менее работает. Здесь изображение — это изображение, которое вы хотите разместить в центре QR-кода. Out_image — это расположение и имя выходного изображения или QR-кода. Данные — это данные, которые вы хотите поместить в QR-код. И имя — это любое слово, какое захотите; это просто для удовольствия. Затем используйте метод qrpic () для генерации QR-кода, передав 4 аргумента — имя, изображение, данные и out_image.

QR-код декодер

Как бы здорово ни было создавать QR-коды, которые могут считывать телефонные приложения, было бы здорово создать декодер. Декодер QR-кода используется для чтения информации, содержащейся в QR-коде.

Для начала установим нужный нам модуль:

pip install qr-img

 

Затем мы декодируем с помощью метода qr_decode () и распечатываем его.

import qr_img



image = "qrcode.png"

text = qr_img.qr_decode(image)

print(text)

 

Обратите внимание, что это не работает с QR-кодами, созданными с помощью метода 2.

 

Штрих-коды

Штрих-код — это многострочный объект, который мы все видим практически на всем. Это то, что мы видим на наших пищевых продуктах, на продуктах, купленных в магазинах, и практически на всем, что мы можем купить. Эти штрих-коды, как и QR-коды, хранят информацию. Однако проблема со штрих-кодами заключается в том, что они ограничены примерно 20 буквенно-цифровыми символами. Здесь QR-коды — это решение проблемы. В этом разделе мы узнаем, как создавать штрих-коды с помощью Python.

Во-первых, начнем с установки модуля штрих-кода:

pip install "python-barcode[images]"

 

Этот конкретный модуль предлагает 11 различных типов штрих-кодов: EAN-8, EAN-13, EAN-14, UPC-A, JAN, ISBN-10, ISBN-13, ISSN, Code 39, Code 128 и PZN. В этом примере мы собираемся использовать EAN-13.

Чтобы сгенерировать штрих-код, нам нужно всего три строки кода:

import barcode



ean = barcode.get_barcode_class('ean13')

ean2 = ean('4502264821487')

ean2.save('barcode')

 

Здесь метод save используется для сохранения штрих-кода в изображение, и он принимает единственный аргумент — имя штрих-кода, который вы хотите сохранить. Эти три строки кода создают так называемый файл svg.

Но предположим, что вы хотите вместо изображения png, тогда используйте следующий код:

from barcode.writer import ImageWriter

import barcode



ean = barcode.get_barcode_class('ean13')

ean2 = ean('7581631153487', writer=ImageWriter())

ean2.save('barcode2')

 

И штрих-коды, и QR-коды широко используются для хранения информации о продукте, компании или другом материале. Разница между штрих-кодом и QR-кодом заключается в том, что QR-код может хранить примерно в 350 раз больше информации, чем штрих-код, и поэтому более широко используется в наши дни. В этом руководстве мы узнали, как с помощью Python создавать штрих-коды и QR-коды. Теперь вы можете создавать свои собственные штрих-коды и QR-коды для своих целей!

Удачного кодирования!



2021-10-20T00:02:16
Python

Пример CGI в Python

CGI сокращенно обозначается в Python как Common Gateway Interface, который представляет собой блок тестов для объяснения обмена данными между веб-сервером и сценарием. Программа CGI написана HTTP-сервером, когда пользовательский ввод вводится через HTML. Другими словами, это набор процедур, которые используются для создания динамического взаимодействия между клиентом и серверным приложением. Когда клиент использует какой-либо элемент или отправляет запрос в веб-браузер, этот CGI выполняет конкретный запрос, а результат или выходные данные отправляются обратно на веб-сервер.

 

Концепция CGI

Каждый раз, когда мы используем гиперссылку на наших веб-сайтах и ​​нажимаем на эту гиперссылку для посещения определенного веб-сайта или URL-адреса, браузер взаимодействует с сетью протокола передачи гипертекста (HTTP). Затем веб-сервер использует URL-адрес и выполняет поиск с аналогичным именем файла. Если совпадение найдено, файл отправляется обратно. Если файл не найден во втором случае, отображается сообщение об ошибке, что мы ввели неправильное имя файла.

Веб-браузер используется для получения ответа от веб-сервера и отображения содержимого. Это может настроить сервер HTTP так, что всякий раз, когда мы запрашиваем конкретный файл, этот файл должен быть выполнен вместо отправки его обратно. Независимо от содержимого этого файла выполняется как программа и отправляется обратно в браузер для отображения файла. Для python эти коды объявлены как сценарии Python.

Если вы хотите выполнять сценарии Python в Интернете, вам необходимо изучить, как выполнять python как сценарий CGI.

 

Конфигурация веб-сервера Apache для CGI

Конфигурация сервера необходима для получения наших сценариев CGI. Это будет сделано путем установки каталога в качестве директивы псевдонима сценария. Вы можете использовать другие варианты, загрузив «xamp» в свою систему. «ScriptAlias» используется для отображения между путями «файловой системы» и URL-адресами. Псевдоним сценария использует способ создания целевого каталога, поскольку он содержит только сценарии CGI. Установка каталога в качестве директивы «scriptAlias» важна, поскольку она распознает, что все файлы, существующие в каталоге, являются сценариями CGI. Обычно псевдоним сценария выглядит как ссылка ниже в «HTTP.conf» веб-сервера apache.

 

Запустить CGI из определенного каталога

Чтобы подготовить конкретный каталог для отображения сценария CGI, вам необходимо использовать следующую ссылку.

<Directory /usr/local/apache2/htdocs/dir(any directory)>Options +ExecCGI</Directory>

 

Где ‘dir’ — это каталог по вашему выбору, используя вышеупомянутую конфигурацию, вам необходимо указать следующее, чтобы указать расширения сервера файлов CGI, которые вы хотите запустить.

# AddHandler cgi-script .cgi .pl

 

Эта информация играет важную роль в указании Apache выполнять файлы с расширениями .CGI и .PL как CGI.

 

Веб-сервер IIS для настройки CGI

Мы используем операционную систему Windows 10. Она также похожа на Windows Server 2007 и 2008. Какой бы ни была операционная система, у вас должен быть работающий интерпретатор python в операционной системе Windows.

Для этого перейдите на панель задач. Откройте «панель управления». Теперь щелкните «Программы». Выберите желаемый вариант функции Windows. Откроется небольшое окно с заголовком «Возможности Windows». Перейдите в Интернет «Информационные службы Интернета». Теперь перейдите к функции разработки приложений и перейдите к флажку CGI. Чтобы продолжить, выберите «ОК».

Теперь перейдите к началу, а затем перейдите к окну диспетчера IIS. Здесь перейдите на «Веб-сайт по умолчанию» на левой панели. Щелкните правой кнопкой мыши «веб-сайт по умолчанию», а затем щелкните «Добавить приложение».

Теперь в текстовом поле «Псевдоним» введите имя. то есть «PythonApp». И в «физический путь» добавьте путь, по которому сохранено приложение «Pythonapp». Затем нажмите «ОК», чтобы продолжить.

После настройки веб-сервера для запуска python как CGI мы теперь пытаемся запустить простой код на веб-сервере. Перед началом работы следует соблюдать некоторые моменты.

  • Убедитесь, что код Python не содержит синтаксических ошибок.
  • Убедитесь, что ваш файл имеет права на чтение, запись и выполнение с правами администратора, чтобы его можно было изменять везде, где вы собираетесь запускать этот файл, в Windows, Linux или Unix.

 

Выполнить первый образец файла

Используйте HTML-код для полей ввода.

<form action = "/cgi-bin/hello_get.py" method = "get">



First Name: <input type = "text" name = "Fname">  <br />



<input type = "button" value = "Submit" />



</form>

 

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

Теперь перейдем к коду Python.

# import cgi,cgitb



# cgitb.enable()



# form = cgi.FieldStorage()



# name = form.getvalue('fname')



# print("Имя пользователя является:",name)

 

Теперь давайте объясним вышеописанный код Python. Во-первых, нам нужно импортировать базовые модули для исполнения.

# Import cgi, cgitb.

 

«Cgitb.enable()» поможет вам, когда ничего хорошего не происходит. Или вы обнаружите какую-то ошибку. Но здесь следует упомянуть то, что он не поможет вам, если вы столкнетесь с проблемами EOF или какой-либо синтаксической ошибкой. У него другие цели.

# form = cgi.FieldStorage()

 

Теперь мы использовали текстовые файлы модуля CGI в форме. Имя будет извлечено HTML-формой с использованием:

# form.getvalue(‘fname’)

 

Команда печати используется для отображения текста, который мы ввели в текстовое поле на странице HTML. Эта команда берет данные из функции getvalue (‘fname’). Здесь используется переменная для хранения полученного значения.

 

Преимущества программирования CGI

Есть много полезных аспектов программирования CGI. Некоторые из них упомянуты здесь:

  • Эти программы не зависят от языка.
  • Программы CGI могут работать на любом веб-сервере.
  • Они портативны и могут улучшить динамическую связь между веб-приложениями.

 

Некоторые недостатки также требуют внимания.

  • Эти программы сложно отлаживать, поскольку они слишком сложны.
  • Требуемое время обработки очень долгое.
  • В основном данные не хранятся в кэш-памяти.

 

Заключение

«Пример Python CGI» — это статья о практическом создании соединения между сервером и клиентом. Это делается путем выполнения различных шагов и процедур как на стороне сервера, так и на стороне клиента. Мы использовали простой пример, чтобы напечатать имя на Python, когда оно было введено в браузер. Добавлена ​​дополнительная функция HTML для создания страницы с образцом ввода. Я надеюсь, что наши намерения рассказать вам об использовании CGI сработают.



2021-10-18T19:37:53
OS Windows

Python. Карманный справочник

Python. Карманный справочник

Книга Python. Карманный справочник. Этот краткий справочник по Python карманного типа обновлен с учетом версий 3.4 и 2.7 и очень удобен для наведения быстрых справок в процессе разработки программ на Python. В лаконичной форме здесь представлены все необходимые сведения о типах данных и операторах Python, специальных методах, встроенных функциях и исключениях, наиболее употребительных стандартных библиотечных модулях и других примечательных языковых средствах Python.

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

2021-10-13T22:00:41Книги и Курсы