14 Мая 2019

Изучаем Python

<h2>Язык программирования Python.</h2>
<hr>
<h3>Что такое Python?</h3>
<b>Python</b>— высокоуровневый язык программирования общего назначения, ориентированный на повышение производительности разработчика и читаемости кода. Синтаксис ядра Python минималистичен. В то же время стандартная библиотека включает большой объём полезных функций. На Python можно разрабатывать что угодно - сайты, программы, мобильные приложения, скрипты, плагины и т.д.<br>
<blockquote>
<b>Низкоуровневый язык программирования</b> — язык программирования, близкий к программированию непосредственно в машинных кодах используемого реального или виртуального (например, байт-код, Microsoft .NET) процессора. Для обозначения машинных команд обычно применяется мнемоническое обозначение. Это позволяет запоминать команды не в виде последовательности двоичных нулей и единиц, а в виде осмысленных сокращений слов человеческого языка (обычно английских).<br>
<br>
<b>Высокоуровневый язык программирования</b> — язык программирования, разработанный для быстроты и удобства использования программистом. Основная черта высокоуровневых языков — это абстракция, то есть введение смысловых конструкций, кратко описывающих такие структуры данных и операции над ними, описания которых на машинном коде (или другом низкоуровневом языке программирования) очень длинны и сложны для понимания.
</blockquote>
<br>
<hr>
<h3>Скачиваем и устанавливаем дистрибутив.<br>
</h3>
Заходим на сайт - <a href="https://www.python.org/" target="_blank">https://www.python.org/</a>. Заходим в раздел Downloads и скачиваем нужный дистрибутив в зависимости от ОС.<br>
<br>
<h3>IDLE.</h3>
IDLE - интегрированная в Phyton среда разработки. Среда разработки - совокупность инструментов, которые упрощают создание программ.<br>
<h3>Комментирование кода.</h3>
Закомментировать строку кода достаточно просто - поставьте знак <b># </b>в начале строки и Python не будет обрабатывать данную строку.<br>
Если строк для комментирования много поставьте в начале и в конце блока три двойные кавычки (<b>''' '''</b>). Строка в тройных кавычках может занимать в коде несколько строк и выводиться на экране точно в таком же виде, как и вводится.<br>
<br>
<b>Типы данных:</b><br>
<ul>
    <li><b>Str (string)</b> - строчные. Строки в python заключаются в кавычки - "Строчное значение".</li>
    <li> <b>Int (integer)</b> - целое число (целочисленное).</li>
    <li> <b>Float</b> - дробное число (вещественное).</li>
    <li> <b>Bool</b> - булевое значение. (True/False)</li>
</ul>
<h3>Функции</h3>
<i><u>Функция </u>- </i>это миниатюрная программа, которая выполняет определенную задачу, предписанную ей.<i> </i>Что-бы запустить, или вызвать функцию, надо написать ее имя и вслед за ним пару скобок - <u><i>функция()</i></u><i><u>.</u></i> Некоторым функция можно передавать значения, которые те будут обрабатывать. Такие значения называются <i><u>аргументами</u></i> и заключаются в скобки - <i><u>функция(аргумент).</u></i><i><br>
</i>Любая программа состоит из выражений. <u><i>Выражение </i></u>- законченная инструкция, которая велит системе что-либо сделать.<br>
<b><br>
</b><b>Функция  - Print.<br>
</b>
<blockquote>
<b>Print()</b> - функция вывода а в скобках аргумент функции.<br>
<b>Print(variable)</b> - выводит содержимое переменной.<br>
<b>Print("Как прекрасен мир")</b> - чтобы написать аргумент текст, содержимое нужно поместить в кавычки.<br>
<b>Print("Программа 'Game over' 2.0")</b> - для создания строки используйте или апострофами (' '), или кавычками (" "). <br>
<b>Print("То же", "самое", "сообщение")</b> -<b> </b>здесь функции передаются три аргумента списком, разделенные запятыми.
</blockquote>
<br>
<i> Escape-последовательность</i> (экранирование) - образуют два символа: обратный слеш (\) и еще какой-либо символ. Обратный слеш \" меняет конструкцию кода и python не воспринимает как управляющую конструкцию и выводит кавычки в строке.<br>
<table border="1" cellpadding="1" cellspacing="1" align="center" style="width: 70%;">
<tbody>
<tr>
    <th>
          Последовательность
    </th>
    <th>
         Описание 
    </th>
</tr>
<tr>
    <td>
            \\
    </td>
    <td>
           Обратный слеш. Выводит: \
    </td>
</tr>
<tr>
    <td>
            \'
    </td>
    <td>
           Апостраф или одинарная кавычка. Выводит: '
    </td>
</tr>
<tr>
    <td>
            \"
    </td>
    <td>
           Кавычка. Выводит: "
    </td>
</tr>
<tr>
    <td>
            \a
    </td>
    <td>
           Заставляет звучать динамик ПК
    </td>
</tr>
<tr>
    <td>
            \n
    </td>
    <td>
           Переносить на новую строку
    </td>
</tr>
<tr>
    <td>
            \t   
    </td>
    <td>
           Табуляция
    </td>
</tr>
</tbody>
</table>
<br>
<blockquote>
<b>Print</b><b>( "Он \"плохой\" человек")</b> -  Он "плохой" человек<br>
<b>Print("Привет\n </b><b>мир!!") </b>- делает разрыв строки с переносом на новую строку <br>
<b>Print("\tБлагодарности") </b>- делает отступ перед строкой.<br>
<b>Print("\\") </b>- для отображения обратного слеша, достаточно поставить два обратных слеша.<br>
<b>Print("\a")</b> - заставляет свучать системный динамик компьютера.
</blockquote>
<b><br>
</b><i>Конкатенация (concatenation)</i> - процесс слияния (сцепления) нескольких функций. <br>
<blockquote>
<b>Print("Привет, меня зовут" + name)</b> - в данном примере мы к строчному значению присоединили переменную name. <br>
<br>
     name="Алексей"<br>
     print("Привет, меня зовут" + name + "!")
</blockquote>
Запрещается конкатенировать <u>разные типы данных</u>. Если типы данных разные, необходимое конвертировать (тайп-кастинг) данные в один тип:<br>
<blockquote>
<code>age = 25<br>
</code><code>
    print("мне" + str(age) + "года!")</code>
</blockquote>
<i>Символ продолжения строки</i> - выражение можно растянуть на несколько строк кода. Для этого достаточно воспользоваться символом продолжения строки \ (обратный слеш). <br>
<blockquote>
<b>print </b>("Это очень длинная стока" \<br>
              +" но выводиться она будет единой строкой")
</blockquote>
<i>Повторение строк</i> <br>
<blockquote>
<b>print</b>(" \n Купи слона" * 10)
</blockquote>
<b><br>
</b><b>Математические функции</b><br>
<br>
<table border="1" cellpadding="1" cellspacing="1" style="width: 90%;" align="center">
<tbody>
<tr>
    <th>
          Оператор
    </th>
    <th>
         Описание 
    </th>
    <th>
         Пример 
    </th>
    <th>
         Результат
    </th>
</tr>
<tr>
    <td>
            +
    </td>
    <td>
          Сложение
    </td>
    <td>
          7+8
    </td>
    <td>
          15
    </td>
</tr>
<tr>
    <td>
            -
    </td>
    <td>
          Вычитание
    </td>
    <td>
          10-5
    </td>
    <td>
          5
    </td>
</tr>
<tr>
    <td>
            *
    </td>
    <td>
          Умножение
    </td>
    <td>
          10*10
    </td>
    <td>
          100
    </td>
</tr>
<tr>
    <td>
            /
    </td>
    <td>
          Деление (обычное)
    </td>
    <td>
          110/5
    </td>
    <td>
          22
    </td>
</tr>
<tr>
    <td>
            //
    </td>
    <td>
          Деление (с остатком)
    </td>
    <td>
          7//3
    </td>
    <td>
          2
    </td>
</tr>
<tr>
    <td>
            %
    </td>
    <td>
          Остаток от деления
    </td>
    <td>
          7%31
    </td>
    <td>
          7
    </td>
</tr>
</tbody>
</table>
<br>
<br>
  Сложение и вычитание<br>
<blockquote>
<code>a = 5<br>
     b = 10<br>
     c = a + b<br>
     d = b - a<br>
     print ( c )<br>
     print ( d )<br>
</code>
</blockquote>
Умножение и деление<br>
<blockquote>
<code>a = 5<br>
     b = 10<br>
     c = a * a<br>
     d = b / a<br>
     print ( c )<br>
     print ( d )<br>
</code>
</blockquote>
Возведение в степень<br>
<blockquote>
<code>a = 5<br>
     c = a ** 2<br>
     print ( c )<br>
</code>
</blockquote>
Деление по модулю<br>
Это когда возвращается остаток - 5%2=1( Число 5 делится на 2 (2 раза) а остаток от деления (1)
<blockquote>
<code>a = 10<br>
     c = a % 3<br>
     print ( c )<br>
</code>
</blockquote>
Унарный минус<br>
меняет знака числа
<blockquote>
<code>a = 5<br>
     a = -a<br>
     print ( a )<br>
</code>
</blockquote>
Округление<br>
<blockquote>
<code>a = 5.65<br>
     print ( round(a) )<br>
</code>
</blockquote>
Для округления в большую или меньшую сторону требуется импортировать модуль math<br>
<blockquote>
<code>import math<br>
     a = 5.65<br>
     print ( math.floor(a) ) #принудительное округление в меньшую сторону.<br>
     print ( math.ceil(a) ) #принудительное округление в большую сторону.<br>
</code>
</blockquote>
<br>
Число ПИ<br>
<blockquote>
<code>import math<br>
     print ( math.pi)<br>
</code>
</blockquote>
 <br>
<b>Функция - Input</b><br>
<blockquote>
    <blockquote>
         name = input ("Введите свое имя - ")
    </blockquote>
    <blockquote>
         age = input ("Укажите свой возраст - ")
    </blockquote>
    <blockquote>
         print("Вас зовут " + name + " и вам " + age + " лет")
    </blockquote>
</blockquote>
 
<h3>Переменные.</h3>
<b>Переменные (variable</b><b>) </b>это  - ячейка памяти компьютера, в которая имеет имя и хранит некоторое значение. <br>
<br>
Операция присвоения - создание переменной и присвоение ей значения.   <br>
<blockquote>
     name="Alex"
</blockquote>
<h3>Применение строковых методов</h3>
<table border="1" cellpadding="1" cellspacing="1" style="width: 90%;">
<tbody>
<tr>
    <th>
          Метод
    </th>
    <th>
          описание
    </th>
</tr>
<tr>
    <td>
          upper()
    </td>
    <td>
          Возвращает строку, символы которой переведены к верхнему регистру
    </td>
</tr>
<tr>
    <td>
          lower()
    </td>
    <td>
          Возвращает строку, символы которой переведены к нижнему регистру<br>
    </td>
</tr>
<tr>
    <td>
          swapcase()
    </td>
    <td>
          Возвращает новую строку, в которой регистр всех символов обращен - верхний становится нижним и наоборот
    </td>
</tr>
<tr>
    <td>
          capitalize()
    </td>
    <td>
          Возвращает новую строку, в которой первая буква прописная, а остальный строчные
    </td>
</tr>
<tr>
    <td>
          title()
    </td>
    <td>
          Возвращает новую строку, в которой первая буква каждого слова прописная, а остальные строчные
    </td>
</tr>
<tr>
    <td>
          strip()
    </td>
    <td>
          Возвращает новую строку, из которой убраны все интервалы (табуляция, пробелы, символы пустых строк) в начале и в конце.
    </td>
</tr>
<tr>
    <td>
          replace(old, new [,max])
    </td>
    <td>
          Возвращает строку, в которой вхождение строки old заменяются строкой new. Необязательный параметр max устанавливает наибольшее возможное количество замен
    </td>
</tr>
</tbody>
</table>
<br>
<h3></h3>
<blockquote>
    <div>
         quote = "Думаю, на мировом рынке можно будет продать штук пять компьютеров."
    </div>
    <div>
         print("Исходная цитата:\n")
    </div>
    <div>
         print(quote)
    </div>
    <div>
         print("Она же в верхнем регистре:")
    </div>
    <div>
         print(quote.upper())
    </div>
    <div>
         print("\nВ нижнем регистре:")
    </div>
    <div>
         print(quote.lower())
    </div>
    <div>
         print("\nКак заголок:")
    </div>
    <div>
         print(quote.title())
    </div>
    <div>
         print("\nС ма-а-аленькой заменой:")
    </div>
    <div>
         print(quote.replace("штук пять","несколько миллионов"))
    </div>
    <div>
         input("Нажмите Enter для продолжения")
    </div>
</blockquote>
<h3>Конвертация значений</h3>
<ul>
    <li>Преобразование строк в целые числа</li>
</ul>
<blockquote>
     car=input("Стоимость автомобиля - ") <br>
     car=int(car) <br>
     или <br>
     car=int(input("Стоимость автомобиля"))
</blockquote>
<table border="1" cellpadding="1" cellspacing="1">
<tbody>
<tr>
    <td>
          Функция 
    </td>
    <td>
          Описание
    </td>
    <td>
          Пример 
    </td>
    <td>
          Результат
    </td>
</tr>
<tr>
    <td>
          float(x)
    </td>
    <td>
          Преобразует значение Х в десятичную дробь
    </td>
    <td>
          float("10.0")
    </td>
    <td>
              10.0
    </td>
</tr>
<tr>
    <td>
          int(x)
    </td>
    <td>
          Преобразует значение Х в целое число
    </td>
    <td>
              int("10")
    </td>
    <td>
              10
    </td>
</tr>
<tr>
    <td>
          str(x)
    </td>
    <td>
          Преобразует значение Х в строку
    </td>
    <td>
              str(10)
    </td>
    <td>
              "10"
    </td>
</tr>
</tbody>
</table>
<br>
<h3>Составные операторы присвоения</h3>
<table border="1" cellpadding="1" cellspacing="1">
<tbody>
<tr>
    <td>
          Оператор
    </td>
    <td>
          Образец
    </td>
    <td>
          Равносильная запись
    </td>
</tr>
<tr>
    <td>
          *=
    </td>
    <td>
          x*=5
    </td>
    <td>
          x=x*5
    </td>
</tr>
<tr>
    <td>
          /=
    </td>
    <td>
          x/=5
    </td>
    <td>
          x=x/5
    </td>
</tr>
<tr>
    <td>
          %=
    </td>
    <td>
          x%=5
    </td>
    <td>
          x=x%5
    </td>
</tr>
<tr>
    <td>
          +=
    </td>
    <td>
          x+=5
    </td>
    <td>
          x=x+5
    </td>
</tr>
<tr>
    <td>
          -=
    </td>
    <td>
          x-=5
    </td>
    <td>
          x=x-5
    </td>
</tr>
</tbody>
</table>
<h3>Генерирование случайных чисел</h3>
<blockquote>
     # Кости<br>
     # Демонстрирует генерацию случайных чисел<br>
     import random<br>
     # Создаем случайные числа из диапазона 1-6<br>
     die1=random.randint(1, 6)<br>
     die2=random.randrange(6)+1<br>
     total=die1+die2<br>
     print("Выпало", die1, "и", die2, " очков в сумме", total )<br>
     input("Нажмите Enter для продолжения")
</blockquote>
<b>Импорт модуля random <br>
</b><b> Import</b> - служебное выражение позволяющее импортировать модули, в примере это модуль random.<br>
<br>
<i>Модули</i> - это файлы, содержащие код, пригодный для использования в других программах.<br>
<br>
<i>Точечная нотация</i> - это способ доступа к функциям модуля - название_модуля.имя_функции.<br>
<br>
<b>Примененние функции</b><b> randint()<br>
</b>В модуле random есть функция randint(), которая принимает два целочисленных аргумента и возвращает случайное целое число, лежащее в диапазоне между ними.<br>
<br>
<b>Примененние функции randrange()</b><br>
В модуле random есть также функция randrange(), которая возвращает случайное целое число. Есть несколько способов вызова randrange(), из которых самый простой состоит в передаче функций одного аргумента - положительного целого числа. При таком вызове функция возвратит случайное число из промежутка от 0 (включая) до введенного значения (не включая).<br>
<h3>Условные конструкции с if</h3>
Условные конструкции (ветвление) проще всего понимать как выбор одного из доступных путей. Конструкция if позволяет программе выбрать, исполнять определенный фрагмент кода или просто пропустить его, в зависимости от того, как указал программист.<br>
Условная конструкция - это служебное слово if, затем условие, двоеточие и блок из одного или нескольких выражений. Если условие истинно, то содержащийся в блоке код будет исполнен. Если же условие ложно, то программа переходит к исполнению строки кода, следующей за блоком условной конструкции.<br>
<h3>Операторы сравнения</h3>
Часто условия создаются при сравнении величин, для чего существуют особые операторы сравнения.<br>
<br>
<table border="1" cellpadding="1" cellspacing="1">
<tbody>
<tr>
    <td>
          Оператор
    </td>
    <td>
          Значение
    </td>
    <td>
          Пример
    </td>
    <td>
          Истинность 
    </td>
</tr>
<tr>
    <td>
             ==
    </td>
    <td>
          Равно
    </td>
    <td>
          5 == 5
    </td>
    <td>
          True
    </td>
</tr>
<tr>
    <td>
             !=
    </td>
    <td>
          Не равно
    </td>
    <td>
          8 != 5
    </td>
    <td>
          True
    </td>
</tr>
<tr>
    <td>
             >
    </td>
    <td>
          Больше
    </td>
    <td>
          3 > 10
    </td>
    <td>
          False
    </td>
</tr>
<tr>
    <td>
             <
    </td>
    <td>
          Меньше
    </td>
    <td>
          5 < 8
    </td>
    <td>
          True
    </td>
</tr>
<tr>
    <td>
             >=
    </td>
    <td>
          Больше или равно
    </td>
    <td>
          5 >= 10
    </td>
    <td>
          False
    </td>
</tr>
<tr>
    <td>
             <=
    </td>
    <td>
          Меньше или равно
    </td>
    <td>
          5 <= 5
    </td>
    <td>
          True
    </td>
</tr>
</tbody>
</table>
<h3>Создание блоков кода с помощью отступов</h3>
Код с отступом превращается в блок. Блоком называют одну или несколько идущих подряд строк  с одинаковым отступом. Отступ организует код не только визуально, но и логически: блок - единая конструктивная единица.<br>
Используйте 1 символ табуляции или 4 символа пробела.<br>
<h3>Конструкции if с условием else</h3>
Иногда требуется, чтобы программа "выбирала", исходя из условия: если истинно - сделать одно, если ложно - сделать другое. Это позволяет выполнить условие else в конструкции if.<br>
<blockquote>
     password = input("введите пароль: ")<br>
     if password == "secret":<br>
          print("Доступ открыт")<br>
     else:<br>
         print("Доступ закрыт")
</blockquote>
Условие else: служебное слово else, затем двоеточие и блок выражений. Условие else должно находиться внутри того же блока, что и if, то есть для  if и для else должен быть одинаковый отступ.<br>
<h3>Использование выражения elif</h3>
Программа позволяет выбирать из нескольких возможностей, если дополнительно задействовать условия elif. Это удобно когда одну переменную надо многократно сравнивать с разными величинами.<br>
<blockquote>
     # Датчик насторения<br>
     import random<br>
     mood = random.randint(1,3)<br>
     if mood== 1:<br>
         print("Ваше настроение - радострое")<br>
     elif mood == 2:<br>
         print(" Ваше настроение - так себе")<br>
     elif mood == 3:<br>
         print ("Ваше настроение - плохое")<br>
     else:<br>
         print("не бывает такого настроения")
</blockquote>
<br>
<table border="1" cellpadding="1" cellspacing="1">
<tbody>
<tr>
    <th>
          Выражение
    </th>
    <th>
         Описание 
    </th>
</tr>
<tr>
    <td>
          if <условие><br>
          <блок>
    </td>
    <td>
          Простая условная конструкция. Если <условие> истинно, то <блок> выполняется, в противном случае - пропускается
    </td>
</tr>
<tr>
    <td>
          if <условие><br>
          <блок 1><br>
          else:<br>
          <блок 1><br>
    </td>
    <td>
          Условная конструкция с условием else. Если у истинно, выполняется <блок 1>, если ложно - <блок 2>
    </td>
</tr>
<tr>
    <td>
          if <условие 1><br>
          <блок 1><br>
          elif <условие 1><br>
          <блок 2><br>
         ...<br>
          elif <условие N><br>
          <блок N><br>
          else:<br>
          <блок N+1>
    </td>
    <td>
         Условная конструкция c дополнительными условиями elif  и необязательным else в конце. Будет исполнен блок после первого же условия, которое окажется истинным.  Если ни одно условие не принимает значение True, будети сполнен блок после заключительного else.
    </td>
</tr>
</tbody>
</table>
<h3><br>
</h3>
<h3>Создание циклов с использованием while (пока)</h3>
Формат цикла while похож на конструкцию if. Различие в том, что блок кода (тело цикла) будет исполнен, если условие истинно, причем в конструкции while компьютер проверяет условие на истинность снова и снова, пока не окажется ложным. <br>
<blockquote>
     response=""<br>
     while response != "Потому что.":<br>
         response = input("Почему?\n")<br>
     print("А. Ладно.")
</blockquote>
В данном случае тело цикла представляет собой одну строку кода: response = input("Почему?\n"). Этот код будет исполняться раз за разом, пока пользователь вводит не "Потому что.", а какой-либо другой ответ. Когда условие  response != "Потому что." оказывается ложным, цикл завершается и программа переходит к следующему выражению.
<h3>Инициализация управляющей переменной</h3>
Зачастую контроль над циклом while осуществляет <i>управляющая переменная</i>. Это переменная, фигурирующая в условии: ее сопоставляют с некоторым значением или значениями.<br>
Управляющую переменную следует инициализировать. Инициализация происходит непосредственно перед началом цикла - response=""<br>
Если управляющая переменная не будет иметь ни какого значения в тот момент, когда она впервые сравнивается с образцом, то программа выдаст ощибку. <br>
Обычно управляющей переменной сначала присваивают пустое значение, хотя можно присвоить и любое другое, ошибки это не вызовет, но усложнит код.
<h3>Проверка значения управляющей переменной</h3>
Убедитесь, что условие цикла while изначально ложное. В противном случае тело цикла никогда не будет исполнено. Пример:<br>
<blockquote>
     response="Потому что."<br>
     while response != "Потому что.":<br>
         response = input("Почему?\n")
</blockquote>
Поскольку переменная response равна "Потому что." как раз в момент запуска цикла, тело цикла так и не будет исполнено.
<h3>Изменение значения управляющей переменной</h3>
Посте того как вы создадите условие, инициализируете управляющую переменную и убедитесь, что блок кода не останется неисполненным, в вашем распоряжении окажется работающий цикл. Осталось сделать, чтобы цикл когда-нибудь закончился.<br>
Если цикл (без внешнего вмешательства) не остановиться никогда, то это <i>бесконечный цикл</i>.<br>
Вот пример бесконечного цикла<br>
<blockquote>
     counter=0<br>
     while counter<=10<br>
         print(counter)
</blockquote>
Вероятно, задача была вывести на экран числа с 0 до 10, но не была указана команда, которая бы изменяла значение управляющей переменной counter в теле цикла. <br>
Запомните: использование циклизованного кода должно менять значение управляющей переменной, иначе вы получите бесконечный цикл.
<h3>Трассировка программы</h3>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<hr>
<h3>Редакторы кода.</h3>
Выбор редактор кода, это первый важный вопрос, который придется решить, ведь от этого зависит комфорт изучения языка.<br>
<br>
<div>
<b>Платные продукты:</b>
</div>
<ul>
    <li> <a target="_blank" href="https://"> </a><b><a href="https://" target="_blank">PyCharm</a></b><a target="_blank" href="https://"> </a>— интегрированная среда разработки для языка программирования Python. Предоставляет средства для анализа кода, графический отладчик, инструмент для запуска юнит-тестов и поддерживает веб-разработку на Django. PyCharm разработана компанией JetBrains на основе IntelliJ IDEA и обойдется Вам в $20 в месяц или $200 в год. PyCharm работает под операционными системами Windows, Mac OS X и Linux.</li>
</ul>
<br>
<div>
<b>Бесплатные продукты:</b>
</div>
<ul>
    <li><b><a href="http://sublimetext3.ru" target="_blank">Sublime Text</a></b> — проприетарный текстовый редактор. Поддерживает плагины на языке программирования Python. Разработчик позволяет бесплатно и без ограничений ознакомиться с продуктом, однако программа уведомляет о необходимости приобретения лицензии. <i>Поддерживаются следующие языки</i> -  C, C++, C#, CSS, D, Dylan, Erlang, HTML, Groovy, Haskell, Java, JavaScript, LaTeX, Lisp, Lua, Markdown, MATLAB, OCaml, Perl, PHP, Python, R, Ruby, SQL, TCL и XML. Sublime Text работает под операционными системами Windows, Mac OS X и Linux.</li>
</ul>
<ul>
    <li><b><a href="http://atom.io" target="_blank">Atom</a> </b>— бесплатный текстовый редактор с открытым исходным кодом, с поддержкой плагинов, написанных на Node.js, и встраиваемых под управлением Git. Большинство плагинов имеют статус свободного программного обеспечения, разрабатываются и поддерживаются сообществом. <i>Поддерживаются следующие языки</i> - C/C++, C#, Clojure, CSS, CoffeeScript, Markdown (GitHub Flavored), Go, Git, HTML, JavaScript, Java, JSON, Julia, Less, Make, Mustache, Objective-C, PHP, Perl, Property List (Apple), Python, Ruby on Rails, Ruby, Sass, Shell script, Scala, SQL, TOML, XML, YAML (Все языки) Atom работает под операционными системами Windows, Mac OS X и Linux.</li>
</ul>
<br>
<hr>
<h3>Рекомендуемая литература.</h3>
<ol>
    <li><a href="http://wombat.org.ua/AByteOfPython">A byte of python (Укус питона) - Swaroop Chitlur</a>. </li>
    <li>Introducing Python (Простой питон) - Bill Lubanovic.</li>
    <li>Head First Python (Изучаем программирование на питон) - Paul Berry.</li>
    <li>Python crash course (Изучаем питон) - Eric Matthes.</li>
</ol>