- •Формальные языки записи алгоритмов
- •Трансляторы и интерпретаторы языков программирования
- •Зачем нужно уметь программировать?
- •Комментарии к коду
- •Комментарии к коду
- •Экзотические языки программирования Специальные, экзотические и эзотерические языки программирования
- •Эзотерические языки программирования
- •О языке Python
- •Интерпретация и компиляция
- •Алгоритм работы простого интерпретатора:
- •Рекомендуемая литература
- •Ввод-вывод в Python Ввод данных
- •Вывод данных
- •Установка Python и сред разработки
- •Установка интерпретатора
- •Установка интегрированной среды разработки
- •Cреда программирования wing ide
- •Ключевые слова и идентификаторы в Python Идентификаторы
- •Ключевые слова
- •Концепция присваивания
- •Функция определения длины строки в Python
- •Литералы строк в Python
- •Срезы строк в Python
- •Примеры срезов
- •Методы строк в Python
- •Методы find и rfind
- •Метод replace
- •Метод count
- •Работа с тестирующей системой
- •Задачи поиска, замены и удаления подстроки в строке в Python
- •Метод replace
- •Метод count
- •Удаление подстроки
- •Числа с плавающей точкой (вещественные)
- •Основные операции с вещественными числами
- •Логический тип (bool) в Python
- •Логические операции
- •Принцип условного исполнения
- •Условная инструкция в Python
- •Вложенные условные инструкции
- •Операторы сравнения
- •Логические операторы
- •Каскадные условные инструкции
- •Инструкция pass в Python
- •Инструкции управления циклом в Python
- •Цикл while в Python
- •Вывод числа с обратным порядком цифр и в заданной системе счисления
- •Тест простоты
- •Проверка простоты перебором делителей
- •Факторизация перебором делителей
- •Факторизация перебором делителей на python
- •Факторизация перебором делителей на pascal
- •Разложение числа на множители в Python
- •Алгоритм Евклида: Python
- •Проверка числа на простоту в Python
- •Функция range
- •Фильтрация потока чисел
- •Поиск числа в потоке на Python
- •Поиск максимального и минимального числа в потоке на Python
- •Генерация псевдослучайных чисел
- •Детерминированные генераторы
- •Обработка исключений
- •Генерация исключений
- •"Страхование" от ошибок
- •Функции в программировании
- •Важное дополнение
- •Как написать хорошую функцию
- •Преимущества структурного программирования
- •Без использования структурного программирования
- •С использованием структурного программирования
- •Задания
- •Данная программа ищет самый популярный фильм среди данных
- •Функции в Python
- •Вызов функции и возврат значения
- •Передача параметров в функцию
- •Примеры
- •Граф вызовов функций
- •Пример на языке си
- •Что вернет функция a() в место своего вызова?
- •В каком порядке будут напечатаны X() started и X() finished для a, b, c, d?
- •Стек вызовов
- •Области видимости переменных в Python
- •Правила видимости имен
- •Пример перекрытия областей видимости
- •Доступ на присваивание к нелокальным именам
- •Полиморфизм функций в Python
- •Контрольные вопросы
- •Решение
- •Решение
- •Математические функции в Python
- •Функции в библиотеке math
- •Степенные и логарифмические функции
- •Тригонометрические функции
- •Радианы в градусы и наоборот
- •Пример программы с математическими функциями
- •Кортежи в Python Кортежи в Python
- •Кортежи в логическом контексте
- •Присваивание нескольких значений за раз
- •Методы split и join для списка строк в Python
- •Списки в Python
- •Сортировка выбором
- •Пример сортировки выбором минимума на си
- •Пример сортировки выбором минимума на python
- •Пример сортировки выбором минимума на pascal
- •Сортировка методом пузырька
- •Реализация сортировки массива методом пузырька на языке python
- •Реализация сортировки массива методом пузырька на языке pascal
- •Модернизация сортировки методом пузырька
- •Случайное перемешивание массива в Python
- •Сортировка подсчетом
- •Пример сортировки подсчетом на python
- •Пример сортировки подсчетом на языке си
- •Пример сортировки подсчетом на языке pascal
- •Генерация псевдослучайных чисел
- •Детерминированные генераторы
- •Вычисление суммы натуральных чисел от 1 до n
- •Проверка строки на палиндромность
- •Суммирование списка
- •Наибольшее значение в списке
- •Числа фибоначчи
- •Быстрое возведение в степень
- •Ханойские башни
- •Ограничение на глубину рекурсии
- •Стиль программирования (для Python)
- •Основные правила pep 8: Форматирование
- •Комментарии
- •Функции
- •Работа с текстовыми файлами в Python открытие файла
- •Чтение данных из файла
- •Вывод данных в файл
- •Закрытие файла
- •Двумерные массивы в Python
- •Создание вложенных списков
- •Ввод двумерного массива
- •Пример обработки двумерного массива
- •Вложенные генераторы двумерных массивов
- •Генераторы таблиц
- •Вычисление произведения матриц
- •Многомерные списки в Python обработка и вывод вложенных списков
- •Создание двумерного списка
- •Ввод двумерного списка
- •Сложный пример обработки двумерной таблицы
- •Множества в Python
- •Создание множества
- •Изменение множества
- •Удаление элементов множества
- •Основные операции с множествами
- •Множества в логическом контексте
- •Множества
- •Задание множеств
- •Работа с элементами множеств
- •Перебор элементов множества
- •Операции с множествами
- •Словари (ассоциативные массивы) в Python
- •Когда нужно использовать словари
- •Создание словаря
- •Работа с элементами словаря
- •Перебор элементов словаря
- •Словари со смешанными значениями
- •Пример хранения списков в словаре
- •Пример дешифрации текста после алфавитной замены
- •Дан текст:
- •Итог всех замен:
- •Итог всех замен:
- •Окончательный вариант:
- •Рекурсивный перебор
- •Перебор всех подмножеств
- •Перебор всех k-элементных подмножеств
- •Перебор всех перестановок
- •Одномерное динамическое программирование: количество способов Задача о кузнечике
- •Рекурсивное решение
- •Пример на языке python
- •Пример на языке pascal
- •Нерекурсивное решение
- •Пример на языке python
- •Пример на языке pascal
- •Модификации задачи о кузнечике
- •Пример на языке python
- •Пример на языке pascal
- •Пример на языке python
- •Пример на языке pascal
- •Одномерное динамическое программирование: наилучший способ задача о кузнечике со стоимостями
- •Пример на языке python
- •Пример на языке pascal
- •Восстановление ответа
- •Пример программы на языке python:
- •Пример программы на языке pascal:
- •Пример программы на языке python:
- •Пример программы на языке pascal:
- •Пример программы на языке python
- •Пример программы на языке pascal:
- •Линейные задачи
- •Рекурсивный перебор
- •Перебор всех подмножеств
- •Перебор всех k-элементных подмножеств
- •Перебор всех перестановок
- •Сортировка слиянием
- •Быстрая сортировка Хоара: Python
- •Асимптотика алгоритма
- •Объектно-ориентированное программирование
- •Классы в Python
- •Метод init
- •Создание экземпляров
- •Переменные экземпляра
- •Плановая обработка ошибок при помощи исключений в Python
- •Обработка исключений
- •Генерация исключений
- •“Страхование” от ошибок
- •Юнит-тестирование
- •Тестирование как этап разработки программы
- •Виджеты
- •Происхождение термина «виджет»
- •Типовые элементы интерфейса
- •Модуль tkinter Что такое tkinter?
- •Класс Tk
- •Общее для всех виджетов
- •Методы виджетов
- •"Системные" методы
- •Пример, часы:
- •Пример:
- •Основные виджеты
- •Методы виджета
- •Упаковщики
- •Привязка событий
- •Изображения
- •Пошаговые инструкции
- •Математические функции в Python
- •Функции в библиотеке math
- •Степенные и логарифмические функции
- •Тригонометрические функции
- •Радианы в градусы и наоборот
- •Пример программы с математическими функциями
- •Массивы чисел в модуле math Массивы чисел
- •Векторы
- •Математические операции над векторами
- •Векторные функции
- •Использование списков
- •Основы Numerical Python
- •К слову, о срезах
- •Задание координат и значений функций
- •Векторизация
- •Визуализация функций в Matplotlib
- •Набор точек
- •Функция
- •Украшения
- •Несколько кривых
- •Маркеры
- •Дополнительные аргументы plot()
- •Сохранение файла
- •Гистограммы
- •Модуль os в Python
- •Текущий рабочий каталог
- •Работа с именами файлов и каталогов
- •Получение содержимого каталога
- •Получение сведений о файле
- •Получение абсолютных путей
- •Анализ аргументов командной строки в Python
- •Примеры без использования argparse
- •Использование библиотеки argparse
Ключевые слова и идентификаторы в Python Идентификаторы
ОПРЕДЕЛЕНИЕ
Идентификатор — имя некоторого объекта в программе, являющееся его уникальным признаком, позволяющим отличать его от других объектов.
Идентификатор обязательно есть у каждой переменной, функции, объекта и т.п. Идентификаторы в Питоне не ограничены по длине и чувствительны к регистру. То есть А и а — это разные имена переменных или функций.
В идентификаторах допустимы только символы от "A" до "Z" в верхнем и нижнем регистре, подчеркивание "_" и, кроме первого символа идентификатора, цифры от "0" до "9".
Например, __aAb12_as111_1_4_5 — корректный идентификатор, а 1z — некорректный, т.к. начинается с цифры.
Для идентификаторов на Питоне версии 3 можно использовать не только ASCII символы, но и Unicode. На практике это означает, что переменные можно называть по-русски. Но делать так не стоит, ведь ваш код вполне может попасть в руки разработчиков из других стран: будет ли вам удобно, если в библиотеке, которой вы захотите воспользоваться, найдутся функции с именами, записанными китайскими иероглифами?
Ключевые слова
Следующие идентификаторы являются зарезервированными или ключевыми словами языка и не могут быть использованы как обычные идентификаторы (имена переменных или функций).
False class finally is return None continue for lambda try True def from nonlocal while and del global not with as elif if or yield assert else import pass break except in raise
Концепция присваивания
Присваивание — механизм, позволяющий динамически изменять связь переменных с их значениями. Это одно из центральных конструкций в императивных языках программирования.
Эффективно и просто реализуется на архитектуре современных компьютеров: на физическом уровне результат операции состоит в проведении записи и перезаписи ячеек памяти или регистров процессора. Общий синтаксис простого присваивания выглядит следующим образом:
<выражение слева> = <выражение справа>
«Выражение слева» должно после вычисления привести к местоположению объекта данных, к целевой переменной, идентификатору ячейки памяти, в которую будет производиться запись. Такие ссылки называются «левосторонними значениями» (англ. lvalue). Типичные примеры левостороннего значения — имя переменной (x), путь к переменной в пространстве имён и библиотеках (Namespace.Library.Object.AnotherObject.Property), путь к массиву с выражением на месте индекса (this.a[i+j*k]).
«Выражение справа» должно обозначать тем или иным способом ту величину, которая будет присвоена объекту данных. Таким образом, даже если справа стои́т имя той же переменной, что и слева, интерпретируется оно иначе — такие ссылки называются «правосторонними значениями» (англ. rvalue).
Обмен переменных значениями в Python
В Python есть особый и при этом универсальный способ обмена переменных значениями.
(a,b) = (b,a)
Этот способ используется очень часто из-за своей прозрачности.
Он работает всегда, даже если переменные разных типов (в этом случае они обмениваются не только значениями, но и типами). Круглые скобки в этой записи можно опустить:
a, b = b, a
Литералы чисел в Python
Существуют три формы непосредственной записи для чисел: целых, чисел с плавающей точкой, и комплексных чисел.
ЗАПИСЬ ЦЕЛЫХ ЧИСЕЛ
Некоторые примеры целых чисел:
7 2147483647 0o177 0b100110111 3 79228162514264337593543950336 0o377 0x100000000 79228162514264337593543950336 0xdeadbeef
В Python ограничений по длине записи числа, кроме размера доступной памяти, нет.
ЗАПИСЬ ДРОБНЫХ ЧИСЕЛ (С ПЛАВАЮЩЕЙ ЗАПЯТОЙ)
Примеры дробных чисел:
3.14 10. .001 1e100 3.14e-10 0e0
ЗАПИСЬ МНИМЫХ ЧИСЕЛ
Мнимое число — это комплексное число с действительной частью "0", при этом комплексные числа представлены в виде пары чисел с плавающей точкой.
Примеры мнимых чисел:
3.14j 10.j 10j .001j 1e100j 3.14e-10j
Комплексные числа получаются через операцию сложения действительного числа с мнимым.
Целочисленный тип (int) в Python
Для хранения целых чисел в Python используется тип int (от англ. integer — целое число). Этот тип позволяет хранить как положительные, так и отрицательные числа, при этом сколь угодно большие (в отличие от большинства языков программирования, где целочисленная переменная обычно занимает лишь несколько байт). Более точно, размер числа ограничен лишь имеющейся памятью.
Для преобразования к целому типу используется функция одноименная с именем типа — int:
s = int(input())
t = int(2.5)
Для целых чисел определены арифметические операции:
+ сложение;
— вычитание;
* умножение (пропускать его в выражениях вида 2 * x нельзя);
/ деление;
// целочисленное деление (дробная часть отбрасывается);
% остаток от деления;
** возведение в степень.
В арифметических выражениях порядок действий соответствует принятому в математике, для изменения порядка действий используются круглые скобки:
(x - a) * 2 - (a - (1 - c))
Функция abs(x) возвращает модуль (абсолютное значение) числа x.
Присваивания вида x = x + a, x = x // a и т. п. можно писать сокращенно: x += a, x //= a.
ПРИМЕР СЧИТЫВАНИЯ ОДНОГО ЧИСЛА
s = int(input())
ПРИМЕР СЧИТЫВАНИЯ ДВУХ ЧИСЕЛ, ВВОДИМЫХ В РАЗНЫХ СТРОЧКАХ
s = int(input()) t = int(input())
ПРИМЕР СЧИТЫВАНИЯ ДВУХ ЧИСЕЛ, ВВОДИМЫХ В ОДНОЙ СТРОКЕ ЧЕРЕЗ ПРОБЕЛ:
s, t = map(int, input().split()) # читаем строку, режем по пробелу # с помощью split, и к каждой части # применяем функцию int
Строки в Python
Строка состоит из последовательности символов. Тип строки str.
>>> type('2')
<class 'str'>
В языке Питон нет отдельного символьного типа. Символ — это просто строка длины 1.
Строка считывается со стандартного ввода функцией input().
Для двух строк определена операция сложения (конкатенации), также определена операция умножения строки на число.
>>> 'Hello' + 'World'
'HelloWorld'
>>> 'ABC' * 10
'ABCABCABCABCABCABCABCABCABCABC'
Узнать количество символов (длину строки) можно при помощи функции len (от англ. length — длина):
>>> s = 'Hello'
>>> print(len(s))
5
Длина строк в Питоне не ограничена или, строго говоря, ограничена объемом выделенной оперативной памяти.
