Язык программирования Python очень занимательный. Гвидо Ван Россум душу вложил ради того, чтобы создать максимально высокоуровневый, но в то же время простой и понятный язык. Необязательно штудировать тонну литературы ради того, чтобы написать что нибудь поинтереснее , чем «Привет мир». Язык таит в себе очень много фишек, которые волей-неволей постепенно изучаешь, и твой код становится красивым и производительным. Недавно мне открылась одна очень интересная особенность языка, которой я хочу сейчас поделиться.
Представим ситуацию. Мы пишем функцию summ(), которая, как нетрудно догадаться из названия, считаем сумму элементов. Сколько входных аргументов ей определить? Можно два, а можно три, в зависимости от требований алгоритма. А если нужно посчитать сначала сумму двух, а потом трех? Две разные функции писать не хочется. Очевидное решение, которое приходит в голову — передать в качестве аргумента массив элементов.
читать далее «Упаковка и распаковка аргументов функции в Python» →
Наш любимый язык программирования Python является интерпретируемым. Это означает, что файл с кодом не нуждается в компиляции и сборке, а сам код исполняется последовательно с начала файла.
__name__ — это специальная внутренняя переменная, которая инициализируется, как ‘__main__’ если файл с исходным кодом был непосредственно запущен, а не импортирован. При импорте, переменная будет содержать имя модуля, из которого произошел импорт.
читать далее «Конструкция if __name__ == ‘__main__’: в Python» →
Всем привет! Продолжается погружение в увлекательный и местами запутанный мир криптографии. Шифр простой перестановки самый легкий из перестановочных, но даже его взлом занял у меня в два раза больше времени и сил, чем шифр Цезаря. Пришлось попотеть с выбором алгоритма криптоанализа. Сначала я пробовал частотный анализ биграмм, но для этого метода нужен очень большой литературный текст, иначе частоты никогда не совпадут с эталонными. Поэтому окончательный выбор пал на метод запрещенных биграмм. Я расскажу о нем подробнее, но сначала пара слов о самом шифре, поехали!
Прежде чем продолжить чтение, обратите внимание на реализации других шифров
Шифр простой перестановки
Определение перестановки(подстановки, расстановки) приводить не буду, о каком шифре может идти речь, если не знать базовых определений?
Шифр перестановки называется простым, если элементы открытого текста меняют свои позиции только один раз. Существуют шифры множественной перестановки, в которых первым делом меняются символы в каждом блоке, а потом, например, меняются местами сами блоки. Этих крутых ребят мы сейчас трогать не будем и заострим свое внимание исключительно на первой разновидности шифра.
Итак, суть. Дан ключ — перестановка длины N, не большей, чем длина открытого текста. Во время шифрования текст делится на блоки длины N и в каждом блоке символы меняются местами в соответствии с перестановкой. Расшифровка выполняется аналогично.
читать далее «Реализация и криптоанализ шифра простой перестановки» →
Доброго денечка или вечерочка всем, кто забрел на эту страничку. Знаете, я недавно исполнил свою давнюю мечту. Дело в том, что с тех пор, как количество папок в моей электронной библиотеке перевалило за десяточку, я начал задумываться о структурированном каталоге, в котором будут красиво перечислены все собранные мной сочинения. Чтобы можно было одним легким взглядом окинуть простор прочитанных или заброшенных книг.
Впервые я задумался об этом в десятом классе. Уже тогда я точно знал, что буду поступать на IT, поэтому логичная мысль пришла в голову: «давай, ты же программист!». На тот момент я умел писать Hello world в Си и решать некоторые задачки из ЕГЭ. Воодушевился и начал гуглить! Естественно, знаний совершенно недостаточно, ничего у меня не получилось, я бросил эту затею. В свое оправдание могу сказать, что работа с каталогами в Си совсем нетривиальна, особенно для десятиклассника, у которого в школе не было информатики.
И вот буквально пару дней назад я вновь заглянул в папочку «Library», дабы закачать что нибудь свеженькое на электронную книгу. И меня поразил гром среди ясного неба: «Я же умею питон! Наверняка в нем можно за пару строк описать любую директорию». Оказалось, что так и есть. Пять минут в поиске и я выбрал кандидата в мои помощники. Итак, встречайте!
Модуль os в Python
читать далее «Создание каталога электронной библиотеки с помощью Python» →
Доброго времени суток, дорогие читатели! Недавно вышла статья про реализацию шифра Цезаря и его взлом. В конце я пообещал, что буду реализовывать и другие шифры. И вот мой выбор пал на перестановочный шифр. Но появилась проблема, для взлома понадобился список запрещенных биграмм в английском языке. После упорного и безрезультатного поиска, я решил поступить, как настоящий программист и составить эту таблицу самостоятельно.
Идея такая: взять достаточно большой литературный текст на английском языке и вычленить из него все возможные биграммы, обязательно с пробелами. Сравнить их со списком всех биграмм языка и найти запрещенные, которые ни разу не встретились в литературном тексте. Для этой задачи я выбрал язык программирования Python, так как хотелось сделать быстро и не заморачиваться с эклипсом и прочими радостями компилируемых языков. Вот, что у меня получилось, поехали!
читать далее «Создание списка запрещенных биграмм английского языка» →