Начинаем программировать на python

Содержание:

Введение в написание программ

Последнее обновление: 23.04.2017

Программа на языке Python состоит из набора инструкций. Каждая инструкция помещается на новую строку. Например:

print(2 + 3) 
print("Hello")

Большую роль в Python играют отступы. Неправильно поставленный отступ фактически является ошибкой. Например, в следующем случае мы получим ошибку, хотя код будет практически аналогичен приведенному выше:

print(2 + 3) 
	print("Hello")

Поэтому стоит помещать новые инструкции сначала строки. В этом одно из важных отличий пайтона от других языков программирования, как C# или Java.

Однако стоит учитывать, что некоторые конструкции языка могут состоять из нескольких строк. Например, условная конструкция if:

if 1 < 2:
    print("Hello")

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

Регистрозависимость

Python — регистрозависимый язык, поэтому выражения и или представляют разные выражения.
И если вместо метода print для вывода на консоль мы попробуем использовать метод Print:

Print("Hello World")

то у нас ничего не получится.

Комментарии

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

Комментарии в Python бывают блочные и строчные. Все они предваряются знаком решетки (#).

Блочные комментарии ставятся в начале строки:

# Вывод сообщения на консоль
print("Hello World")

Строчные комментарии располагаются на той же строке, что и инструкции языка:

print("Hello World")  # Вывод сообщения на консоль

Основные функции

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

Основной функцией для вывода информации на консоль является функция print(). В качестве аргумента в эту функцию передается строка, которую мы хотим вывести:

print("Hello Python")

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

print("Full name:", "Tom", "Smith")

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

Full name: Tom Smith

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

name = input("Введите имя: ")
print("Привет", name)

Консольный вывод:

Введите имя: Евгений
Привет Евгений

НазадВперед

Инструкции в Python

Что такое инструкция?

Инструкция в Python — это логическая инструкция, которую интерпретатор Python может прочесть и выполнить. Она может являться выражением или оператором присваивания в Python.

Присваивание — фундаментальный элемент этого языка. Он определяет способ создания и сохранения объектов с помощью выражений.

Что такое выражение?

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

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

Копировать

Простая операция присваивания

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

Копировать

Рассмотрим типы выражений присваивания в Python и посмотрим, как они работают внутри.

Пример 1. С правой стороны — выражение со значением

Это базовая форма присваивания в Python.

Копировать

Python создаст в памяти строку и присвоит ей имя . Узнать адрес в памяти можно с помощью встроенной функции .

Копировать

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

  1. Если создать другую строку с тем же значением, Python создаст новый объект и присвоит его другому местоположению в памяти. Это работает в большинстве случаев.
  2. Однако в двух следующих случаях он использует то же место в памяти:
    • Строки без пробелов с менее чем 20 символами;
    • Целые числа от -5 до 255.

Это называется интернированием и делается для сохранения памяти.

Пример 2. С правой стороны — существующая переменная Python

Теперь другой пример инструкции присваивания. С правой стороны находится ранее объявленная переменная python.

Копировать

Инструкция выше не приведет к выделению нового места в памяти. Обе переменных будут ссылаться на один и тот же объект в памяти. Это как создание псевдонима для существующего объекта. Убедиться в этом можно с помощью все той же функции .

Копировать

Пример 3. С правой стороны — операция

В случае такой инструкции результат зависит от исхода операции. Возьмем такой пример.

Копировать

В примере выше присваивание приведет к созданию переменной типа . А в этом — к появлению переменной типа .

Копировать

Дополненная инструкция присваивания

Арифметические операторы можно объединять для формирования инструкций дополненного присваивания.

Рассмотрим такой пример: . Он является аналогичным этой инструкции — .

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

Копировать

Следующий пример — список гласных. В нем в список добавляются недостающие значения.

Копировать

Major new features of the 3.9 series, compared to 3.8

Some of the new major new features and changes in Python 3.9 are:

  • PEP 573, Module State Access from C Extension Methods
  • PEP 584, Union Operators in
  • PEP 585, Type Hinting Generics In Standard Collections
  • PEP 593, Flexible function and variable annotations
  • PEP 602, Python adopts a stable annual release cadence
  • PEP 614, Relaxing Grammar Restrictions On Decorators
  • PEP 615, Support for the IANA Time Zone Database in the Standard Library
  • PEP 616, String methods to remove prefixes and suffixes
  • PEP 617, New PEG parser for CPython
  • BPO 38379, garbage collection does not block on resurrected objects;
  • BPO 38692, os.pidfd_open added that allows process management without races and signals;
  • BPO 39926, Unicode support updated to version 13.0.0;
  • BPO 1635741, when Python is initialized multiple times in the same process, it does not leak memory anymore;
  • A number of Python builtins (range, tuple, set, frozenset, list, dict) are now sped up using PEP 590 vectorcall;
  • A number of Python modules (_abc, audioop, _bz2, _codecs, _contextvars, _crypt, _functools, _json, _locale, operator, resource, time, _weakref) now use multiphase initialization as defined by PEP 489;
  • A number of standard library modules (audioop, ast, grp, _hashlib, pwd, _posixsubprocess, random, select, struct, termios, zlib) are now using the stable ABI defined by PEP 384.

You can find a more comprehensive list in this release’s «What’s New» document.

OpenPGP Public Keys

Source and binary executables are signed by the release manager or binary builder using their
OpenPGP key. Release files for currently supported releases are signed by the following:

  • Pablo Galindo Salgado (3.10.x and 3.11.x source files and tags) (key id: 64E628F8D684696D)
  • Steve Dower (Windows binaries) (key id: FC62 4643 4870 34E5)
  • Łukasz Langa (3.8.x and 3.9.x source files and tags) (key id: B269 95E3 1025 0568)
  • Ned Deily (macOS binaries, 3.7.x / 3.6.x source files and tags) (key ids: 2D34 7EA6 AA65 421D, FB99 2128 6F5E 1540, and Apple Developer ID DJ3H93M7VJ)
  • Larry Hastings (3.5.x source files and tags) (key id: 3A5C A953 F73C 700D)
  • Benjamin Peterson (2.7.z source files and tags) (key id: 04C3 67C2 18AD D4FF and A4135B38)

Release files for older releases which have now reached end-of-life may have been signed by one of the following:

  • Anthony Baxter (key id: 0EDD C5F2 6A45 C816)
  • Georg Brandl (key id: 0A5B 1018 3658 0288)
  • Martin v. Löwis (key id: 6AF0 53F0 7D9D C8D2)
  • Ronald Oussoren (key id: C9BE 28DE E6DF 025C)
  • Barry Warsaw (key ids: 126E B563 A74B 06BF, D986 6941 EA5B BD71, and ED9D77D5)

You can import a person’s public keys from a public keyserver network server
you trust by running a command like:

or, in many cases, public keys can also be found
at keybase.io.
On the version-specific download pages, you should see a link to both the
downloadable file and a detached signature file. To verify the authenticity
of the download, grab both files and then run this command:

Note that you must use the name of the signature file, and you should use the
one that’s appropriate to the download you’re verifying.

(These instructions are geared to
GnuPG and Unix command-line users.)

Обработка естественного языка с помощью Python: анализ текста с использованием инструментария естественного языка

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

Пособие станет полезным для улучшения практических навыков обработки естественного языка с использованием языка программирования Python и Инструментария Естественного Языка (Natural Language Toolkit), который является библиотекой с открытым исходным кодом.

Animated Weather Pro

Я перепробовал много программ для показа погоды на Android, но был приятно удивлен этой разработкой. Такого красивого отображения в других программах на данной платформе я не встречал и считал что такие есть только на iOS и в HTC Sense. Как оказалось, я ошибался: реалистичные эффекты, стильная графика и удобное управление — все в одной программе. «В комплетке» есть маленький аккуратный виджет на рабочий стол. Особо расписывать не буду — картинки и видео скажут за меня сами.
В общем, стоит один раз скачать эту программу чтоб просто посмотреть ее.

Сайт разработчиков: www.animated-weather.com/android
В бесплатной версии показывается реклама и прогноз ограничивается 3 днями. В полной версии это ограничение снято. Купить полную версию можно и с сайта разработчика.
Под катом еще несколько картинок и видео.

Передача прав владельца сообщества ВКонтакте при продаже

По правилам ВК, вы можете передавать права владения другим пользователям. Передача прав длится 2 недели. По истечению этого периода продавцу ничего не грозит.

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

Главная проблема передачи прав — это 14-дневная задержка, во время которой продавец может отменить сделку, нажав на кнопку “Вернуть сообщество” у себя в профиле.

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

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

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

Шаблоны регулярных выражений

За исключением символов (+?. * ^ $ () [] {} | ), все остальные соответствуют самим себе. Вы можете избежать экранировать специальный символ с помощью бэкслеша ().

В таблицах ниже описаны все символы и комбинации символов для регулярных выражений, которые доступны в Python:

Шаблон & Описание
1 ^ — соответствует началу строки.
2 $— соответствует концу строки.
3 . — соответствует любому символу, кроме новой строки. Использование флага re.M позволяет также соответствовать новой строке.
4 — соответствует любому из символов в скобках.
5 — соответствует любому символу, кроме тех, что в квадратных скобках.
6 foo* — соответствует 0 или более вхождений “foo”.
7 bar+ —- соответствует 1 или более вхождениям “bar”.
8 foo? —- соответствует 0 или 1 вхождению “foo”.
9 bar{3} —- соответствует трем подряд вхождениям “bar”.
10 foo{3,} — соответствует 3 или более вхождениям “foo”.
11 bar{2,5} —- соответствует от 2 до 5 вхождениям “bar”.
12 a|b — соответствует либо a, либо b.
13 (foo) — группирует регулярные выражения.
14 (?imx) — временно включает параметры i, m или x в регулярное выражение. Если используются круглые скобки — затрагивается только эта область.
15 (?-imx) — временно отключает опции i, m или x в регулярном выражении. Если используются круглые скобки — затрагивается только эта область.
16 (?: foo) — Группирует регулярные выражения без сохранения совпадающего текста.
17 (?imx: re) — Временно включает параметры i, m или x в круглых скобках.
18 (?-imx: re) — временно отключает опции i, m или x в круглых скобках.
19 (?#…) — комментарий.
20 (?= foo) — совпадает со всеми словами после которых » foo».
21 (?! foo) — совпадает со всеми словами после которых нет » foo».
22 (?> foo) — совпадает со всеми словами перед которыми » foo».
23 \w — совпадает с буквенным символом.
24 \W — совпадает с не буквенным символом.
25 \s — совпадает с пробельными символами (\t, \n, \r, \f и пробелом).
26 \S — все кроме пробельных символов.
27 \d — соответствует цифрам (0-9).
28 \D — все кроме цифры.
29 \A — соответствует началу строки.
30 \Z – соответствует концу строки. Включая перевод на новую строку, если такая есть.
31 \z — соответствует концу строки.
32 \G — соответствует месту, где закончилось последнее соответствие.
33 \b — соответствует границам слов, когда поставлены внешние скобки.
34 \B — все кроме границы слова.
35 **\n,\t,\r,\f ** — соответствует новым строкам, подстрокам.
36 \1…\9 — соответствует подгруппе n-й группы.
37 \10 — соответсвуйет номеру группы. В противном случае относится к восьмеричному представлению символьного кода.

Арифметические операторы

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

  • +: оператор сложения;
  • -: оператор вычитания;
  • *: оператор умножения;
  • /: оператор деления;
  • **: экспоненциальный оператор;
  • //: оператор деления этажей.

Давайте посмотрим на пример арифметических операторов в Python.

x = 15
y = 7

sum = x + y
print("addition =", sum)

subtraction = x - y
print("subtraction =", subtraction)

multiplication = x * y
print("multiplication =", multiplication)

division = x / y
print("division =", division)

modulus = x % y
print("modulus =", modulus)

exponent = x ** 2
print("exponent =", exponent)

floor_division = x // y
print("division =", floor_division)  # 2

Вывод:

Python поддерживает операторы сложения и умножения для строк.

print("addition of strings =", ("Python" + " " + "Operators"))
print("multiplication of strings =", ("Python" * 2))

Вывод:

addition of strings = Python Operators
multiplication of strings = PythonPython

Функция match

Эта функция ищет в и поддерживает настройки с помощью дополнительного .
Ниже можно увидеть синтаксис данной функции:

Описание параметров:

Параметр & Описание
1 pattern — строка регулярного выражения ()
2 string — строка, в которой мы будем искать соответствие с шаблоном в начале строки ()
3 flags — модификаторы, перечисленными в таблице ниже. Вы можете указать разные флаги с помощью побитового OR

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

Метод совпадения объектов и описание
1 group(num=0) — этот метод возвращает полное совпадение (или совпадение конкретной подгруппы)
2 groups() — этот метод возвращает все найденные подгруппы в tuple

Valentina Studio — бесплатная программа для работы с СУБД

Очень многие разработчики считают что лучший интерфейс для работы с базами данных — текстовый интерфейс консольного. Я лично еще не достиг подобного просветления, поэтому больше доверяю GUI-инструментам. Хорошо, если у СУБД как у Postgres есть своя, утилита для работы с БД, а что делать если нет? Или если надо работать с различными базами данных одновременно? Под Windows альтернативных клиентов к различным СУБД — море разливанное. С другими ОС (я в данный момент работаю в OS X) все не так радужно, хотя есть программы разной степени пригодности и удобства. Раньше я использовал Navicat, но недавно нашел еще одно интересное решение, о котором и хочу рассказать: Valentina Studio.
Сразу скажу — я общался с разработчиками, и мне очень импонирует их концепция, то что они делают и как, поэтому я решил просто написать обзор о хорошем инструменте, о котором мало кто знает, поскольку публичный релиз программы состоялся очень недавно. До этого она долгое время разрабатывалась для Valentina DB и только в феврале вышла версия с поддержкой известных популярных баз данных. При этом разработчики приняли достаточно разумное решение — базовая версия совершенно бесплатна, а деньги берут только за несколько мощных «особо профессиональных» функций без которых чаще всего можно обойтись.

Как начать работу с Python

Начать писать программы на Python очень просто, для этого нужно:

  1. Установить дистрибутив последней версии www.python.org/downloads/.
  2. Установить подходящий текстовый редактор www.sublimetext.com/3.

После установки дистрибутива запускаем консоль Python через появившийся ярлык в меню «Пуск» и тестируем работоспособность: например, вводим выражение «2 + 2». Если видим результат 4, значит, все работает.

Работать в консоли не очень удобно, поэтому закроем ее, перейдем в текстовый редактор Sublime Text3 и настроим его для работы.

Для начала в главном меню редактора во вкладке Tools → Build System → Python укажем, что собираемся использовать синтаксис Python. Далее пропишем простую команду print(‘Hello world’), сохраним файл с расширением .py и запустим на выполнение комбинацией клавиш Ctrl + B. Если в консоли редактора вы увидите надпись «Hello world», значит, все настроено правильно и можно приступать к работе.

Установка Python

Для создания программ на Python нам потребуется интерпретатор. Для его установки перейдем на сайт https://www.python.org/ и на главной станице в секции Downloads найдем ссылку на загрузку последней версии языка (на данный момент это 3.7.2):

Соответственно для MacOS можно выбрать пункт macOS 64-bit installer.

На ОС Windows при запуске инсталлятора запускает окно мастера установки:

Здесь мы можем задать путь, по которому будет устанавливаться интерпретатор. Оставим его по умолчанию, то есть C:UsersAppDataLocalProgramsPythonPython36.

Кроме того, в самом низу отметим флажок «Add Python 3.6 to PATH», чтобы добавить путь к интерпретатору в переменные среды.

После установки в меню Пуск на ОС Windows мы сможем найти иконки для доступа к разным утилитам питона:

Здесь утилита Python 3.7 (64-bit) представляет интерпретатор, в котором мы можем запустить скрипт. В файловой системе сам файл интерпретатора можно найти по пути, по которому производилась установка. На Windows по умолчанию это путь C:UsersAppDataLocalProgramsPythonPython37, а сам интерпретатор представляет файл python.exe. На ОС Linux установка производится по пути /usr/local/bin/python3.7.

Читайте также

Станьте Junior Python разработчиком

В начале пути программирование кажется сложным предметом, но Python проще, чем вы думаете. Развивайте привычку учиться и не бойтесь ошибок. Используйте pythonru.com, ютуб и онлайн курсы — вы научитесь программировать, не выходя из дома!

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

Учитесь вместе с отраслевыми экспертами и приобретайте навыки, необходимые работодателям. SkillBox предлагает оплату в рассрочку и гарантирует трудоустройство по окончанию обучения.

Python теперь доступен каждому желающему

В феврале 1991 Ван Россум публикует Python в alt.source на всеобщее обозрение . В языке поддерживаются основные типы данные list, dict, str и т.д., исключения, классы с поддержкой наследования. Была заимствована из языков Modula-2 и Modula-3 идея модульной системы . Эти концепты до сих пор присутствуют.

В 1994 году выходит версия 1.0. Были добавлены особенности функционального программирования: lambda, filter, map, reduce – функции, навеянные языком Lisp .

В сентябре 2000 года выходит версия 1.6 – последняя из серии 1.x. В следующем месяце этого года появится новый релиз Python – 2.0.

Python для чайников

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

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

Автор книги — опытный технический
писатель и редактор, выпустивший более
100 книг. Не удивительно, что его произведение
так легко читается. Джон Пол Мюллер
объясняет сложные концепции на самых
простых примерах, а для еще лучшего
понимания в книге имеются иллюстрации.

Модификаторы регулярных выражений: flags

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

Модификатор & Описание
1 re.I — делает поиск нечувствительным к регистру
2 re.L — ищет слова в соответствии с текущим языком. Эта интерпретация затрагивает алфавитную группу (\w и \W), а также поведение границы слова (\b и \B).
3 re.M — символ $ выполняет поиск в конце любой строки текста (не только конце текста) и символ ^ выполняет поиск в начале любой строки текста (не только в начале текста).
4 re.S — изменяет значение точки (.) на совпадение с любым символом, включая новую строку
5 re.U— интерпретирует буквы в соответствии с набором символов Unicode. Этот флаг влияет на поведение \w, \W, \b, \B. В python 3+ этот флаг установлен по умолчанию.
6 re.X— позволяет многострочный синтаксис регулярного выражения. Он игнорирует пробелы внутри паттерна (за исключением пробелов внутри набора [] или при экранировании обратным слешем) и обрабатывает не экранированный “#” как комментарий.

Язык программирования Python

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

Впервые язык Python был анонсирован в 1991 году голландским разработчиком Гвидо Ван Россумом. С тех пор данный язык проделал большой путь развития. В 2000 году была издана версия 2.0, а в 2008 году — версия 3.0. Несмотря на вроде такие большие промежутки между версиями постоянно выходят подверсии. Так, текущей актуальной версией на момент написания данного материала является 3.7. Более подробную информацию о всех релизах, версиях и изменения языка, а также собственно интерпретаторы и необходимые утилиты для работы и прочую полезную информацию можно найти на официальном сайте https://www.python.org/.

Основные особенности языка программирования Python:

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

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

  • Портативность и платформонезависимость. Не имеет значения, какая у нас операционная система — Windows, Mac OS, Linux, нам достаточно написать скрипт, который будет запускаться на всех этих ОС при наличии интерпретатора
  • Автоматическое управление памяти
  • Динамическая типизация

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

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

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

В чём особенности языка программирования Python

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

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

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

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

Adblock
detector