что такое кортеж в питоне

Кортежи Python и основные операции

Кортеж (Tuple) в Python используется для хранения последовательности неизменяемых объектов Python. Кортежи Python похожи на списки, но значение элементов, хранящихся в списке, может быть изменено, тогда как кортеж является неизменным и значение элементов, хранящихся в кортеже, не может быть изменено. Читайте также чем отличается кортеж от списка в Python.

Создание кортежа в Python

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

Примечание. Кортеж, созданный без скобок, также известен как упаковка кортежа.

Пустой кортеж можно создать следующим образом.

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

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

Рассмотрим следующие примеры кортежа:

Индексирование и нарезка кортежей

Индексация и нарезка кортежа аналогичны спискам. Индексирование в кортеже начинается с 0 и продолжается до длины(tuple) – 1.

Доступ к элементам в кортеже можно получить с помощью оператора index []. Python также позволяет нам использовать оператор двоеточия для доступа к нескольким элементам в кортеже.

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

что такое кортеж в питоне. Смотреть фото что такое кортеж в питоне. Смотреть картинку что такое кортеж в питоне. Картинка про что такое кортеж в питоне. Фото что такое кортеж в питоне

Рассмотрим следующий пример:

В приведенном выше коде кортеж состоит из 7 элементов, которые обозначают от 0 до 6. Мы попытались получить доступ к элементу вне кортежа, который вызвал ошибку IndexError.

Отрицательное индексирование

Элементы слева направо перемещаются с использованием отрицательной индексации. Рассмотрим следующий пример:

Удаление кортежа

В отличие от списков, элементы кортежа нельзя удалить с помощью ключевого слова del, поскольку кортежи неизменяемы. Чтобы удалить весь кортеж, мы можем использовать ключевое слово del с именем кортежа.

Основные операции с кортежами

Такие операторы, как конкатенация(+), повторение(*), членство(in), работают так же, как они работают со списком. Для получения более подробной информации рассмотрите следующую таблицу.

Допустим, объявлены Tuple t =(1, 2, 3, 4, 5) и Tuple t1 =(6, 7, 8, 9).

ОператорОписаниеПример
RepetitionОператор повторения позволяет повторять элементы кортежа несколько раз.
ConcatenationОн объединяет кортеж, указанный по обе стороны от оператора.
MembershipОн возвращает истину, если в кортеже существует конкретный элемент, в противном случае – ложь.
IterationЦикл for используется для перебора элементов кортежа.
LengthОн используется для получения длины кортежа.

Встроенные функции

ФункцияОписание
1cmp(tuple1, tuple2)Сравнивает два кортежа и возвращает значение true, если кортеж 1 больше, чем кортеж 2, в противном случае значение false.
2len(tuple)Вычисляет длину кортежа.
3max(tuple)Возвращает максимальный элемент кортежа
4min(tuple)Возвращает минимальный элемент кортежа
5tuple(seq)Преобразует указанную последовательность в кортеж.

Где использовать кортеж?

Кортежи используются вместо списка в следующих сценариях.

1. Использование кортежа вместо списка дает нам четкое представление о том, что данные кортежа постоянны и не должны изменяться.

2. Кортеж может имитировать словарь без ключей. Рассмотрим следующую вложенную структуру, которую можно использовать как словарь.

Источник

Python. Урок 8. Кортежи (tuple)

Данный урок посвящен кортежам (tuple) в Python. Основное внимание уделено вопросу использования кортежей, почему иногда лучше применять их, а не списки, рассмотрены способы создания и основные приемы работы с кортежами. Также затронем тему преобразования кортежа в список и обратно.

Что такое кортеж (tuple) в Python?

Кортеж (tuple) – это неизменяемая структура данных, которая по своему подобию очень похожа на список. Как вы наверное знаете, а если нет, то, пожалуйста, ознакомьтесь с седьмым уроком, список – это изменяемый тип данных. Т.е. если у нас есть список a = [1, 2, 3] и мы хотим заменить второй элемент с 2 на 15, то мы может это сделать, напрямую обратившись к элементу списка.

С кортежем мы не можем производить такие операции, т.к. элементы его изменять нельзя.

Зачем нужны кортежи в Python?

Существует несколько причин, по которым стоит использовать кортежи вместо списков. Одна из них – это обезопасить данные от случайного изменения. Если мы получили откуда-то массив данных, и у нас есть желание поработать с ним, но при этом непосредственно менять данные мы не собираемся, тогда, это как раз тот случай, когда кортежи придутся как нельзя кстати. Используя их в данной задаче, мы дополнительно получаем сразу несколько бонусов – во-первых, это экономия места. Дело в том, что кортежи в памяти занимают меньший объем по сравнению со списками.

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

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

Создание кортежей

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

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

При желании можно воспользоваться функцией tuple().

Доступ к элементам кортежа

Доступ к элементам кортежа осуществляется также как к элементам списка – через указание индекса. Но, как уже было сказано – изменять элементы кортежа нельзя!

Удаление кортежей

Удалить отдельные элементы из кортежа невозможно.

Но можно удалить кортеж целиком.

Преобразование кортежа в список и обратно

На базе кортежа можно создать список, верно и обратное утверждение. Для превращения списка в кортеж достаточно передать его в качестве аргумента функции tuple().

Обратная операция также является корректной.

P.S.

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

Python. Урок 8. Кортежи (tuple) : 5 комментариев

Сорян за глупый вопрос, но я только начинаю изучать Python.
И так, есть два или более кортежей и нужно найти элементы, общие для этих кортежей, т е. взять пересечение множеств. Существует ли в питоне для этого оператор (функция, метод, …) или нужно самому “городить” такую функцию? Или может есть какая-нибудь подключаемая библиотека с такой функцией?

Добрый день!
Если вы хотите выполнять операции пересечения и т.п. лучше для этих целей использовать тип данных не кортеж (tuple), а множество (set)

Смотри, t1 = (1,2,3)
t2 = (2,3,4)
print (tuple(set(t1)|set(t2)) это объединение НО set удаляет повторящафся элементы & это перечение

Есть какая то возможность сформировать кортеж для последующего использования в качестве строки аргументов функции?

def f( f, a, b):
print(f, a, b)

opt = tuple( (some_a, 2, lst_arg) )
f(opt)

Пока нарываюсь на ошибку:
TypeError: f() missing 2 required positional arguments: ‘a’ and ‘b’
Буду очень признателен за ответ!

Источник

Кортежи

В этой статье вы узнаете всё о кортежах в Python. Что такое кортежи, как их создавать, когда их использовать и какие существуют методы кортежей.

Кортеж в Python похож на список. Только в отличие от списка кортеж — неизменяемый, то есть менять его элементы после создания нельзя.

Как создать кортеж

Кортеж может иметь любое количество элементов разных типов (целые числа, числа с плавающей точкой, списки, строки и т. д).

Вывод:

Кортеж можно создать и без использования скобок. Это называется упаковкой кортежа.

Вывод:

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

Вывод:

Как получить элемент кортежа

1. По индексу

Примечание. Обратите внимание, что индексирование кортежа начинается с 0. То есть первый элемент кортежа имеет индекс 0.

Кортеж из 9 элементов будет иметь индексы от 0 до 8. Попытка получить доступ к индексу за пределами диапазона индексов кортежа (в нашем случае 9, 10 и т. д.) приведет к ошибке IndexeError.

Индекс должен быть целым числом, поэтому мы не можем использовать float или другие типы в качестве индекса. Это приведет к ошибке TypeError.

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

Вывод:

2. По отрицательному индексу

Python допускает отрицательную индексацию коллекций (наборов значений). Она работает и с кортежами.

Вывод:

3. С помощью срезов

Использование срезов еще называют слайсингом, от английского slicing — «нарезка».

Вывод:

Как изменить кортеж

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

Переназначить кортеж тоже можно.

Вывод:

С помощью оператора * можно повторить элементы в кортеже заданное количество раз.

Оба оператора + и * приводят к созданию нового кортежа.

Вывод:

Как удалить кортеж

Изменять элементы кортежа нельзя. Это значит, что удалять их тоже нельзя.

Вывод:

Методы кортежа

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

Вывод:

Другие операции с кортежами

1. Проверка на вхождение в кортеж

Вывод:

2. Итерирование по кортежу

Вывод:

Преимущества кортежа над списком

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

Источник

Кортежи в Python (tuple)

Кортеж (tuple) — ещё один вид последовательностей в Python.

Как видно, в литеральной форме кортеж python 3 записывается в виде последовательности элементов в круглых скобках, в то время как для списков характерны квадратные.

👉 Некоторые особенности кортежей:

Примеры кортежей

Зачем использовать кортеж вместо списка?

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

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

def get_status(service_name): return None, f»service is OK!» print(type(get_status(‘nginx’))) > error, message = get_status(‘nginx’) print(error) print(message) > None > service nginx is OK!

Работа с кортежами

Создание

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

Способ №1 : Литеральное объявление:

literal_creation = (‘any’, ‘object’) print(literal_creation) > (‘any’, ‘object’) print(type(literal_creation)) >

Способ №2 : Через функцию tuple() :

tuple_creation = tuple(‘any iterable object’) print(tuple_creation) > (‘a’, ‘n’, ‘y’, ‘ ‘, ‘i’, ‘t’, ‘e’, ‘r’, ‘a’, ‘b’, ‘l’, ‘e’, ‘ ‘, ‘o’, ‘b’, ‘j’, ‘e’, ‘c’, ‘t’) print(type(tuple_creation)) >

💁‍♀️ Важно, чтобы аргумент, передаваемый в tuple() был итерируемым объектом:

incorrect_creation = tuple(777) > Traceback (most recent call last): incorrect_creation = tuple(777) TypeError: ‘int’ object is not iterable

Упаковка

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

Стоит обратить внимание 2 момента:

Распаковка

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

notes = (‘Do’, ‘Re’, ‘Mi’, ‘Fa’, ‘Sol’, ‘La’, ‘Si’) do, re, mi, fa, sol, la, si = notes print(mi) > Mi

Количество переменных должно совпадать с числом элементов tuple

Однако, если необходимо получить лишь какие-то отдельные значения, то в качестве «ненужных» переменных позволено использовать символ нижнего подчеркивания » _ «:

night_sky = ‘Moon’, ‘Stars’ moon, _ = night_sky print(moon) > Moon

Обращение к элементу и поиск в кортеже

Обратиться к элементу кортежа можно по номеру его позиции. Причём как с начала, так и с конца:

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

input_box = (‘firstbox’, (15, 150)) # помним про индексацию, ведущую своё начало с 0 print(input_box[1][1]) > 150

Узнать, присутствует ли объект среди элементов кортежа, можно с помощью оператора in:

song = (‘Roses’, ‘are’, ‘Red’) print(‘Red’ in song) print(‘Violet’ in song) > True > False

Сравнение

Перебор

Наиболее простым и очевидным способом перебрать элементы кортежа является обход его в цикле for :

my_tuple = (‘Wise’, ‘men’, ‘say’, ‘only’, ‘fools’, ‘rush’, ‘in’) # Вывести все элементы кортежа for word in my_tuple: print(word) > Wise men say only fools rush in

Сортировка

Нет ничего проще, чем отсортировать готовый кортеж. В этом наш друг и помощник — прекрасная функция sorted() :

not_sorted_tuple = (10**5, 10**2, 10**1, 10**4, 10**0, 10**3) print(not_sorted_tuple) > (100000, 100, 10, 10000, 1, 1000) sorted_tuple = tuple(sorted(not_sorted_tuple)) print(sorted_tuple) > (1, 10, 100, 1000, 10000, 100000)

Удаление

Добавить или удалить элемент содержащийся в tuple нельзя, по причине всё той же неизменяемости. Однако сам кортеж стереть с цифрового лица Земли возможно. Оператор del к нашим услугам:

some_useless_stuff = (‘sad’, ‘bad things’, ‘trans fats’) del some_useless_stuff print(some_useless_stuff) > Traceback (most recent call last): print(some_useless_stuff) NameError: name ‘some_useless_stuff’ is not defined

Методы и особые операции

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

Где start — начальный элемент среза (включительно), fin — конечный (не включительно) и step — «шаг» среза.

Длина кортежа

php = (‘p’, ‘h’, ‘p’) print(len(php)) > 3

Конкатенация

Для tuple определена операция конкатенации:

storm_1 = (‘Lightning’)Union = (‘ and ‘) storm_2 = (‘Thunder’) print(storm_1 + Union + storm_2) > Lightning and Thunder

Повторение

Как и в случае с конкатенацией, для кортежей, впрочем, как и для строк, определена операция повторения:

dog_do = (‘woof!’,) print(dog_do * 3) > (‘woof!’, ‘woof!’, ‘woof!’)

Индекс заданного элемента

Метод index() позволяет получить индекс элемента. Достаточно передать нужное значение элемента, как аргумент метода:

rom = (‘I’, ‘II’, ‘III’, ‘IV’, ‘V’, ‘VI’, ‘VII’, ‘VIII’, ‘IX’, ‘X’) print(rom.index(‘X’)) > 9

Число вхождений элемента

Метод count() ведёт подсчет числа вхождений элемента в кортеж.

AT = (‘Finn’, ‘Jake’, ‘BiMo’, ‘Marceline’, ‘Princess Bubblegum’, ‘BiMo’) print(AT.count(‘Finn’)) > 1 print(AT.count(‘BiMo’)) > 2

Преобразование

Tuple to Str

Представляем вашему вниманию лёгкий способ преобразовать кортеж в строку при помощи метода join() :

game_name = (‘Breath’, ‘ ‘, ‘of’, ‘ ‘, ‘the’, ‘ ‘, ‘Wild’) game_name = ».join(game_name) print(game_name) > Breath of the Wild

Tuple to List

Тут всё ещё проще. Для такой конвертации необходимо всего лишь передать кортеж, как аргумент функции list() :

dig_tuple = (1111, 2222, 3333) print(dig_tuple) > (1111, 2222, 3333) dig_list = list(dig_tuple) print(dig_list) > [1111, 2222, 3333]

Tuple to Dict

А вот для преобразования кортежа в словарь придётся применить небольшую хитрость, а именно — генератор словарей:

score = ((‘Eric’, 65000), (‘Stephany’, 87000)) score_dict = dict((x, y) for x, y in score) print(score_dict) >

Именованные кортежи

Мощная особенность и настоящая гордость языка.

Именованный кортеж (или named tuple) позволяет программисту обращаться к элементу кортежа не по индексу, а через удобочитаемый заранее заданный идентификатор.

Покажем на примере:

# для начала импортируем сам модуль from collections import namedtuple citizen = namedtuple(«Citizen», «name age status») Alex = citizen(name=’Alex Mercer’, age=27, status=’show businessman’) print(Alex.name) > Alex Mercer print(Alex.status) > show businessman

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

Tuple index out of range

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

i_initiate_error = (‘west’, ‘north’, ‘east’, ‘south’) print(i_initiate_error[4])

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

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

Источник

Python кортеж

Чтобы усовершенствовать программный код, добавить в него новые важные функции используются разнообразные методы. К ним относится: создание списков, кортежей или словарей. В данной статье рассмотрим, когда используются, чем они отличаются, как создать и как работать с кортежами в Python 3.

Что такое кортеж

Кортеж – это неизменная структура заданных заранее значений. Он очень похож на список, но последний подвержен изменениям. Так, если нужно исправить какой-то элемент списка, можно сделать это, напрямую указав:

Если же записать подобный код, но попытаться применить его к кортежу, ничего не выйдет, а на экране появится надпись об ошибке. Считается, что это важно, поскольку таким образом данные невозможно будет изменить как случайно, так и намеренно. Также в python добавление элемента в кортеж невозможно. Правда можно привести его в список, добавить элемент. После этого полученный список преобразовать обратно.

Выгодное преимущество кортежа состоит также в том, что он имеет меньший размер, что проверяется применением команды sizeof. Она показывает, сколько занимает объект в байтах:

Из этого кода видно, что кортеж (в круглых скобках) занимает 36 байтов, а список (в квадратных скобках) – 44 байта.

Создание

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

Приведем пример создания в Python обычного кортежа:

Можно преобразовать список в кортеж следующим образом:

Рассмотрим кортеж с отрицательным индексом:

То есть на экране отобразился первый не с начала, а с конца элемент.

Чтобы создать кортеж с одним элементом, нужно сделать такую запись:

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

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

Выше представлен генератор кортежа. То есть мы создали генератор. После этого преобразовали его к кортежу с помощью ключевого слова tuple.

Подробнее о срезах описано ниже в пункте «Обращение к элементу».

Использование генераторов кортежей аналогично генераторам списка.

Обращение к элементу

У каждого элемента есть свой индекс. То есть, в Python для обращения к элементу кортежа, нужно просто указать его индекс. Напомним, что счет начинается с нуля. Посмотрим на код:

Из кортежа можно извлечь как элемент, так и срез. В этом случае мы получим кортеж, состоящий из элементов, расположенных в промежутке среза. Следует уточнить, что при указании среза используются не номера элементов, а номера промежутков между ними. Перед первым элементом находится промежуток с индексом 0. Рассмотрим пример:

Методы

Кортежи в python имеют только два метода: index() и count(). Первый применяется, чтобы узнать, какой индекс у определенного элемента. Например:

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

Метод count используется, если нужно узнать, сколько определенных элементов имеется в кортеже.

На экране перед пользователем появится именно число 3, потому что в кортеже искомое число 33 повторяется 3 раза.

Помните, что в кортежах нет методов добавления и удаления элементов.

Именованные кортежи

Данный класс не получил широкого применения среди программистов, хотя он и является достаточно важным и полезным. Именованные кортежи в python (или namedtuple) в каком-то смысле являются расширениями для обычных. Так, огромной проблемой считается то, что получать данные из кортежа можно только при помощи числовых индексов. А что делать, если хочется для наглядности кода обращаться к элементам, используя строковое наименование. Такое обращение значительно улучшит читаемость кода. Для этого на помощь приходит namedtuple.

Каждый элемент, сохраненный в именованном кортеже, доступен через определенный идентификатор. Посмотрим на примере кода:

Таким образом, именованный кортеж делает вид программного кода более читаемым. Так, в вышеуказанном коде можно увидеть наименования color, cost и comment. И при всем при этом, сохраняется возможность обращения к элементам по индексу, например дописав к предыдущему коду:

Список кортежей

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

Из этой ситуации есть выход — создание в Python списка кортежей. Вариант объявления такого списка представлен ниже:

Cортировка

Иногда нужно отсортировать имеющиеся элементы списка. Благодаря встроенной функции sorted, все это делается достаточно легко:

Видно, что произошла сортировка кортежа Python по алфавиту. Стандартную сортировку можно провести и по числовым элементом. Посмотрим на пример:

Заметим, что произошла сортировка по возрастанию.

В список

Кортеж можно переделать в список:

Таким образом, кортеж был преобразован в список Python, который можно изменить. Теперь рассмотрим обратное действие — преобразование списка в кортеж:

В словарь

Словарь – это еще одна структура используемая в Python. Он, как и список, является изменяемым, но при этом неупорядоченным. Это значит, что обратиться к определенному элементу посредством указания индекса – не получится. Чтобы лучше понять, можно провести аналогию с обычным англо-русским словарем. В нем для каждого слова есть перевод: house –дом, flat – квартира, window – окно. Если перенести такую структуру в программный код, то получится такая запись, оформляемая фигурными скобками:

Последовательность пар при выводе на экран не определяется никаким правилом, отображаются они в произвольном порядке.

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

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

В строку

Чтобы вывести в python кортеж в одну строку, используется функция join. Посмотрим на примере:

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

Чем же кортежи удобнее? Работа с ними проходит быстрее, чем, например, со списками. Если программисту нужно определить постоянный набор значений, чтобы затем их перебирать, то лучше будет сделать это с его помощью. Плюс – это экономия оперативной памяти, так как они занимают меньше места, чем списки.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *