Разработал студент гр. ИТб-1302-01-00 ___________/ Мотошков Д.А./
Руководитель работы ___________/ Родионов К.В./
Работа защищена с оценкой «______________» «__»__________2020 г. Киров 2020
Утверждаю
Зав. каф.
САУ
Ланских Ю.В.
подпись
Ф.И.О.
«
06
»
июля
20
20
г.
Учебная практика полное название дисциплины
, обучающемуся по образовательной программе
09.03.02 – Информационные системы и технологии
полное название направления подготовки (специальности)
курс обучения форма обучения
Индивидуальные задания, выполняемые в период практики:
1. Выполнить обучающие задания, приведённые в методических указаниях, для ознакомления с методами работы с языком Python.
2. Реализовать криптографический алгоритм (Шифр A1Z26) при помощи языка Python, не используя библиотечные функции связанные непосредственно с шифрованием. Разработанная программа должна осуществлять шифрование и дешифрование текста в соответствии с вариантом. В приложении должна быть возможность ввода текста (вручную или загрузка из файла – на усмотрение разработчика), ключа (если этого требует алгоритм) и зашифрованного текста.
1. Исходные данные:
Язык программирования Python, шифр A1Z26
Руководитель работы
Подпись руководителя
Дата
Задание принял
Подпись обучающегося
Реферат
Мотошков Д.А. Программирование на языке Python: ТПЖА.090302.024 ПЗ: Учебная практика / ВятГУ, каф. САУ; рук. К.В. Родионов. – Киров, 2020. ПЗ 22 с., 5 рис., 2 источника, 5 прил.
Объект исследования и разработки – язык программирования Python.
Цель работы – изучить среду программирования Python и разработать программу, осуществляющую шифрование и дешифрование текста.
В соответствии с заданием и исходными данными было разработано приложение и описаны результаты полученной программы. Был реализован один из криптографических алгоритмов (шифр A1Z26) при помощи языка Python.
Содержание
Введение 3
1 Обзор среды программирования и введение в Python 4
1.2 Преимущества и недостатки Python 5
2 Практическое изучение языка Python 8
2.1 Алгоритм k-means 8
2.2 Алгоритм k_NN 9
2.3 Математическая статистика 9
Приложение А (справочное) Листинг реализации алгоритма k-means 14
Приложение Б (справочное) Листинг реализации алгоритма k_NN 15
Приложение В (справочное) Листинг Математическая статистика 17
Приложение Г (справочное) Листинг реализации шифра A1Z26 20
Приложение Д (справочное) Библиографический список 21
import numpy as np import matplotlib.pyplot as plt from k_means import kmeans X = np.array([ [4, 4], [3, 3], [5, 3], [2, 3], [5, 5], [3, 2], [2, 4], [4, 5], [5, 4], [2, 2]]) m, n= X.shape ans = kmeans(2, X) print(ans) plt.plot(X[:,0], X[:,1], ‘bx’, ans[:,0], ans[:,1], ‘r*’, markersize=20) plt.grid() plt.show() 17
Введение
Учебная практика дает студентам получить новые практические и теоретические знания, которые могут помочь в дальнейшем учебном процессе.
На этой практике будет изучен язык программирования Python, ориентированный на повышение производительности разработчика и читаемости кода.
Целью учебной практики является изучение основ языка программирования Python путем разработки приложений и реализации криптографического алгоритма.
Python – высокоуровневый язык программирования, используемый в различных сферах IT для разработки приложений самого разнообразного назначения. 1 Основы Python и обзор среды программирования
Различные языки программирования обычно доминируют в какой-то отрасли, для работы в которой они хорошо подходят. Но это не значит, что программист ограничен использовать строго определённый инструмент, поэтому любой язык общего назначения, такой как Python, может применять для создания чего-угодно.
Но данный язык имеет несколько различных сред разработки, например PyCharm, PyDev, Geany и Spyder.
Python – современный язык программирования высокого уровня. Он представляет собой интерпретируемый объектно-ориентированный язык и интерактивную среду для разработки программ. С его помощью можно разрабатывать приложения с графическим интерфейсом, работать с базами данных, создавать Web-сайты. Python может использоваться для написания прикладных приложений, машинного обучения и многого другого.
Язык программирования Python обладает ясным и понятным синтаксисом и хорош для программирования математических вычислений. Python реализован практически во всех операционных системах и большинство его модулей распространяется бесплатно.
Python начал разрабатываться во второй половине 80-х гг. прошлого века. Автором Питона стал программист из Нидерландов по имени Гвидо ван Россум. Изначально язык должен был стать объектно-ориентированным. Фактически, это был язык сценариев (скриптовый язык). В феврале 1991 года Россум опубликовал исходный код языка в одной из новостных групп.
Основными факторами успеха Python стали удачный выбор места презентации в популярном и массовом профессиональном сообществе в сочетании с действительно простым кодом и широкими возможностями.
Впоследствии Гвидо создал специализированный портал PEP, где идет регулярное обсуждение по развитию и улучшению продукта. В 2008 года появилось большое обновление языка – Python 3.0. В этой версии были устранены многие ключевые недоработки в архитектуре ядра. Что было важно – новая версия продукта сохранила полную совместимость с более старыми вариантами.
Описания типов переменных в Python нет. Это означает, что при присваивании переменной значения интерпретатор автоматически относит переменную к одному из типов данных.
Python содержит такие структуры данных как:
1) Список (list) – похожи на одномерные массивы (список, включающий списки – многомерный массив).
2) Кортеж (tuple) – неизменяемый список.
3) «Массивы» в Python могут содержать данные любого типа, то есть в одном массиве может могут находиться числовые, строковые и другие типы данных [1].
1.2 Преимущества и недостаткиPython
Рассмотрим преимущества и недостатки языка программирования Python:
1) В Python не надо заранее объявлять тип переменной, что очень удобно при разработке
2) Хорошая поддержка модульности. Вы можете легко написать свой модуль и использовать его в других программах.
3) Встроенная поддержка Unicode в строках. В Python необязательно писать всё на английском языке, в программах вполне может использоваться ваш родной язык.
4) Поддержка объектно-ориентированного программирования. При этом его реализация в Python является одной из самых понятных.
5) Автоматическая сборка мусора, отсутствие утечек памяти.
6) Интеграция с C/C++, если возможностей Python недостаточно.
7) Понятный синтаксис, способствующий ясному отображению кода. Система функций позволяет создавать код, в котором будет легко разобраться другому человеку в случае необходимости. Также вы сможете научиться читать программы и модули, написанные другими людьми.
8) Огромное количество модулей Python3. В некоторых случаях для написания программы достаточно найти подходящие модули и правильно их скомбинировать. Таким образом, можно работать с уже готовыми элементами, выполняющими различные действия.
2 Практическое изучение языка Python
Язык Python на сегодняшний день считается самым универсальным языком программирования. Используя Python, можно программировать почти все. На нём активно программирует большинство IT-компаний.
Предположим, требуется сформировать две группы студентов (УТ-11 и УТ-12) для обучения на специальности. Известны оценки абитуриентов за тесты по физике и математике. Требуется реализовать алгоритм k-means, с помощью которого выделить два кластера, описывающих формируемые группы студентов.
Алгоритм k-means:
2. Центры кластеров изначально инициализируются случайным образом.
3. Каждый из объектов приписывается к ближайшему кластеру.
4. На основании объектов, вошедших в каждый кластер, центры кластеров пересчитываются.
5. Шаги 3 и 4 повторяются до тех пор, пока центры кластеров не стабилизируются, то есть на очередной итерации объекты будут принадлежать тем же кластерам, что и до этого.
Листинг программы представлен в приложении А.
Результат работы программы предоставлен на рисунке 1.
Рисунок 1– решение первого задания 2.2 Алгоритмk_NN
В задании по введенным данным роста и веса определить к какому виду относится особь. Каждый вид характеризуется определенным средним значением роста и веса.
В основе kNN лежит следующее правило: объект считается принадлежащим тому классу, к которому относится большинство его ближайших соседей. Под «соседями» здесь понимаются объекты, близкие к исследуемому в том или ином смысле. Для применения метода kNN в пространстве признаков объектов должна быть введена некоторая функция расстояния. Работа программы – классификация особей с помощью реализованного алгоритма предоставлена на рисунке 2.
Рисунок 2 – решение второго задания
Листинг программы представлен в приложении Б.
2.3 Математическая статистика
В задании нужно выполнить несколько заданий представленных ниже:
1) Создать в Python переменную, массив, матрицу с заданными, случайными целочисленными, нулевыми, единичными значениями.
2) Импортировать переменную (матрицу) из текстового структурированного файла (файл создать вручную: разделители столбцов – пробелы).
4) Вывести графики одномерных случайных величин и их плотности распределения. Команды сохранить в скрипт. Подобрать вид распределения одномерной случайной величины и его параметры. На одном графике отобразить случайную величину, уровень среднего значения и дисперсию.
5) Построить и вывести на графике автокорреляцию заданной одномерной случайной величины. Команды сохранить в скрипт.
6) Импортировать из каталога data/NDфайл *.mat с многомерными данными согласно варианта. Первые 5 столбцов считать входными значениями, последний 6 столбец – выходная величина, для которой требуется установить зависимость от входных величин.
7) Построить матрицу корреляции для всех входных и выходных величин. Сделать выводы о зависимости/независимости выходной величины от каждой из входных компонент. Отобразить точечный график для случайных величин, коэффициент корреляции для которых по модулю больше 0.8.
На рисунке 3 представлены графики, которые были получены по окончанию выполнения задания, а на рисунке 4 представлен результат работы программы.
Листинг программы представлен в приложении В.
Рисунок 3 – Графики, полученные в ходе работы
Рисунок 4 – Результат работы программы
Задание: Реализовать криптографический алгоритм (Шифр A1Z26) при помощи языка Python, не используя библиотечные функции связанные непосредственно с шифрованием. Разработанная программа должна осуществлять шифрование и дешифрование текста в соответствии с вариантом. В приложении должна быть возможность ввода текста (вручную или загрузка из файла – на усмотрение разработчика), ключа (если этого требует алгоритм) и зашифрованного текста.
Шифр подстановки— это метод шифрования, в котором элементы исходного открытого текста заменяются зашифрованным текстом в соответствии с некоторым правилом. Элементами текста могут быть отдельные символы (самый распространённый случай), пары букв, тройки букв, комбинирование этих случаев и так далее.
Шифрование/дешифрование исходных данных
Алгоритм шифрования: каждая буква заменяется своим порядковым номером в алфавите.
Процесс расшифрования: нужно прописывать цифры таким образом, чтобы они были отделены друг от друга чертой, дефисом или пробелом, главное, чтобы не были слитные цифры.
Листинг индивидуального задания представлен в приложении Г.
Номера букв латинского алфавита представлены на рисунке 5.
Рисунок 5 – Нумерация латинского алфавита
Вывод
Данная практическая работа сыграла огромную роль в приобретении практических навыков. В ходе выполнения практики был изучен такой язык программирования, как Python. Он оказался прост в применении и понимание, что облегчило выполнение практической работы. Также были закреплены все полученные теоретические знания по изученной дисциплине, что пригодится в дальнейшем.
В ходе летней учебной практики были выполнены следующие задачи:
1) Ознакомление со средой разработки.
2) Изучение базовых возможностей языка программирования Python.
3) Изучение алгоритмов k-means, k_NN, основные программные свойства и методы Математической статистики.
4) Разработка криптографического алгоритма шифрования.
5) Повторение основ оформления научно-исследовательских работ в соответствии с СТП ВятГУ 101-2004 [2].
import numpy as np
def class_of_each_point(X, centers):
distances = np.zeros((m, k))
distances[i, j] = dist(centers[j], X[i])
return np.argmin(distances, axis=1) def kmeans(k, X): m, n = X.shape curr_iteration = prev_iteration = np.zeros(m) centers = np.random.random((k, n))
curr_iteration = class_of_each_point(X, centers) while True:
sub_X = X[curr_iteration == i, :]
centers[i, :] = np.mean(sub_X, axis=0)
curr_iteration = class_of_each_point(X, centers)
if np.all(prev_iteration == curr_iteration):
# run.py
import numpy as np import matplotlib.pyplot as plt from k_means import kmeans
m, n= X.shape ans = kmeans(2, X) print(ans) plt.plot(X[:,0], X[:,1], ‘bx’, ans[:,0], ans[:,1], ‘r*’, markersize=20) plt.grid() plt.show()
Листинг алгоритмаk_NN # kNN.py import numpy as np
import math def k_nearest(X, k, obj): Xn = X[:, 0:-1]
Библиографический список 1) Доля П.Г. Введение в научный Phyton [Текст]: учебное пособие/П.Г. Доля – Харьков: Харьковский Национальный Университет, 2016. – 43с.
2) СТП ВятГУ 101-2004 Общие требования к оформлению текстовых документов// Киров: ВятГУ, 2004.
Несколько полезных советов как практиковаться в Python
Привет, Хабр! Сегодня я предлагаю Вам перевод статьи Duomly, посвящённой изучению и практике программирования на языке Python.
Введение
Изучение Python не сильно отличается от изучения других языков программирования. Один путь для становления профессионалом в Python (или в другом любом языке) в основном зависит от имеющегося опыта и знаний. Это означает, что опытные программисты уже знакомы с основными концепциями программирования, обычные используют разные методы решения задач, когда как новички — нет.
Не смотря ни на что, имеется несколько вещей общих для всех, одна из них — Вам нужно практиковаться, очень много практиковаться!
К счастью, Python имеет широкое, дружелюбное и сообщённое друг с другом сообщество. Это Open-Source проекты которые действительно помогают в разработке.
Имеется много хороших советов о том, как практиковаться Python`у. Эта статья затронет всего 10 из них:
Выберете подходящее окружение
Для начала Вам следует использовать обычный Python 3 и пакетный менеджер, на операционной системе которую Вы используете. Windows, Mac OS, или любой дистрибутив Linux подойдёт для этого. (Даже Android с QPython, хотя возможности ограничены по сравнению с оригинальным Python). Позже Вы можете установить Anaconda на Windows, Mac OS или Linux. Он содержит интерпретатор Python, пакет Conda, зависимости и пакетный менеджер. С помощью него Вы сможете найти много сторонних библиотек которые могут показаться Вам полезными.
Вы должны выбрать нужную IDE (интегрированная среда разработка). Большинство популярных IDE, таких как Visual Studio, VSCode, Emacs, Vim, Sublime Text и др. имеют действительно хорошую поддержку для Python. Если Вам нравятся продукты от JetBrains, Вы можете попробовать использовать PyCharm. Также в пакет дистрибуции Anaconda включён IDE под названием Spyder.
IPython и Jupyter Notebook хорошие инструменты которые предлагают удобную интерактивную функциональность. Также, имеется интерактивный интерпретатор Python, но Вы можете найти его более полезным для проверки простых кусочков кода, чем написания больших программ.
Также Вы можете посмотреть эту статью чтобы узнать больше о IDE для Python. Помимо всего прочего, хорошей идеей будет установить и настроить линтеры для Python (Pylint, flake8 и прочие). Они являются маленькими пакетами которые просто подсвечивают проблемы Вашего кода (синтаксические, или связанные с несоблюдением стиля программирования на Python — PEP8).
Удостоверьтесь, что Вы имеете достаточную базу для изучения более сложных вещей
Если Вы хотите обучаться любому языку программирования, Вам нужно изучить хорошо изучить основы, поверх которых Вы будете строить Вашу карьеру в этом языке. Это означает, что Вам нужно по крайней мере знать: основной синтаксис языка, понимать основные концепты программирования, быть знакомыми со стандартными типами и структурами данных и так далее.
Вам следует найти нужную книгу для Вашего уровня о Python. Duomly предлагает туториал по Python, который Вы можете использовать для изучения этих концептов и даже большего. Также Вы можете начать с туториала на официальном сайте.
Пишите и улучшайте код
Написание большого количества кода для себя, является неотъемлимой частью изучения языков программирования. Начните с кода из книг и туториалов. Затем попробуйте модифицировать его, например упростить, или более подходящим для каких-либо целей. После этого, попробуйте написать свои маленькие, но полезные программы. Но главное, запомните одну из самых важных вещей о программирования: оно не о набирании кода, оно о понимании!
Вы будете делать ошибки. Все программисты их делают. И это вообще не плохо. Самое важное в этом — узнать, что пошло не так и конечно же, не повторять эти ошибки в будущем. Каждый раз, когда Вы получаете и исправляете ошибку, Вы становитесь немного лучшим программистом, чем Вы были раньше. Иногда, важно вернуться назад к старому коду и попробовать улучшить его. Надеюсь, Вы увидете где Вы стали более лучше чем тогда, когда писали этот код.
Подумайте о проблемах, которые Вы хотели бы решить. В идеале, это те вопросы, которыми Вы увлечены. Эмоциональное вложение обычно улучшает результаты. Начните Ваши маленькие и средние проекты и пробуйте работать над их улучшением как можно чаще. Как только Вы изучите что-то новое, спросите себя, как Вы можете применить это к проблеме, которую вы хотите решить.
Читайте документацию
Документация очень важна в Python. Вам следует сделать привычкой читать её часто. Идеально будет, перед тем как использовать какую-либо существующую функцию, или метод, прочитать документацию о ней.
Документация может содержать больше деталей в некоторых моментах.
Вы можете изучить много нового из документации. Вы можете увидеть как использовать функцию, метод или класс, какие аргументы нужно передавать, что вернёт вызов функции, и так далее. Она также часто содержит связанные примеры, которые могут быть более информативны, а иногда поучительны.
Изучайте более сложные вещи после основ
Однажды, когда Вы будете понимать основы, Вы сможете начать изучать более сложные вещи. Не беспокойтесь, Вы не забудете основы. Они понадобятся Вам всегда.
Такие темы как обработка исключений, распаковка и упаковка аргументов, *args и **kwargs, декораторы, модули и пакеты, ООП и генераторы, часто используются и Вы должны знать и понимать их на хорошем уровне. Также имеется много продвинутых тем которые нужно изучить. Например магические методы, корутины, асинхронное программирование, многопоточность, мультипроцессность, тестирование и так далее. Это не то, что понадобится Вам в начале. Так, Вы можете начать с чего-то более простого и полезного. Например, Вам нужно мощное средство для манипуляции со строками, Вы можете попробовать регулярные выражение. Если вы работаете над научным проектом, вероятно, Вы найдёте многопроцессность интересной для Вас.
Следите за стандартами, советами и трюками в языке Python
Имеется много специфичных вещей в программировании конкретно для языка Python, которые являются не самой простой задачей для изучения. Повезло, что есть много ресурсов, которые охватывают многие из этих тем.
Официальная документация Python содержит много информации. PEP 20, так же названый Дзеном Python, написанный Тимом Петерсом, обозначает главные принципы Python:
PEP 8, или руководство по написанию кода от Гвидо Ван Россума, B. Warsaw. Также PEP 257, который обозначает соглашения для строк документации.
Анализируйте исходный код
Python — open-source`ный язык программирования, также как большинство популярных билиотек. Это значит, что Вы можете читать исходный код. Это часто возможно на Github, но есть и другие места где Вы можете это сделать. Чтение и понимание кода библиотеки позволяет более лучше понимать, как она работает.
В дополнение, Вы можете изучать многое анализируя исходный код других (надеюсь хороших) программистов. Вы можете заимствовать идеи, смотреть на разные пути реализации, изучать новые паттерны, и так далее.
Интересуйтесь библиотеками
Python имеет множество полезных библиотек для разных задач: регулярные выражения, математика, статистика, генерация случайных чисел, тестирование, итерирование, функциональное программирование, многопоточность и многопроцессность, абстрактные классы и многое другое.
Также имеются некоторые действительно полезные сторонние библиотеки для множества разных научных задач. Очевидно, Вы не можете изучить как использовать их все, но Вы можете сфокусироваться на нескольких из них, которые кажутся Вам более интересными для Вашей специализации.
Если Вы хотите быть дата сайентистом или заниматься Machine Learning, Вам нужно начать с NumPy, который является основопологающей библиотекой, для манипуляции одно- и много-мерными массивами эффективным и простым путём. Он быстр и включает множество операций с массивами, без явного написания циклов for из Python.
Все эти библиотеки имеют превосходную документацию.
Если Вы хотите заниматься web-программированием, Вы можете изучить и попрактиковаться работать с некоторыми Python фреймворками для бэкенда. Самый популярный из них — Django, имеет большинство нужных возможностей. Это очень удобно для больших веб приложений. С другой стороны — Flask — мощный, гибкий микро-фреймворк с большим количеством дополнений. Django и Flask самые популярные Python веб-фреймворки.
Также Python имеет другие веб-фреймворки, например Pyramid, Bottle, Tornado и так далее.
SQLAlchemy — это пакет которые включает возможность работы с БД в объекто ориентированном стиле. Он часто используется в веб-фреймворках, но также в Data Science.
Станьте частью сообщества
Как уже было сказано, Python имеет большое и дружное сообщество. Вы можете стать его частью. Читайте публикации, комментируйте, спрашивайте, ищите объяснения.
Когда Вы будете иметь достаточный уровень знаний, Вы сможете начать вкладывать свои знания в open-source проекты, или помогать тем, кто пишет статьи или туториалы. Эти вещи очень ценятся сообществом и большинством потенциальных работадателей.
Изучите второй язык программирования
Python это мультипарадигмальный язык программирование, и во многих ситуациях, его хватает. Но не смотря ни на что, всегда нужно искать преимущества в изучении других языков. С помощью этого, Вы можете улучшить свои знания в программировании в целом, парадигмах и расширить свой кругозор. Когда Вы изучите один язык, изучение других будет проще. Большинство хороших программистов знают несколько языков.
Если Вы хотите быть веб-программистом, Вам вероятно нужно будет изучить JavaScript. Изучение C хорошо для лучшего понимания базовых концептов программирования, но Вы можете также писать на нём очень быстрые функции для Python. Rust это новый и очень классный язык, который уже имеет хорошую интеграцию с Python
Примеры проектов для практики
Имеется много маленьких проектов, которые Вы можете использовать для изучения Python. Например, попробуйте автоматизировать скучные задачи. Изучение строк, регулярных выражение, и даже библиотеки для шаблонов Jinja, может помочь Вам писать более эффективный код.
Официальный веб-сайт Flask содержит замечательную документацию и туториал, который Вы можете использовать для его изучения.
Doumly Machine Learning туториал имеет инструкции как Вы можете практиковаться в Data Science и machine learning.
Заключение
Вы прочитали несколько советов о том, как практиковаться Python. Надеюсь, они помогут Вам стать Python программистом. Запомните, что нужно много программировать, писать интересные программы, пытаться учиться на ошибках, и конечно же, стать частью сообщества.