Какая программа формирует список

Упорядоченную информацию удобно представлять в виде списков. Списки используют для оформления перечней объектов и документов, последовательно выполняемых действий и т..пWord поддерживает автоматизированное создание маркированных, нумерованных и многоуровневых списков. В нумерованных списках пункты нумеруются, а в маркированных — помечаются одинаковым маркером.

Удобство использования списков заключается в том, что при добавлении и исключении пунктов автоматически корректируется длина списка. Для создания нумерованных и маркированных списков с параметрами по умолчанию удобно пользоваться кнопками Нумерация и Маркеры панели инструментов Форматирование . Для изменения значений параметров списков необходимо открыть диалоговое окно командой Формат→Список . При создании документов, как правило, многократно используется несколько вариантов оформления абзацев. Форматировать абзацы вручную (в окне Абзац или по линейке) достаточно просто, но нецелесообразно. Для эффективной работы в процессореWord существует мощный и удобный метод автоматизированного форматирования, основанный на концепции стилей. Такой подход позволяет легко и быстро изменять внешний вид документа, значительно повышает производительность труда, гарантирует единство оформления однотипных абзацев и заголовков.

Выпадающие списки в Excel (быстро и надежно)

16.Табличный процессор MS Excel. Функциональные возможности. Типы данных, формулы, функции. Значения ошибок. Назначение и функциональные возможности. Microsoft Excel –одно из наиболее популярных приложенийMicrosoft Office.

Используется в работе специалистами различного профиля (экономистами, финансистами, бухгалтерами, статистиками, инженерами, аналитиками и др.). Microsoft Excel широко применяется для автоматизации бухгалтерского учета. Документы расчетного характера переводятся в электронную форму, сохраняются как шаблоны для многократного использования.

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

Microsoft Excel: – является идеальной средой для выполнения вычислений различной сложности и без особых затрат на программирование; – обеспечивает хранение и обработку больших массивов информации типа реляционных баз -дан ных; – включает развитый математический аппарат и специальные технологии статистического анализа; – содержит графические средства представления и анализа данных. Microsoft Excel доступен пользователям различной квалификации– от начинающих пользователей до профессиональных программистов.

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

Как быстро сделать список источников и расставить ссылки в тексте?

Используют все средства Microsoft Excel: набор встроенных функций, стандартные надстройки, средства интеграции данных, функций обработки других программных средств (приложений Microsoft Office). Профессиональные программисты с помощью инструментальных средств (язык программирования Visual Basic for Application) создают пользовательские приложения и специальные надстройкиMicrosoft Excel, обеспечивающие высокий уровень автоматизации обработки информации.

Данные, формулы, функции. Значения ошибок. Типы данных, которые можно вводить в ячейку. В ячейки электронной таблицы можно вводить два типа данных: константы и формулы. Константы делятся на три основные категории: числа, текст, дата и время.

Текст используют для пояснения содержания данных других ячеек, в основном чисел. Числа являются основными данными электронных таблиц. Используются в формулах. Форматы чисел. Числовые данные в Microsoft Excel выводятся на экран в определенном формате. По умолчанию это Общий формат . Сама система определяет, в каком виде отображать число.

Microsoft Excel предоставляет следующие форматы для числовых данных: Числовой – позволяет изменить число десятичных знаков(цифр после десятичной точки), установить разделитель групп разрядов, способ вывода отрицательных чисел. Денежный – задает число десятичных знаков, способ отображения отрицательных чисел, отображение денежных единиц.

Финансовый – устанавливает выравнивание денежных величин по десятичной точке, задает число десятичных знаков, отображение денежных единиц. Процентный – этот формат отображает число умноженное на100 со знаком % и определяет число десятичных знаков. 0,1=10% Дробный – выводит число в одном из 9-и форматов.

0,3333=1/3 Экспоненциальный (научный) – число отображается в виде: aEb, где a – мантисса, b – порядок, a10 b . Используется для представления чисел с плавающей десятич- ной точкой. Например: 123=1,23*10 2 , в Microsoft Excel 1,23E+02. Текстовый формат — отображения чисел, как текста используется. Есть более простой способ представления чисел в виде текста, ввести `– апостроф перед числом, `01.

Для отображения даты и времени в списке числовых форматов содержатся две категории: Время – представляет время в одном из восьми форматов и Дата – представляет дату в одном из 12 форматов. Пользовательский формат . Microsoft Excel предоставляет возможность создания пользовательских форматов, используя встроенные форматные коды. Формулы. Основные сведения. Вычисления в таблицах выполняются с помощью формул. Формула начинается со знака равенства » = «. Формула состоит операторов и операндов .

В зависимости от используемых операторов формулы (выражения) можно разделить на три группы: — арифметические выражения: операторы +, -, *, /, ^;% (вычисление процента) — логические выражения: операторы <, >, =, <>, =; — текстовые 2. возведение в степень, ^; 3. умножение или деление, по порядку; 4. сложение или вычитание, по порядку. Для изменения порядка вычисления в формуле используют скобки (). Примеры формул:

a + b : =(A1+B1)/(C1-D1) ab : =A1*B1/(C1*D1)
c — d cd

Функции Microsoft Excel Функциями в Microsoft Excel называют объединения нескольких вычислительных операций для решения определенной задачи. Функции в Microsoft Excel представляют собой формулы, которые имеют один или несколько аргументов.

Читайте также:
Как удалить программу Телеграмм с компьютера

Аргументами функции могут быть: константы (числа), диапазон ячеек, ссылка на ячейку, другая функция (вложенная функция, допустимо 7 уровней вложенности), формула (выражение), имя ячейки (диапазона ячеек). Функции: – упрощают формулы; – выполняют вычисления, которые невозможно реализовать с помощью формул; – ускоряют процесс редактирования. Примеры.

1. Найти среднее значение 10-ти чисел находящихся в ячейках диапазона A1:A10. =(A1+A2+…+A10)/10 или =СРЗНАЧ(A1:A10). 2. Найти наибольшее (наименьшее) значение в ячейках диапазонаA1:D100: =МАКС(A1:D100) или МИН(A1:D100). 3. В списке состоящем из 300 фамилий, введенных в виде “ИВАНОВ И.И.” заменить на Иванов И.И.: =ПРОПНАЧ(A1). В состав Microsoft Excel 2000 входит более 300 (329) функций.

Если этого недостаточно можно пополнить список Пользовательскими функциями, созданными на языке VBA. Синтаксис функции. =имя(аргументы). Аргументы функции разделяются – ; (возможно — ,). Аргументом функции может быть

Источник: studfile.net

Списки в Python: методы и основные операции

Обложка: Списки в Python: методы и основные операции

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

В статье разберёмся с базовыми принципами списков в Питоне, а также рассмотрим методы работы с ними. Если вы изучаете Python с нуля, предлагаем также ознакомиться с дорожной картой для начинающих.

  1. Хранение в памяти
  2. Создание списка
  3. Срезы (slice)
  4. Простые операции
  5. Методы списков

Хранение в памяти

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

numbers = [1, 2] numbers[1] = 3 # обновлённый список: [1, 3]

До замены элемента последовательности print(numbers[1]) выведет 2, а после замены — 3.

Создание списка в Python

Это можно сделать несколькими способами, например перечислением элементов списка в квадратных скобках:

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]

При этом единица будет на позиции 0, то есть print(numbers[0]) выведет 1.

Также можно использовать обработку итерируемого объекта функцией list() . Пусть у нас будет некоторая строка, тогда:

list(‘tproger’) # [‘t’, ‘p’, ‘r’, ‘o’, ‘g’, ‘e’, ‘r’]

Также существуют генераторы списков, которые позволяют применить заданное выражение к каждому элементу последовательности. Допустим, необходимо создать list, состоящий из чисел от 1 до 5 включительно:

numbers = [i for i in range(1,6)] # [1, 2, 3, 4, 5]

Срезы (slice) списка

Срезы позволяют получить некое подмножество значений. Следующий код вернёт список с элементами, начиная индексом 0 и не включая при этом индекс 2 и выше:

numbers = [1, 5, 9, 6] print(numbers[0:2]) # вывод [1, 5]

Далее выведем всё, за исключением элемента на позиции 3:

print(numbers[:3]) # вывод [1, 5, 9]

А теперь начиная с индекса 1 и до конца:

print(numbers[1:]) # вывод [5, 9, 6]

Операции над списками Python

  • x in l — true , если элемент x есть в списке l ;
  • x not in l — true , если элемент x отсутствует в l ;
  • l1 + l2 — объединение двух списков;
  • l * n , n * l — копирует список n раз;
  • len(l) — количество элементов в l ;
  • min(l) — наименьший элемент;
  • max(l) — наибольший элемент;
  • sum(l) — сумма чисел списка;
  • for i in list() — перебирает элементы слева направо.

Методы списков Python

Index

Возвращает положение первого совпавшего элемента. Поиск совпадения происходит слева направо. Пример:

numbers = [1, 5, 9, 6, 1, 2, 1] print(numbers.index(1)) # вывод 0: первая найденная единица на позиции 0

Count

Python. Урок 7. Работа со списками (list)

Follow us on Google Plus Follow us on rss

Одна из ключевых особенностей Python, благодаря которой он является таким популярным – это простота. Особенно подкупает простота работы с различными структурами данных – списками, кортежами, словарями и множествами. Сегодня мы рассмотрим работу со списками.

Что такое список (list) в Python?

Список (list) – это структура данных для хранения объектов различных типов. Если вы использовали другие языки программирования, то вам должно быть знакомо понятие массива. Так вот, список очень похож на массив, только, как было уже сказано выше, в нем можно хранить объекты различных типов. Размер списка не статичен, его можно изменять.

Список по своей природе является изменяемым типом данных. Про типы данных можно подробно прочитать здесь . Переменная, определяемая как список, содержит ссылку на структуру в памяти, которая в свою очередь хранит ссылки на какие-либо другие объекты или структуры.

Как списки хранятся в памяти?

Как уже было сказано выше, список является изменяемым типом данных. При его создании в памяти резервируется область, которую можно условно назвать некоторым “контейнером”, в котором хранятся ссылки на другие элементы данных в памяти. В отличии от таких типов данных как число или строка, содержимое “контейнера” списка можно менять. Для того, чтобы лучше визуально представлять себе этот процесс взгляните на картинку ниже. Изначально был создан список содержащий ссылки на объекты 1 и 2, после операции a[1] = 3, вторая ссылка в списке стала указывать на объект 3.

Пример изменяемого объекта

Более подробно эти вопросы обсуждались в уроке 3 (Типы и модель данных).

Создание, изменение, удаление списков и работа с его элементами

Создать список можно одним из следующих способов.

>>> a = [] >>> type(a) >>> b = list() >>> type(b)

Также можно создать список с заранее заданным набором данных.

>>> a = [1, 2, 3] >>> type(a)

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

>>> a = [1, 3, 5, 7] >>> b = a[:] >>> print(a) [1, 3, 5, 7] >>> print(b) [1, 3, 5, 7]

или сделать это так:

>>> a = [1, 3, 5, 7] >>> b = list(a) >>> print(a) [1, 3, 5, 7] >>> print(b) [1, 3, 5, 7]

Читайте также:
Рейтинг программ для восстановления данных с флешки

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

>>> a = [1, 3, 5, 7] >>> b = a >>> print(a) [1, 3, 5, 7] >>> print(b) [1, 3, 5, 7] >>> a[1] = 10 >>> print(a) [1, 10, 5, 7] >>> print(b) [1, 10, 5, 7]

Добавление элемента в список осуществляется с помощью метода append().

>>> a = [] >>> a.append(3) >>> a.append(«hello») >>> print(a) [3, ‘hello’]

Для удаления элемента из списка, в случае, если вы знаете его значение, используйте метод remove(x), при этом будет удалена первая ссылка на данный элемент.

>>> b = [2, 3, 5] >>> print(b) [2, 3, 5] >>> b.remove(3) >>> print(b) [2, 5]

Если необходимо удалить элемент по его индексу, воспользуйтесь командой del имя_списка[индекс].

>>> c = [3, 5, 1, 9, 6] >>> print(c) [3, 5, 1, 9, 6] >>> del c[2] >>> print(c) [3, 5, 9, 6]

Изменить значение элемента списка, зная его индекс, можно напрямую к нему обратившись.

>>> d = [2, 4, 9] >>> print(d) [2, 4, 9] >>> d[1] = 17 >>> print(d) [2, 17, 9]

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

>>> a = [3, 5, 7, 10, 3, 2, 6, 0] >>> a[2] 7

Можно использовать отрицательные индексы, в таком случае счет будет идти с конца, например для доступа к последнему элементу списка можно использовать вот такую команду:

>>> a[-1] 0

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

>>> a[1:4] [5, 7, 10]

Методы списков

list.append(x)

Добавляет элемент в конец списка. Ту же операцию можно сделать так a[len(a):] = [x].

>>> a = [1, 2] >>> a.append(3) >>> print(a) [1, 2, 3]

list.extend(L)

Расширяет существующий список за счет добавления всех элементов из списка L. Эквивалентно команде a[len(a):] = L.

>>> a = [1, 2] >>> b = [3, 4] >>> a.extend(b) >>> print(a) [1, 2, 3, 4]

list.insert(i, x)

Вставить элемент x в позицию i. Первый аргумент – индекс элемента после которого будет вставлен элемент x.

>>> a = [1, 2] >>> a.insert(0, 5) >>> print(a) [5, 1, 2] >>> a.insert(len(a), 9) >>> print(a) [5, 1, 2, 9]

list.remove(x)

Удаляет первое вхождение элемента x из списка.

>>> a = [1, 2, 3] >>> a.remove(1) >>> print(a) [2, 3]

Удаляет элемент из позиции i и возвращает его. Если использовать метод без аргумента, то будет удален последний элемент из списка.

>>> a = [1, 2, 3, 4, 5] >>> print(a.pop(2)) 3 >>> print(a.pop()) 5 >>> print(a) [1, 2, 4]

list.clear()

Удаляет все элементы из списка. Эквивалентно del a[:].

>>> a = [1, 2, 3, 4, 5] >>> print(a) [1, 2, 3, 4, 5] >>> a.clear() >>> print(a) []

list.index(x[, start[, end]])

Возвращает индекс элемента.

>>> a = [1, 2, 3, 4, 5] >>> a.index(4) 3

list.count(x)

Возвращает количество вхождений элемента x в список.

>>> a=[1, 2, 2, 3, 3] >>> print(a.count(2)) 2

list.sort(key=None, reverse=False)

Сортирует элементы в списке по возрастанию. Для сортировки в обратном порядке используйте флаг reverse=True. Дополнительные возможности открывает параметр key, за более подробной информацией обратитесь к документации.

>>> a = [1, 4, 2, 8, 1] >>> a.sort() >>> print(a) [1, 1, 2, 4, 8]

list.reverse()

Изменяет порядок расположения элементов в списке на обратный.

>>> a = [1, 3, 5, 7] >>> a.reverse() >>> print(a) [7, 5, 3, 1]

list.copy()

Возвращает копию списка. Эквивалентно a[:].

>>> a = [1, 7, 9] >>> b = a.copy() >>> print(a) [1, 7, 9] >>> print(b) [1, 7, 9] >>> b[0] = 8 >>> print(a) [1, 7, 9] >>> print(b) [8, 7, 9]

List Comprehensions

List Comprehensions чаще всего на русский язык переводят как абстракция списков или списковое включение, является частью синтаксиса языка, которая предоставляет простой способ построения списков. Проще всего работу list comprehensions показать на примере. Допустим вам необходимо создать список целых чисел от 0 до n, где n предварительно задается. Классический способ решения данной задачи выглядел бы так:

>>> n = int(input()) 7 >>> a=[] >>> for i in range(n): a.append(i) >>> print(a) [0, 1, 2, 3, 4, 5, 6]

Использование list comprehensions позволяет сделать это значительно проще:

>>> n = int(input()) 7 >>> a = [i for i in range(n)] >>> print(a) [0, 1, 2, 3, 4, 5, 6]

или вообще вот так, в случае если вам не нужно больше использовать n:

>>> a = [i for i in range(int(input()))] 7 >>> print(a) [0, 1, 2, 3, 4, 5, 6]

List Comprehensions как обработчик списков

В языке Python есть две очень мощные функции для работы с коллекциями: map и filter . Они позволяют использовать функциональный стиль программирования, не прибегая к помощи циклов, для работы с такими типами как list , tuple , set , dict и т.п. Списковое включение позволяет обойтись без этих функций. Приведем несколько примеров для того, чтобы понять о чем идет речь.

Пример с заменой функции map .

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

>>> a = [1, 2, 3, 4, 5, 6, 7] >>> b = [] >>> for i in a: b.append(i**2) >>> print(‘a = <>nb = <>’.format(a, b)) a = [1, 2, 3, 4, 5, 6, 7] b = [1, 4, 9, 16, 25, 36, 49]

Та же задача, решенная с использованием map , будет выглядеть так:

Читайте также:
Как установить программу morphvox

>>> a = [1, 2, 3, 4, 5, 6, 7] >>> b = list(map(lambda x: x**2, a)) >>> print(‘a = <>nb = <>’.format(a, b)) a = [1, 2, 3, 4, 5, 6, 7] b = [1, 4, 9, 16, 25, 36, 49]

В данном случае применена lambda -функция, о том, что это такое и как ее использовать можете прочитать здесь.

Через списковое включение эта задача будет решена так:

>>> a = [1, 2, 3, 4, 5, 6, 7] >>> b = [i**2 for i in a] >>> print(‘a = <>nb = <>’.format(a, b)) a = [1, 2, 3, 4, 5, 6, 7] b = [1, 4, 9, 16, 25, 36, 49]

Пример с заменой функции filter .

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

>>> a = [1, 2, 3, 4, 5, 6, 7] >>> b = [] >>> for i in a: if i%2 == 0: b.append(i) >>> print(‘a = <>nb = <>’.format(a, b)) a = [1, 2, 3, 4, 5, 6, 7] b = [2, 4, 6]

Решим эту задачу с использованием filter :

>>> a = [1, 2, 3, 4, 5, 6, 7] >>> b = list(filter(lambda x: x % 2 == 0, a)) >>> print(‘a = <>nb = <>’.format(a, b)) a = [1, 2, 3, 4, 5, 6, 7] b = [2, 4, 6]

Решение через списковое включение:

>>> a = [1, 2, 3, 4, 5, 6, 7] >>> b = [i for i in a if i % 2 == 0] >>> print(‘a = <>nb = <>’.format(a, b)) a = [1, 2, 3, 4, 5, 6, 7] b = [2, 4, 6]

Слайсы / Срезы

Слайсы (срезы) являются очень мощной составляющей Python , которая позволяет быстро и лаконично решать задачи выборки элементов из списка. Выше уже был пример использования слайсов, здесь разберем более подробно работу с ними. Создадим список для экспериментов:

>>> a = [i for i in range(10)]

Слайс задается тройкой чисел, разделенных запятой: start:stop:step . Start – позиция с которой нужно начать выборку, stop – конечная позиция, step – шаг. При этом необходимо помнить, что выборка не включает элемент определяемый stop .

>>> # Получить копию списка >>> a[:] [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> # Получить первые пять элементов списка >>> a[0:5] [0, 1, 2, 3, 4] >>> # Получить элементы с 3-го по 7-ой >>> a[2:7] [2, 3, 4, 5, 6] >>> # Взять из списка элементы с шагом 2 >>> a[::2] [0, 2, 4, 6, 8] >>> # Взять из списка элементы со 2-го по 8-ой с шагом 2 >>> a[1:8:2] [1, 3, 5, 7]

Слайсы можно сконструировать заранее, а потом уже использовать по мере необходимости. Это возможно сделать, в виду того, что слайс – это объект класса slice . Ниже приведен пример, демонстрирующий эту функциональность:

>>> s = slice(0, 5, 1) >>> a[s] [0, 1, 2, 3, 4] >>> s = slice(1, 8, 2) >>> a[s] [1, 3, 5, 7]

Типо “List Comprehensions”… в генераторном режиме

Есть ещё одни способ создания списков, который похож на списковое включение, но результатом работы является не объект класса list , а генератор. Подробно про генераторы написано в “ Уроке 15. Итераторы и генераторы“.

Предварительно импортируем модуль sys , он нам понадобится:

>>> import sys

Создадим список, используя списковое включение :

>>> a = [i for i in range(10)]

проверим тип переменной a:

>>> type(a)

и посмотрим сколько она занимает памяти в байтах:

>>> sys.getsizeof(a) 192

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

>>> b = (i for i in range(10)) >>> type(b) >>> sys.getsizeof(b) 120

Обратите внимание, что тип этого объекта ‘generator’ , и в памяти он занимает места меньше, чем список, это объясняется тем, что в первом случае в памяти хранится весь набор чисел от 0 до 9, а во втором функция, которая будет нам генерировать числа от 0 до 9. Для наших примеров разница в размере не существенна, рассмотрим вариант с 10000 элементами:

>>> c = [i for i in range(10000)] >>> sys.getsizeof(c) 87624 >>> d = (i for i in range(10000)) >>> sys.getsizeof(d) 120

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

Если вы решаете задачу обхода списка, то принципиальной разницы между списком и генератором не будет:

>>> for val in a: print(val, end=’ ‘) 0 1 2 3 4 5 6 7 8 9 >>> for val in b: print(val, end=’ ‘) 0 1 2 3 4 5 6 7 8 9

Но с генератором нельзя работать также как и со списком: нельзя обратиться к элементу по индексу и т.п.

P.S.

Если вам интересна тема анализа данных, то мы рекомендуем ознакомиться с библиотекой Pandas. На нашем сайте вы можете найти вводные уроки по этой теме. Все уроки по библиотеке Pandas собраны в книге “Pandas. Работа с данными”.

Раздел: Python Уроки по Python Метки: Python, Уроки Python

Python. Урок 7. Работа со списками (list) : 52 комментария

  1. навруз 17.12.2017 там ошибка
    Изменить значение элемента списка, зная его индекс, можно напрямую к нему обратившись. >>> d = [2, 4, 9]
    >>> print(d)
    [2, 4, 9]
    >>> d[1] = 17 индекс указан первый, следовательно должен измениться первый элемент.
    >>> print(d)
    [2, 17, 9] а тут изменен второй элемент. Вывод должен выглядеть так [17, 4, 9] Если я не
    ошибаюсь)))
  1. writer 18.12.2017 В Python элементы списка нумеруются с нуля. Поэтому в списке [2, 4, 9], элемент с индексом 1 – это 4, и если мы сделаем присваивание d[1] = 17, то поменяем средний элемент в списке, так как это показано в примере!
    Удачи!
  1. навруз 20.12.2017 ой спасибо за обьяснение)) изивиняюсь за ложные обвинения и невнимательность)))
  1. writer 20.12.2017 Пожалуйста! Спасибо вам за интерес к блогу)))

Источник: devpractice.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru