Эксперимент: редактор burning hut учит python и анализ данных с нуля

Как изучать Python?

Синтаксис

Начните с изучения синтаксиса (правил, по которым пишутся команды) — в первую очередь прочтите официальную документацию. В сети есть много хороших самоучителей для новичков.

Один из самых популярных — Computer Programming for Beginners: Fundamentals of Programming Terms and Concepts Натана Кларка

Книга написана простым языком — она поможет разобраться в терминологии, понять, что такое состояния, операторы и функции, чем объектно-ориентированное программирование отличается от функционального.
На русском языке можно обратить внимание на книгу преподавателя и разработчика Майкла Доусона «Программируем на Python» — книга хороша тем, что в ней не только теория, но и реальные кейсы, показывающие, как применять полученные знания на практике. После каждой главы Доусон поясняет тему на примере простой игры и предлагает задачи для закрепления материала.
Подробнее о функциях (часть приложения, выполняющая определенную задачу) можно узнать из книги Марка Луца «Изучаем Python».
Для тех, кто уже усвоил основы языка, но еще не умеет использовать все его возможности, будет полезной книга Лучано Рамальо «Python: к вершинам мастерства»

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

Подборка полезных видеоуроков на YouTube:

  • Python для начинающих — короткие видеоуроки, посвященные основам языка;
  • Видеоуроки Python — среди прочего тут есть, например, ролики, как редактировать видео на Python или работать с Википедией с помощью этого языка;
  • Clever Programmer — видеоуроки по программированию, советы и рекомендации, как прокачать свои навыки;
  • Telusko — более 100 роликов, посвященных Python: от начального до продвинутого уровня.

Python имеет несколько направлений, поэтому стеки и технологии, которые нужно знать новичку, зависят от специализации. Например, для начинающего веб-разработчика необходимо прежде всего знание фреймворков Django и Flask. Для дата-аналитики или дата-сайенс нужно уметь работать с библиотеками, предназначенными для обработки и анализа данных: NumPy, Pandas , Sklearn, TensorFlow

Для разработки десктоп-приложений в первую очередь важно знать библиотеку Tkinter и фреймворк PyQt5, для мобильной разработки — уметь работать в среде, для разработки игр — знать набор библиотек Pygame

Курс

Python для веб-разработки

Пройдите 9-месячный курс и научитесь  самостоятельно создавать и поддерживать сайты. Дополнительная скидка 5% по промокоду BLOG.

Узнать больше

Настройка среды разработки

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

Самый базовый редактор — IDLE. Гвидо ван Россум назвал его в честь одного из актеров «Монти Пайтона» — Эрика Айдла. C помощью этой среды разработки можно просматривать, редактировать, запускать и отлаживать программы на Python. IDLE поставляется вместе с дистрибутивом. Скачайте и запустите редактор и в открывшемся окне можете начинать писать код.

Практика: сервисы и сайты

Решайте задачи. Их можно взять, например, на проекте Эйлера — это некоммерческий онлайн-проект, названный в честь знаменитого швейцарского математика Леонарда Эйлера. Проект (есть на русском и английском языке) объединяет сотни тысяч любителей математики и программирования — участники могут выбрать одну из задач и решить ее с помощью любого известного им языка программирования, в том числе с помощью Python. После того как участник получил правильный ответ, он может обсудить и сравнить с другими пользователями найденные им алгоритмы и способы решения.

Участвуйте в играх и квестах: например, chekio — это игра с заданиями разных уровней сложности и встроенной средой программирования или квест python challenge, в котором надо составить алгоритм, чтобы перейти к следующему шагу. Поискать задачки и упражнения также можно в соответствующем хабе на Хабре.

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

Получаем текущую дату и время

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

  1. datetime.date: день, месяц и год;
  2. datetime.time: время в часах, минутах, секундах, а также микросекундах. Тут дата значения не имеет;
  3. datetime.datetime: здесь хранятся атрибуты date и time.

Для примера можно вывести в терминал текущую (current) дату и время. Можно воспользоваться объектом datetime.datetime — из него довольно просто извлекаются объекты date и time. Сначала следует импортировать требуемый модуль:

Да, это выглядит странновато, т. к. речь идет о получении класса datetime из модуля datetime, однако это 2 разные вещи. Далее следует воспользоваться функцией — она позволит получить объект с текущим временем и датой.

Набрав код выше, вы увидите на экране следующее (в вашем случае вывод изменится, ведь минуты не стоят на месте):

Что произошло? Функция  отобразила объект, причем с датой и временем создания этого самого объекта. В результате была выведена соответствующая строка. Однако никто не мешает получить временные атрибуты отдельно:  

Таким образом, метод вполне годится для получения текущей даты и времени. Но что делать, если надо получить лишь дату?

С чего начать

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

На первом этапе требуется настроить среду разработки, ведь созданный код надо куда-то записать. Это можно сделать в специальных программах — в IDE (Integrated Development Environment). Эти программы умеют сами искать ошибки и дают начинающим программистам подсказки.

Умение писать скрипты и навыки прототипирования позволят школьникам создавать уже свои компьютерные решения. Вначале это будут простые программы, затем более сложные проекты. После изучения азов дети выберут уже те направления, в которых они хотели бы развиваться: веб-разработка или искусственный интеллект, Data science.

Clock ID Constants¶

These constants are used as parameters for and
.

Identical to , except it also includes any time that
the system is suspended.

This allows applications to get a suspend-aware monotonic clock without
having to deal with the complications of , which may
have discontinuities if the time is changed using or
similar.

: Linux 2.6.39 or later.

New in version 3.7.

The Solaris OS has a timer that attempts to use an optimal
hardware source, and may give close to nanosecond resolution.
is the nonadjustable, high-resolution clock.

: Solaris.

New in version 3.3.

Clock that cannot be set and represents monotonic time since some unspecified
starting point.

: Unix.

New in version 3.3.

Similar to , but provides access to a raw
hardware-based time that is not subject to NTP adjustments.

: Linux 2.6.28 and newer, macOS 10.12 and newer.

New in version 3.3.

High-resolution per-process timer from the CPU.

: Unix.

New in version 3.3.

High-resolution per-process timer from the CPU.

: FreeBSD, NetBSD 7 or later, OpenBSD.

New in version 3.7.

The system must have a current leap second table in order for this to give
the correct answer. PTP or NTP software can maintain a leap second table.

: Linux.

New in version 3.9.

Thread-specific CPU-time clock.

: Unix.

New in version 3.3.

Time whose absolute value is the time the system has been running and not
suspended, providing accurate uptime measurement, both absolute and
interval.

: FreeBSD, OpenBSD 5.5 or later.

New in version 3.7.

Clock that increments monotonically, tracking the time since an arbitrary
point, unaffected by frequency or time adjustments and not incremented while
the system is asleep.

: macOS 10.12 and newer.

New in version 3.8.

The following constant is the only parameter that can be sent to
.

Неделя 2. Задушевные беседы с кодом и объяснения на шоколадках

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

Не знаю, кто придумал, что отдых — это смена деятельности. Находить силы на учёбу после работы оказалось тяжеловато. В понедельник дело шло ещё бодро, но вот в среду вечером уже было трудно думать, от мелких строчек кода болели глаза, я часто пользовалась подсказками, плохо соображала и, кажется, не очень хорошо всё запомнила. Утешает, что к урокам можно вернуться — думаю, мне это понадобится.

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

Эта строчка на человеческом языке звучит примерно так: «дружок, возьми список data, примени к нему метод sort, и я сейчас дам тебе ключ: для сортировки возьми третий элемент каждой строчки и расставь их по убыванию, и да, я действительно этого хочу» 

Я думала, что мои мозги просто сломаются, когда прочитала, что если попросить программу напечатать диапазон ячеек 4–7, она напечатает четвёртую, пятую и шестую (а седьмую нет). Но тут меня спасло сравнение с шоколадкой: 

Тема урока была не менее жизненной, чем пример с шоколадкой: нужно было выяснить, какие эмодзи в интернете используют чаще всего и зависит ли это от конкретной соцсети. Спойлер: чаще всего люди шлют «слёзы радости» и сердечки. Ну не милота ли!

А вот ещё пример задачки. Особенно мило, что ребята действительно объясняют ВСЁ. Ну да, ты учишься программировать и считаешь уравнения с помощью функций и методов, но мы на всякий случай объясним тебе, что такое убывание 

Чему я научилась за вторую неделю

  • Применять методы — это такие функции, которые работают с определённым типом переменных. Например, метод sort сортирует данные по выбранному параметру и работает со списками.
  • Сортировать данные в таблицах: добавлять новые столбцы и выбирать интересные строки.
  • Нормировать результаты в таблице — для случаев, когда сравниваешь тёплое с красным и нужен какой-то единый критерий. 

Python DateTime string to Unix timestamp

Now, we can see DateTime string to Unix timestamp in python.

  • In this example, I have imported a module called datetime and declared a variable as date_string.
  • Here, I have assigned date_string = “2/11/2021, 04:5:8” here the date and time are given in string format.
  • Here 2 is the month, 11 is the day, 2021 is the year, 04 is the hour, 5 is the minute, and 8 is the second.
  • The strptime() is the function of datetime module it is used to parse the string to datetime and time objects. The timestamp() method returns the local time.

Example:

The below screenshot shows the datetime string form is converted into Unix timestamp as the output.


Python DateTime string to Unix timestamp

Что дальше

После вводного курса по анализу данных можно идти на полный курс по одному из двух направлений: собственно аналитике данных или Data Sci­ence — это специальность, связанная с машинным обучением.

Там всё по-взрослому: у вас будет наставник и одногруппники, а работы будет проверять человек, а не робот. Если учиться по 10 часов в неделю, то через полгода вы уже сможете искать работу младшим аналитиком и показывать небольшое портфолио — этот же самый наставник поможет грамотно его оформить и включить в резюме.

А ещё, пока я проходила этот курс, у Яндекс.Практикума появились новые — например, теперь там можно учиться на интернет-марктетолога и дизайнера интерфейсов. Открывая курсы, специалисты сервиса ориентируются на востребованность. Поэтому, выбирая из них, вы можете немножко меньше думать о перспективности профессии и немножко больше о том, что вам нравится делать. Везде есть бесплатные вводные уроки с приличным объёмом теории и практики. Так что, если вы думаете о новой профессии, — можно безболезненно пробовать, пока что-нибудь не понравится 

Почему я потерпел неудачу

При ретроспективе не слишком сложно выяснить, почему я потерпел неудачу. Впервые мои большие ошибки были:

  1. Не имея четкую цель Отказ Почему я изучал Питона? Я не знал. Это делает очень легко уйти, когда происходит жестко – который он всегда будет, рано или поздно.
  2. Слишком много вызова перед спереди Отказ Рано или поздно мне придется выяснить, как получить Python на мою систему, но установить это с Ноль Соответствующий опыт, прежде чем я написал столько, сколько был рецептом расстройства и неудачи.

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

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

Второй раз я избегал этих ошибок, но вместо этого я сделал несколько новых:

  1. Я не учился, делая. Смотреть видео и проезжающие викторины делали меня чувствовать Как я мог бы код, но я на самом деле не кодировал. Когда я сделал Попробуйте (и потерпеть неудачу), чтобы написать код, это было еще более разочаровано, потому что я думал, что я уже понял это. И потому что мне пришлось сделать кучу нажатия в каждом видео, чтобы пересмотреть разные разделы и религирующие вещи.
  2. У меня была четкая цель, но не явный путь к нему. Я знал, что хочу сделать данные журналистики и веб-соскабливания, но я принимал общий начальный курс Python. Это означало, что я изучал уроки, которые могли быть критическими для разработки программного обеспечения, но не были такими необходимыми для журналистики данных. Мне часто было трудно подключить основы, которые я учился в классе с тем, что я действительно хотел делать с кодом.

На протяжении всего этого я также сделал еще одну большую психическую ошибку. Я думал о изучении питона в очень черно-белых терминах. Либо у меня был “научился Питон” – все питон – или у меня не было.

Это сделало перспективу изучения действительно пугающими. Всякий раз, когда я ударил проблему, это было ухудшено тем, что я думал о некотором мифическом питоне «финишную черту», которая все еще была очень, Очень далеко.

Это ошибочно, конечно. Как устной язык, Python (и другие языки программирования) не то, что вы когда-либо действительно Готово обучение. И как устной язык, вам на самом деле не нужно свободно говорить в Python, чтобы сделать вещи.

Поскольку любой ученик обмена первого курса скажет вам, просто в состоянии спросить: «Сколько это?» и “Где ванная комната?” На местном языке может Действительно повлиять на ваше качество жизни.

То же самое верно для Python. Вам не нужно знать все – Или даже все это много, обязательно – сделать реальную разницу в вашей собственной жизни.

Но это урок, который я учился только случайно.

Спарсить произвольный timestamp в ISO 8601 с минимумом подключаемых библиотек

У Python ограниченная поддержка анализа временных меток ISO 8601. Для того, чтобы использовать — вам нужно точно знать его формат. Сложность в том, что в с временной меткой ISO 8601 есть 6-разрядная дробь:

Если дробная часть равна 0, то она не выводится:

Но для этих двух вариантов используется другой формат для . Кроме того, не поддерживает ни минуты, ни обозначения часовых поясов с минутами. Например, 2016-07-22 09: 25: 59 + 0300 проанализируется, а стандартный формат вида нет.

Существует библиотека из одного файла — , которая правильно анализирует только временные метки ISO 8601.

Он поддерживает дроби, часовые пояса и T разделитель внутри единственной функции:

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

Format Unix timestamp python

Here, we can see the Format Unix timestamp in python.

The format of unix timestamp is 10 digits.

  • In this example, I have imported a module called datetime and time and declared a variable as datetime and assigned datetime = datetime.date(2020, 2, 15).
  • Here 2020 is the year, 2 is the month, 15 is the day
  • We can see the format of Unix timestamp by using print(“Unix_Time_stamp: “,(time.mktime(datetime.timetuple()))).

Example:

We can see the format of unix timestamp as the output. The below screenshot shows the output


Format Unix timestamp python

You may like the following Python tutorials:

  • Python catch multiple exceptions
  • Python Exceptions Handling
  • Python Tkinter Map() Function
  • Python save an image to file
  • How to Create Date Time Picker using Python Tkinter
  • How to read a text file using Python Tkinter
  • How to go to next page in Python Tkinter Program

In this tutorial, we have learned about Python DateTime to UNIX timestamp, and also we have covered these topics:

  • What is the Unix timestamp?
  • Convert DateTime to Unix timestamp python
  • Python DateTime to Unix timestamp milliseconds
  • Python DateTime to Unix timestamp 13 digits
  • Python DateTime to Unix timestamp UTC
  • Python DateTime string to Unix timestamp
  • Python datetime.now to Unix timestamp
  • Python datetime.date to Unix timestamp
  • Python DateTime to Unix timestamp seconds
  • Python Datetime to Unix timestamp timezone
  • Python Unix timestamp to datetime
  • Format Unix timestamp python

Формат datetime

Представление даты и времени может отличатся в разных странах, организациях и т. д. В США, например, чаще всего используется формат «мм/дд/гггг», тогда как в Великобритании более распространен формат «дд/мм/гггг».

В Python для работы с форматами есть методы и .

Python strftime() — преобразование объекта datetime в строку

Метод определен в классах , и . Он создает форматированную строку из заданного объекта , или .

Пример 16: форматирование даты с использованием метода strftime().

from datetime import datetime

now = datetime.now()

t = now.strftime("%H:%M:%S")
print("time:", t)

s1 = now.strftime("%m/%d/%Y, %H:%M:%S")
# mm/dd/YY H:M:S format
print("s1:", s1)

s2 = now.strftime("%d/%m/%Y, %H:%M:%S")
# dd/mm/YY H:M:S format
print("s2:", s2)

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

Здесь , , , и т. д. — коды для определения формата. Метод принимает один или несколько кодов и возвращает отформатированную строку на его основе.

В приведенной выше программе переменные , и являются строками.

Основные коды для определения формата:

  • — год
  • — месяц
  • — день
  • — час
  • — минута
  • — секунда

Python strptime()- преобразование строки в  объект datetime

Метод создает объект datetime из заданной строки (представляющей дату и время).

Пример 17: метод strptime().

from datetime import datetime

date_string = "21 June, 2018"
print("date_string =", date_string)

date_object = datetime.strptime(date_string, "%d %B, %Y")
print("date_object =", date_object)

Когда вы запустите программу, вывод будет следующим:

Метод принимает два аргумента:

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

Кстати, коды , и используются для обозначения дня, месяца (название месяца в полном виде) и года соответственно.

Чему сможет научиться ребенок на занятиях по Python?

Во время обучения дети пишут на python3 в стандартной IDLE до темы while включительно, потом устанавливают редактор кода. Чтобы перейти к созданию сложных и реальных проектов, ученики должны основательно пройти базу. На каждую тему выполнить большое количество практических заданий разной сложности:

  1. Ввод и вывод данных: понятие переменной, типы данных, функции print(sep, end) и input, форматирование строк
  2. Математика: арифметические операции, целочисленное деление, остаток от деления, округление
  3. Условия: if-elif-else, тип данных bool, операторы сравнения, логические операторы
  4. Цикл while: while, break, continue, else, бесконечный цикл
  5. Строки: срезы, методы find, rfind, replace, lower, upper, isdigit, isalpha ect.
  6. Регулярные выражения
  7. Цикл for: for i in range, for i in list, else
  8. Списки: генераторы списков, методы split и join, sort, max, min с использованием key
  9. Функции: параметры, возвращаемый результат, рекурсия, область видимости переменных, lambda
  10. Обработка исключений: try, except, finally, else
  11. Словари и кортежи: создание словаря, перебор элементов словаря
  12. Множества: создание множеств, операции со множествами
  13. Двумерные массивы: создание вложенных массивов, генератор двумерных массивов, поиск диагоналей, разворот массива
  14. Модули: импортирование модулей, модули random, datetime, time, math
  15. Tkinter: создание окна, настройка и упаковка виджетов, функции в tkinter, messagebox, filedialog
  16. Tkinter: рисование с помощью Canvas, метод bind
  17. Работа с файлами: запись и чтение файлов, сериализация и десериализация с помощью библиотеки pickle
  18. ООП: классы и объекты, конструктор, наследование, полиморфизм, инкапсуляция

Также дети знакомятся с графической библиотекой Pygame. Детям нравится делать игры, так что это отличный вариант для них. Используя pygame, можно создавать красочные и сложные проекты. Дети одновременно будут учиться и наслаждаться своими проектами. При обучении преподаватели используют не только теоретические материалы, но и практические аспекты: проекты из разных книг, авторские задания, разные игры для начинающих питон-программистов. Наша программа сочетает очень много разных источников, чтобы сделать обучение максимально эффективным и интересным для каждого.

Почему за Python — будущее

В течение нескольких последних лет Python подтверждает статус одного из самых популярных языков программирования. Последние годы в различных рейтингах Python входит в топ 5 языков для разработчиков, а на ноябрь 2021 года и вовсе является лидером одного из самых популярных международных рейтингов TIOBE. Кроме того, Python набирает популярность как язык, который должен стать первым языком, с которым вы познакомитесь на пути к успешной карьере в IT. 

Это объясняется простотой и широтой использования Python’а: Data Science, веб-разработка, создание игр, научные исследования и многое другое расширяет Python-разработчику выбор направления, которое будет для него интересным и доходным. 

К слову о доходах Python-разработчиков. Средняя зарплата middle-разработчика в Москве составляет 150 тыс. рублей, а зарплата junior-разработчика начинается от 70 тыс. рублей. При этом на уровень middle можно перейти, имея 1–3 года опыта. И зарплата продолжает увеличиваться с каждым годом. 

Хотите такую же зарплату? Чтобы получать хорошие деньги, работая в IT, нужно 2 вещи: любить свое дело и отлично в нем разбираться. Но как узнать, подходит ли программирование именно для вас?Легко и просто! Нужно попробовать себя в IT: написать программу на питоне, разработать собственный сайт или даже компьютерную игру. Записывайтесь на курсы в нашу школу программирования, и вы сможете почувствовать себя настоящим программистом. Мы изучим основные языки программирования, включая питон, и подготовим настоящие проекты, которые вы сможете использовать в своем портфолио.

Достоинства и недостатки языка

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

  1. Синтаксис языка очень прост, поэтому многие начинают изучать программирование с него.
  2. Python стал лидером в аналитике и визуализации данных. 
  3. Огромная база пользователей = множество созданных библиотек и расширений, ответы на любые возникающие вопросы зачастую сразу можно найти в интернете. 
  4. Высокие зарплаты даже на самом старте пути в IT.

Но, как бы мы не хвалили Python, недостатки тоже имеются: 

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

Форматированный вывод

Принцип работы метода ctime() заключается в представлении секундного вещественного значения в более удобном виде, благодаря автоматическому форматированию. Некоторым пользователям предложенный подобным образом вывод данных может показаться чересчур сложным для восприятия либо же недостаточно информативным. Именно поэтому методы модуля time позволяют создавать свои уникальные типы форматирования для дат. В данном случае речь пойдет о функции strftime, принимающей в качестве параметров текущее время и шаблон, который будет использоваться для форматирования полученного объекта.

В следующем примере демонстрируется вывод значения, переданного функцией localtime() в strftime. То есть, мы в Python получим текущее время и выведем его в отформатированном виде. Первым аргументом метода strftime является строка с некоторым набором правил для форматирования, каждое из которых указано при помощи символа %. В результате, на экране выводится информация, включающая название месяца, число и год.

import time
print(time.strftime("Today is %B %d, %Y.", time.localtime()))

Today is October 23, 2018.

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

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

Их можно передавать методу strftime в любом порядке, помещая в строковый литерал, который служит параметром.

Формат Свойство
%a короткое название дня недели
%A полное название дня недели
%b короткое название месяца
%B полное название месяца
%c дата и время
%d день месяца
%H количество часов в 24-часовом формате
%I количество часов в 12-часовом 1формате
%j день года
%m номер месяца
%M количество минут
%p до или после полудня для 12-часового формата
%S количество секунд
%U номер недели в году, начиная с воскресенья
%w номер дня недели
%W номер недели в году, начиная с понедельника
%x дата
%X время
%y год без указания века
%Y полное представление года
%Z название часового пояса
%% символ процента
Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Мой редактор ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: