- •Формальные языки записи алгоритмов
- •Трансляторы и интерпретаторы языков программирования
- •Зачем нужно уметь программировать?
- •Комментарии к коду
- •Комментарии к коду
- •Экзотические языки программирования Специальные, экзотические и эзотерические языки программирования
- •Эзотерические языки программирования
- •О языке 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
Перебор элементов словаря
Можно легко организовать перебор ключей всех элементов в словаре:
for key in A:
print(key, A[key])
Следующие методы возвращают представления элементов словаря. Представления во многом похожи на множества, но они изменяются, если менять значения элементов словаря. Метод keys возвращает представление ключей всех элементов, метод values возвращает представление всех значений, а метод items возвращает представление всех пар (кортежей) из ключей и значений.
Соответственно, быстро проверить, если ли значение val среди всех значений элементов словаря A можно так: val in A.values(), а организовать цикл так, чтобы в переменной key был ключ элемента, а в переменной val было его значение можно так:
for key, val in A.items():
print(key, val)
Словари со смешанными значениями
Словари могут состоять не только из строк. Значения словарей могут быть любого типа, включая целые, логические, произвольные объекты, или даже другие словари. И значения в одном словаре не обязаны быть одного и того же типа; можно смешивать и сочетать их, как вам необходимо. Ключи словаря более ограниченны, но они могут быть строками, целыми числами и некоторыми другими типами. Ключи разных типов тоже можно смешивать и сочетать в одном словаре.
Пример хранения списков в словаре
>>> SUFFIXES = {1000: ['KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'], … 1024: ['KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB']} >>> len(SUFFIXES) #1 2 >>> 1000 in SUFFIXES #2 True >>> SUFFIXES[1000] #3 ['KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'] >>> SUFFIXES[1024] #4 ['KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB'] >>> SUFFIXES[1000][3] #5 'TB'
Так же, как для списков и множеств, функция len() возвращает количество элементов словаря.
И так же, как со списками и множествами, можно использовать оператор in, чтобы проверить, определён ли конкретный ключ в словаре.
1000 является ключом в словаре SUFFIXES; его значение — список из восьми элементов (восьми строк, если быть точным).
Аналогично, 1024 — ключ словаря SUFFIXES; и его значение также является списком из восьми элементов.
Так как SUFFIXES[1000 ] является списком, то можно обратиться к отдельным элементам списка по их порядковым номерам, которые индексируются с нуля.
Пример дешифрации текста после алфавитной замены
Рассмотрим следующую учебную задачу из области защиты информации: раскодировать текст, зашифрованный шифром перестановки, при помощи частотного анализа. Известно, что перестановкой перепутаны буквы: а, в, е, з, о, п, р, с, т, у, ф, ц, ш, ь. Остальные буквы текста не тронуты.
Дан текст:
оншчшль был эеа ьдиный, кзгз о шедш ншсыошли илюошцшезм. зн фзсдшл тьеоых шинае, фоящьнных, быорих тзезждьниями ьгз мыфли, и зни были ф ним сшдзлгз дз фзцозеьния офьгз тезчьгз. эеа гзозеил ф ними, теьдлшгшя им мьлздии; шинае тьли ьма, и зн ешдзошлфя. здншкз дзлгзь оеьмя шинае тьли тзздинзчкь либз о ньфкзлвкз гзлзфзо, ш зфцшлвныь цьм оеьмьньм фларшли; ибз были зни фтзфзбны тзфцичв лирв ца чшфцв сшмыфлш илюошцшеш, к кзцзезма фшми имьли ньтзфеьдфцоьннзь зцнзрьниь. тзнимшниь фзбешцвьо теихздилз к ним тзфцьтьннз, нз тз мьеь фларшния знз езфлз и аоьличиошлз фзглшфиь и гшемзничнзфцв тьния. фзсошл здншжды илюошцше офьх шинае и теьдлзжил им мьлздию оьликзй филы, ешфкеыошораю им цшйны бзльь чадьфныь и сншчимыь, чьм ць, чцз кзгдш-либз теьждь зцкеыошлифв им. кешфзцш ьь ншчшлвных нзц и оьликзльтиь кзнузоки зчшезошлз шинае, и о мзлчшнии фклзнилифв зни тьеьд илюошцшезм. и фкшсшл им цзгдш илюошцше: — ис эцзй мьлздии, чцз я ошм дшл, тзоьльошю флзжицв гшемзничнзь соачшниь оьликзй масыки. и тзьлика сшжьг я о кшждзм ис ошф ньагшфимзь тлшмя, оы тзоинны теилзжицв офь фози афилия к фзоьерьнфцозошнию фьй мьлздии, и озлвны бадьць олзжицв о ньь, теи жьлшнии, фози фзбфцоьнныь мыфли и чшяния. я жь бада фидьцв и фларшцв, ншфлшждшяфв цьм, кшк ошрш оьликшя кешфзцш ислиошьцфя о тьфню. и сшсоачшли гзлзфш шинае, тздзбныь соакшм шеп и люцньй, фоиеьльй и цеаб, оизл и зегшнш, и мнзгзгзлзфзма тзющьма хзеа, и теинялифв флшгшцв мьлздию илюошцшеш о оьличшйраю масыка. бьфкзньчнз исмьнчиоыь мьлздии фцшли фтльцшцвфя о гшемзничнзь фзсоачиь, оыхздиорьь нш оыфзчшйрих и нисрих нзцшх сш гешни флыримзфци, и мьфцз збицшния илюошцшеш тьеьтзлнилзфв соакзм. масыкш эцш и эхз ьь дзфцигли оньрньй тафцзцы, и цш тьеьфцшлш быцв тафцзцзй.
При помощи написанной выше функции ChastotnyAnaliz получаем количества символов в тексте, отсортированные по убыванию, и сличаю их с частотами символов произвольного текста-образца из Интернета на русском языке (например, первые 5 строф 1 главы Евгения Онегина):
Частоты символов: |
частоты в тексте-образце: |
и — 153 |
о — 144 |
з — 143 |
е — 125 |
ш — 115 |
н — 109 |
ь — 113 |
а — 105 |
л — 90 |
и — 92 |
н — 86 |
л — 78 |
ф — 76 |
с — 69 |
о — 72 |
т — 65 |
ц — 58 |
д — 59 |
е — 55 |
в — 58 |
м — 52 |
м — 58 |
а — 39 |
р — 55 |
д — 36 |
у — 51 |
т — 36 |
г — 43 |
ы — 35 |
ь — 40 |
к — 32 |
к — 38 |
ч — 25 |
п — 36 |
г — 24 |
я — 30 |
с — 23 |
б — 29 |
в — 22 |
ы — 24 |
я — 21 |
з — 23 |
б — 18 |
ч — 23 |
ю — 16 |
й — 21 |
р — 15 |
ж — 20 |
ж — 12 |
х — 16 |
й — 12 |
ш — 12 |
х — 12 |
ц — 6 |
э — 5 |
ю — 6 |
щ — 2 |
ф — 2 |
п — 1 |
ъ — 1 |
у — 1 |
э — 1 |
ъ — 0 |
щ — 0 |
В таблице отметим символы, для которых частоты встречи в расшифровываемом тексте разительно отличаются от частот таковых в нормальном русском тексте. Сличая таблицы, приходим к выводу, что нужно осуществить следующие замены: з → о, ш → е, ь → а, ф → с, о → т, ц → в, е → р, а → у, т → ь, с → п, в → з, р → ш, п → ц, у → ф.
Осуществляем эти замены в любом текстовом редакторе в следующем порядке:
предварительно заменим все исходные буквы «о» на «@», чтобы они потом не перепутались c результатом замены буквы «з»
з на о — заменить все
в на з — заменить все
ц на в — заменить все
п на ц — заменить все
с на п — заменить все
ф на с — заменить все
у на ф — заменить все
а на у — заменить все
ь на а — заменить все
т на ь — заменить все
@ на т — заменить все
