Упаковка и распаковка аргументов функции в Python

Язык программирования Python очень занимательный. Гвидо Ван Россум душу вложил ради того, чтобы создать максимально высокоуровневый, но в то же время простой и понятный язык. Необязательно штудировать тонну литературы ради того, чтобы написать что нибудь поинтереснее , чем «Привет мир». Язык таит в себе очень много фишек, которые волей-неволей постепенно изучаешь, и твой код становится красивым и производительным. Недавно мне открылась одна очень интересная особенность языка, которой я хочу сейчас поделиться.

Представим ситуацию. Мы пишем функцию summ(), которая, как нетрудно догадаться из названия, считаем сумму элементов. Сколько входных аргументов ей определить? Можно два, а можно три, в зависимости от требований алгоритма. А если нужно посчитать сначала сумму двух, а потом трех? Две разные функции писать не хочется. Очевидное решение, которое приходит в голову — передать в качестве аргумента массив элементов.

читать далее «Упаковка и распаковка аргументов функции в Python»

Конструкция if __name__ == ‘__main__’: в Python

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

__name__ — это специальная внутренняя переменная, которая инициализируется, как ‘__main__’ если файл с исходным кодом был непосредственно запущен, а не импортирован. При импорте, переменная будет содержать имя модуля, из которого произошел импорт.

читать далее «Конструкция if __name__ == ‘__main__’: в Python»

Реализация и криптоанализ шифра простой перестановки

Всем привет! Продолжается погружение в увлекательный и местами запутанный мир криптографии. Шифр простой перестановки самый легкий из перестановочных, но даже его взлом занял у меня в два раза больше времени и сил, чем шифр Цезаря. Пришлось попотеть с выбором алгоритма криптоанализа. Сначала я пробовал частотный анализ биграмм, но для этого метода нужен очень большой литературный текст, иначе частоты никогда не совпадут с эталонными. Поэтому окончательный выбор пал на метод запрещенных биграмм. Я расскажу о нем подробнее, но сначала пара слов о самом шифре, поехали!

Прежде чем продолжить чтение, обратите внимание на реализации других шифров

Шифр простой перестановки

Определение перестановки(подстановки, расстановки) приводить не буду, о каком шифре может идти речь, если не знать базовых определений?

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

Итак, суть. Дан ключ — перестановка длины N, не большей, чем длина открытого текста. Во время шифрования текст делится на блоки длины N и в каждом блоке символы меняются местами в соответствии с перестановкой. Расшифровка выполняется аналогично.

читать далее «Реализация и криптоанализ шифра простой перестановки»

Создание каталога электронной библиотеки с помощью Python

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

Впервые я задумался об этом в десятом классе. Уже тогда я точно знал, что буду поступать на IT, поэтому логичная мысль пришла в голову: «давай, ты же программист!». На тот момент я умел писать Hello world в Си и решать некоторые задачки из ЕГЭ. Воодушевился и начал гуглить! Естественно, знаний совершенно недостаточно, ничего у меня не получилось, я бросил эту затею. В свое оправдание могу сказать, что работа с каталогами в Си совсем нетривиальна, особенно для десятиклассника, у которого в школе не было информатики.

И вот буквально пару дней назад я вновь заглянул в папочку «Library», дабы закачать что нибудь свеженькое на электронную книгу. И меня поразил гром среди ясного неба: «Я же умею питон! Наверняка в нем можно за пару строк описать любую директорию». Оказалось, что так и есть. Пять минут в поиске и я выбрал кандидата в мои помощники. Итак, встречайте!

Модуль os в Python

читать далее «Создание каталога электронной библиотеки с помощью Python»

Создание списка запрещенных биграмм английского языка

Доброго времени суток, дорогие читатели! Недавно вышла статья про реализацию шифра Цезаря и его взлом. В конце я пообещал, что буду реализовывать и другие шифры. И вот мой выбор пал на перестановочный шифр. Но появилась проблема, для взлома понадобился список запрещенных биграмм в английском языке. После упорного и безрезультатного поиска, я решил поступить, как настоящий программист и составить эту таблицу самостоятельно.

Идея такая: взять достаточно большой литературный текст на английском языке и вычленить из него все возможные биграммы, обязательно с пробелами. Сравнить их со списком всех биграмм языка и найти запрещенные, которые ни разу не встретились в литературном тексте. Для этой задачи я выбрал язык программирования Python, так как хотелось сделать быстро и не заморачиваться с эклипсом и прочими радостями компилируемых языков. Вот, что у меня получилось, поехали!

читать далее «Создание списка запрещенных биграмм английского языка»