- •Формальные языки записи алгоритмов
- •Трансляторы и интерпретаторы языков программирования
- •Зачем нужно уметь программировать?
- •Комментарии к коду
- •Комментарии к коду
- •Экзотические языки программирования Специальные, экзотические и эзотерические языки программирования
- •Эзотерические языки программирования
- •О языке 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
Изображения
Для работы с изображениями в tkinter имеется два класса BitmapImage и PhotoImage. BitmapImage представляет собой простое двухцветное изображение, PhotoImage – полноцветное изображение.
BITMAPIMAGE
Конструктор класса принимает следующие аргументы:
background и foreground – цвета фона и переднего плана для изображения. Поскольку изображение двухцветное, то эти параметры определяют соответственно чёрный и белый цвет.
file и maskfile – пути к файлу с изображением и к маске (изображению, указывающему какие пиксели будут прозрачными).
data и maskdata – вместо пути к файлу можно указать уже загруженные в память данные изображения. Данная возможность удобна для встраивания изображения в программу.
Пример:
from tkinter import * data = '''#define image_width 15 #define image_height 15 static unsigned char image_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x1c, 0x30, 0x0c, 0x60, 0x06, 0x60, 0x06, 0xc0, 0x03, 0xc0, 0x03, 0x60, 0x06, 0x60, 0x06, 0x30, 0x0c, 0x38, 0x1c, 0x00, 0x00, 0x00, 0x00 };''' root=Tk() image = BitmapImage(data=data, background='red', foreground='green') button=Button(root, image=image) button.pack() root.mainloop()
PHOTOIMAGE
PhotoImage позволяет использовать полноцветное изображение. Кроме того у этого класса есть несколько (достаточно примитивных) методов для работы с изображениями. PhotoImage гарантированно понимает форматы GIF и PPM/PGM (под Windows дополнительно PNG).
Аргументы конструктора:
file – путь к файлу с изображением.
data – вместо пути к файлу можно указать уже загруженные в память данные изображения. Изображения в формате GIF могут быть закодированы с использование base64. Данная возможность удобна для встраивания изображения в программу.
format – явное указание формата изображения.
width, height – ширина и высота изображения.
gamma – коррекция гаммы.
palette – палитра изображения.
TTK
ttk (themed tk) это расширение tcl/tk с новым набором виджетов. В ttk используется новый движок для создания виджетов. Этот движок обладает поддержкой тем и стилей оформления. Благодаря этому виджеты ttk выглядят более естественно в различных операционных системах.
Начиная с версий python 2.7 и 3.1.2 в tkinter включён модуль для работы с ttk.
Внешний вид некоторых виджетов ttk, используется тема clam
В ttk включены следующие виджеты, которые можно использовать вместо соответствующих виджетов tk: Button, Checkbutton, Entry, Frame, Label, LabelFrame, Menubutton, PanedWindow, Radiobutton, Scale и Scrollbar. Кроме того имеется несколько новых виджетов: Combobox, Notebook, Progressbar, Separator, Sizegrip и Treeview.
Поскольку это относительно новая возможность tkinter, несколько слов об установке этого модуля. Версии python 2.7/3.1.2 и старше уже имеют в своём составе этот модуль. Для использования ttk с более ранними версиями python, его нужно установить самостоятельно. Домашняя страница модуля. В данный момент python-ttk хостится в svn python.org. Модуль представляет собой один файл – ttk.py, который нужно положить в каталог, где его сможет найти python. Прямые ссылки для скачивания: для версии 2.x, для версии 3.×.
С точки зрения программиста главное отличие новых виджетов от старых заключается в том, что у виджетов ttk отсутствуют опции для конфигурирования его внешнего вида. Сравните, например, количество STANDARD OPTIONS для старого и нового виджета button. Конфигурация внешнего вида виджетов ttk осуществляется через темы и стили. В остальном использование виджетов ttk аналогично соответствующим виджетам tk.
ttk имеет четыре встроенных темы: default, classic, alt, clam. Кроме того дополнительно под Windows есть темы winnative, xpnative и vista, а под Mac OS X – aqua.
STYLE
Style это класс для работы со стилями и темами. Именно этот класс надо использовать для конфигурирования внешнего вида виджетов. Основные методы класса:
1. configure
Конфигурирование внешнего вида виджетов. В качестве аргументов принимает название стиля виджета (например “TButton”) и список опций конфигурирования. Пример:
style.configure("TButton", padding=6, relief="flat", background="#ccc")
2. map
Конфигурирование внешнего вида виджетов в зависимости от их состояний (active, pressed, disabled и т.д.). В качестве аргументов принимает название стиля виджета и список опций конфигурирования, где опции представлены в виде списка. Пример:
style.map("C.TButton",
foreground=[('pressed', 'red'), ('active', 'blue')],
background=[('pressed', '!disabled', 'black'), ('active', 'white')]
)
3. lookup
Возвращает соответствующую опцию конфигурирования. Пример:
style.lookup("TButton", "font")
4. layout
Изменяет layout (схему) виджета. Виджеты ttk состоят из отдельных элементов, опций конфигурирования и других вложенных layouts. Следующий пример иллюстрирует применение метода layout:
style.layout("TMenubutton", [
("Menubutton.background", None),
("Menubutton.button", {"children":
[("Menubutton.focus", {"children":
[("Menubutton.padding", {"children":
[("Menubutton.label", {"side": "left", "expand": 1})]
})]
})]
}),
])
5. element_create
Создаёт новый элемент темы.
6. element_names
Возвращает список элементов текущей темы.
7. element_options
Возвращает список опций (конфигурацию), указанного в аргументе элемента.
8. theme_create
Создаёт новую тему. Аргументы те же, что и в theme_settings.
9. theme_settings
Конфигурирует существующую тему. Первый аргумент – название темы, второй аргумент – словарь, ключами которого являются названия стилей (TButton и т.п.), а значениями – layout соответствующего стиля.
10. theme_names
Возвращает список доступных тем.
11. theme_use
Изменяет текущую тему на указанную в аргументе.
COMBOBOX
Виджет Combobox предназначен для отображения списка значений, их выбора или изменения пользователем. В версии tk ему подобен виджет Listbox. Разница заключается в том, что Combobox имеет возможность сворачиваться подобно свитку, а Listbox будет оборажаться всегда открытым. Что бы отобразить Combobox с заранее заданными значениями в форме, достаточно сделать следующее:
import tkinter
from ttk import *
tk = tkinter.Tk()
frame = Frame(tk)
frame.grid()
combobox = Combobox(frame,values = ["ОДИН","ДВА","ТРИ"],height=3)
#frame - задает родительский виджет, на его территории будет располагаться Combobox
#values - задает набор значений, которые будут содержаться в Combobox изначально
#height - задает высоту выпадающего списка. Если число элементов списка меньше
11, то можно не задавать.
#Если не задано при колличестве элементов больше 10, то с правой стороны появится
полоса прокрутки.
#Если в нашем примере задать значение height меньше трех, то с правой стороны
появится полоса прокрутки,
#но она будет недоступна, а все элементы будут отображаться одновременно.
combobox.set("ОДИН")
#с помощью предыдущей строчки мы установим Combobox в значение ОДИН изначально
combobox.grid(column=0,row=0)#Позиционируем Combobox на форме
tk.mainloop()
Виджеты tkinter
О существующих виджетах, их возможностях и атрибутах читайте в документации.
События в tkinter
Подробности о событиях — в документации
Стили виджетов tkinter
О кастомизации и стилях подробнее читайте в документации.
Упаковка виджетов tkinter
Подробней об упаковку виджетов и упаковщиках читайте в документации.
Виджеты tkinter
О существующих виджетах, их возможностях и атрибутах читайте в документации.
Установка дополнительных модулей Python
Текст соответствует версии python 3.4 — в последующих версиях возможны изменения. В предыдущих версиях не все описанные возможности работают.
Существует три основных способа поставить Python-пакет:
с использованием команды pip;
стандартным для операционной системы способом (пакет для Linux, инсталлятор для Windows)
из исходных текстов;
Первый способ является стандартным для пакетов из стандартного репозитория пакетов python pypi.python.org. Начиная с версии 3.4 при установке python также устанавливается утилита pip, которая загружает и устанавливает пакеты из вышеуказанного репозитория. Для установки нового пакета необходимо запустить утилиту с такими параметрами:
pip install имя_пакета
При установке пакета будут также установлены все зависимости — пакеты, требуемые для его нормальной работы.
Второй способ является наиболее простым и удобным для тех пакетов, для которых созданы установочные программы (для ОС Windows) или, например, пакеты (для ОС Linux).
К третьему способу придется прибегнуть в тех случаях, когда по тем или иным причинам не удается установить библиотеку иными методами. Скачайте ее дистрибутив и разархивируйте. В корне папки дистрибутива должен присутствовать файл setup.py. Запустите его с такими параметрами:
python setup.py install
Естественно, рекомендуемым способом является первый. Но тут есть одно “но”: если у Linux-систем с зависимостями между пакетами всё в относительном порядке, то в Windows не всё гладко. Инструмента, который бы отслеживал зависимости программ, в Windows просто нет. Поэтому, авторам пакетов в виде инсталляторов лишь остается указывать в документации, что необходимо поставить, чтобы данный пакет заработал.
Python eggs позволяют использовать кроссплатформенный механизм зависимостей для Python-пакетов. В отличии от принятой в Linux-дистрибутивах концепции, зависимости eggs-пакета пытаются “разрешиться” уже после установки пакета. Для Windows это весьма большой шаг вперед, а вот для Linux не однозначно: дело в том, что системные инструменты (APT в случае Debian и Ubuntu) ничего не знают об установленных при помощи easy_install пакетах, и наоборот – easy_install не находит уже установленные при помощи APT пакеты, скачивая их заново. Было бы очень здорово, если бы существовал инструмент конвертации из egg в deb. Часто в deb просто нет пакетов, которые есть в egg (например, Pylons), либо они опаздывают по версиям Стоит отметить, что eggs хороши, когда есть постоянное подключение к Internet, или хотя бы во время выполнения команды easy_install, в других случаях они не так удобны.
По умолчанию пакеты, установленные любым из трех способов, помещаются в C:\Python\Lib\site-packages (полагая C:\Python каталогом, куда вы ставили Python). Как и в Linux, я бы советовал не смешивать пакеты, установленные разными способами и указать для eggs отдельное место, равно как и для “ручной” установки.
