Главная страница
Навигация по странице:

  • ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ PYTHON .РЕАЛИЗАЦИЯ ШИФРА A 1 Z 26

  • 1 Основы Python и обзор среды программирования

  • 1.2 Преимущества и недостатки Python

  • 2 Практическое изучение языка Python

  • 2.1 Алгоритм k - means

  • 2.2 Алгоритм k _ NN

  • 2.3 Математическая статистика

  • Шифрование/дешифрование исходных данных

  • Приложение А (справочное)Листинг алгоритма k - means

  • Приложение Б (справочное)Листинг алгоритма k _ NN

  • Приложение В (справочное)Листинг Математическая статистика

  • Приложение Г (справочное)Листинг Шифра A 1 Z 26

  • Приложение Д (справочное)Библиографический список

  • отчет по практике. Отчет. Пояснительная записка Отчёт по дисциплине Учебная практика тпжа 090302. 024 Пз


    Скачать 0.76 Mb.
    НазваниеПояснительная записка Отчёт по дисциплине Учебная практика тпжа 090302. 024 Пз
    Анкоротчет по практике
    Дата31.05.2021
    Размер0.76 Mb.
    Формат файлаdocx
    Имя файлаОтчет.docx
    ТипПояснительная записка
    #212093

    МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ

    РОССИЙСКОЙ ФЕДЕРАЦИИ

    Федеральное государственное бюджетное образовательное

    учреждение высшего образования

    «ВЯТСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ»

    Институт математики и информационных систем

    Факультет автоматики и вычислительной техники

    Кафедра систем автоматизации управления

    ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ PYTHON.
    РЕАЛИЗАЦИЯ
    ШИФРА A1Z26

    Пояснительная записка
    Отчёт по дисциплине

    «Учебная практика»

    ТПЖА 090302.024 ПЗ

    Разработал студент гр. ИТб-1302-01-00 ___________/ Мотошков Д.А./

    (подпись)

    Руководитель работы ___________/ Родионов К.В./

    (подпись)

    Работа защищена с оценкой «______________» «__»__________2020 г.
    Киров 2020




    Утверждаю

    Зав. каф.

    САУ







    наименование







    Ланских Ю.В.

    подпись

    Ф.И.О.

    «

    06

    »

    июля

    20

    20

    г.



    ЗАДАНИЕ

    на практику

    по дисциплине

    Учебная практика
    полное название дисциплины


    Студенту

    Мотошкову Д.А.

    , обучающемуся по образовательной программе

    09.03.02 – Информационные системы и технологии

    полное название направления подготовки (специальности)

    первый
    очная

    курс обучения
    форма обучения


    Индивидуальные задания, выполняемые в период практики:

    1. Выполнить обучающие задания, приведённые в методических указаниях, для ознакомления с методами работы с языком Python.

    2. Реализовать криптографический алгоритм (Шифр A1Z26) при помощи языка Python, не используя библиотечные функции связанные непосредственно с шифрованием. Разработанная программа должна осуществлять шифрование и дешифрование текста в соответствии с вариантом. В приложении должна быть возможность ввода текста (вручную или загрузка из файла – на усмотрение разработчика), ключа (если этого требует алгоритм) и зашифрованного текста.




    1. Исходные данные:

    Язык программирования Python, шифр A1Z26




    2. Основные разделы:

    1. Обзор среды программирования Spyder и введение в Python

    1. Алгоритм k-means

    1. Алгоритм k-NN

    1. Шифр A1Z26

    3. График выполнения:

    Раздел №1 с 6.07.2020 по 07.07.2020

    Раздел №2 с 08.07.20 по 09.07.20

    Раздел №3 с 10.07.20 по 11.07.20

    Раздел №4 с 12.07.20 по 16.07.20

    Представить выполненную работу по практике на проверку не позднее:




    16.07.20







    Дата




    Руководитель работы










    Родионов К.В.




    06.07.20







    Подпись руководителя




    Ф.И.О. руководителя




    Дата

    Задание принял










    Мотошков Д.А.




    06.07.20







    Подпись обучающегося




    Ф.И.О. обучающегося




    Дата

    Реферат


    Мотошков Д.А. Программирование на языке Python: ТПЖА.090302.024 ПЗ: Учебная практика / ВятГУ, каф. САУ; рук. К.В. Родионов. – Киров, 2020. ПЗ 22 с., 5 рис., 2 источника, 5 прил.

    ПРОГРАММИРОВАНИЕ, PYTHON, ПЕРЕМЕННЫЕ, ФУНКЦИИ, ШИФРОВАНИЕ.

    Объект исследования и разработки – язык программирования Python.

    Цель работы – изучить среду программирования Python и разработать программу, осуществляющую шифрование и дешифрование текста.

    В соответствии с заданием и исходными данными было разработано приложение и описаны результаты полученной программы. Был реализован один из криптографических алгоритмов (шифр A1Z26) при помощи языка Python.

    Содержание



    Введение 3


    1 Обзор среды программирования и введение в Python 4

    1.1 Python 4

    1.2 Преимущества и недостатки Python 5

    2 Практическое изучение языка Python 8

    2.1 Алгоритм k-means 8

    2.2 Алгоритм k_NN 9

    2.3 Математическая статистика 9

    2.4 Шифр A1Z26 11

    Вывод 13

    Приложение А (справочное) Листинг реализации алгоритма k-means 14

    Приложение Б (справочное) Листинг реализации алгоритма k_NN 15

    Приложение В (справочное) Листинг Математическая статистика 17

    Приложение Г (справочное) Листинг реализации шифра A1Z26 20

    Приложение Д (справочное) Библиографический список 21

    Введение 5

    #run.py 17

    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.

    1.1 Python

    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-компаний.

    2.1 Алгоритм k-means

    Предположим, требуется сформировать две группы студентов (УТ-11 и УТ-12) для обучения на специальности. Известны оценки абитуриентов за тесты по физике и математике. Требуется реализовать алгоритм k-means, с помощью которого выделить два кластера, описывающих формируемые группы студентов.

    Алгоритм k-means:

    1. Задается количество кластеров k, которые требуется обнаружить.

    2. Центры кластеров изначально инициализируются случайным образом.

    3. Каждый из объектов приписывается к ближайшему кластеру.

    4. На основании объектов, вошедших в каждый кластер, центры кластеров пересчитываются.

    5. Шаги 3 и 4 повторяются до тех пор, пока центры кластеров не стабилизируются, то есть на очередной итерации объекты будут принадлежать тем же кластерам, что и до этого.

    Листинг программы представлен в приложении А.

    Результат работы программы предоставлен на рисунке 1.


    Рисунок 1– решение первого задания
    2.2 Алгоритм k_NN

    В задании по введенным данным роста и веса определить к какому виду относится особь. Каждый вид характеризуется определенным средним значением роста и веса.

    В основе kNN лежит следующее правило: объект считается принадлежащим тому классу, к которому относится большинство его ближайших соседей. Под «соседями» здесь понимаются объекты, близкие к исследуемому в том или ином смысле. Для применения метода kNN в пространстве признаков объектов должна быть введена некоторая функция расстояния. Работа программы – классификация особей с помощью реализованного алгоритма предоставлена на рисунке 2.


    Рисунок 2 – решение второго задания




    Листинг программы представлен в приложении Б.


    2.3 Математическая статистика

    В задании нужно выполнить несколько заданий представленных ниже:

    1) Создать в Python переменную, массив, матрицу с заданными, случайными целочисленными, нулевыми, единичными значениями.

    2) Импортировать переменную (матрицу) из текстового структурированного файла (файл создать вручную: разделители столбцов – пробелы).

    3) Загрузить одномерные данные из каталога data/1D из файла с расширением .mat согласно варианту. Оценить параметры одномерной случайной величины. Команды сохранить в скрипт.

    4) Вывести графики одномерных случайных величин и их плотности распределения. Команды сохранить в скрипт. Подобрать вид распределения одномерной случайной величины и его параметры. На одном графике отобразить случайную величину, уровень среднего значения и дисперсию.

    5) Построить и вывести на графике автокорреляцию заданной одномерной случайной величины. Команды сохранить в скрипт.

    6) Импортировать из каталога data/NDфайл *.mat с многомерными данными согласно варианта. Первые 5 столбцов считать входными значениями, последний 6 столбец – выходная величина, для которой требуется установить зависимость от входных величин.

    7) Построить матрицу корреляции для всех входных и выходных величин. Сделать выводы о зависимости/независимости выходной величины от каждой из входных компонент. Отобразить точечный график для случайных величин, коэффициент корреляции для которых по модулю больше 0.8.

    На рисунке 3 представлены графики, которые были получены по окончанию выполнения задания, а на рисунке 4 представлен результат работы программы.

    Листинг программы представлен в приложении В.

    Рисунок 3 – Графики, полученные в ходе работы


    Рисунок 4 – Результат работы программы



    2.4 Шифр A1Z26

    Задание: Реализовать криптографический алгоритм (Шифр A1Z26) при помощи языка Python, не используя библиотечные функции связанные непосредственно с шифрованием. Разработанная программа должна осуществлять шифрование и дешифрование текста в соответствии с вариантом. В приложении должна быть возможность ввода текста (вручную или загрузка из файла – на усмотрение разработчика), ключа (если этого требует алгоритм) и зашифрованного текста.

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

    Шифрование/дешифрование исходных данных

    Алгоритм шифрования: каждая буква заменяется своим порядковым номером в алфавите.

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

    Листинг индивидуального задания представлен в приложении Г.

    Номера букв латинского алфавита представлены на рисунке 5.




    Рисунок 5 – Нумерация латинского алфавита


    Вывод

    Данная практическая работа сыграла огромную роль в приобретении практических навыков. В ходе выполнения практики был изучен такой язык программирования, как Python. Он оказался прост в применении и понимание, что облегчило выполнение практической работы. Также были закреплены все полученные теоретические знания по изученной дисциплине, что пригодится в дальнейшем.

    В ходе летней учебной практики были выполнены следующие задачи:

    1) Ознакомление со средой разработки.

    2) Изучение базовых возможностей языка программирования Python.

    3) Изучение алгоритмов k-means, k_NN, основные программные свойства и методы Математической статистики.

    4) Разработка криптографического алгоритма шифрования.

    5) Повторение основ оформления научно-исследовательских работ в соответствии с СТП ВятГУ 101-2004 [2].

    Приложение А

    (справочное)

    Листинг алгоритма k-means

    # k_means.py

    import numpy as np

    def dist(A, B):

    V = A - B

    V2 = np.power(V, 2)

    r = np.sqrt(np.sum(V2))

    return r

    def class_of_each_point(X, centers):

    m = len(X)

    k = len(centers)

    distances = np.zeros((m, k))

    for i in range(m):

    for j in range(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))

    centers = centers * (np.max(X, axis=0) - np.min(X, axis=0)) +
    + np.min(X, axis=0)

    curr_iteration = class_of_each_point(X, centers)
    while True:

    prev_iteration = curr_iteration

    for i in range(k):

    sub_X = X[curr_iteration == i, :]

    if len(sub_X) > 0:

    centers[i, :] = np.mean(sub_X, axis=0)

    curr_iteration = class_of_each_point(X, centers)

    if np.all(prev_iteration == curr_iteration):

    break
    return centers

    #run.py

    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()





    Приложение Б

    (справочное)

    Листинг алгоритма k_NN
    # kNN.py
    import numpy as np

    import math
    def k_nearest(X, k, obj):
    Xn = X[:, 0:-1]

    Xnstd = np.std(Xn,axis=0)

    Xn = (Xn-Xnmean)/Xnstd

    objn = (obj-Xnmean)/Xnstd

    dist_arr =[dist(x, objn) for x in Xn]

    dist_arr =np.argsort(dist_arr)

    nearest_classes = X[dist_arr[:k], -1]

    unique, counts = np.unique(nearest_classes, return_counts=True)

    object_class = unique[np.argmax(counts)]
    return object_class

    def dist(p1, p2):

    return math.sqrt(sum((p1 - p2)**2))

    # run.py
    import numpy as np
    from kNN import k_nearest
    X = np.array([
    [33, 21, 1],
    [43, 13, 1],
    [18, 22, 1],
    [38, 34, 1],
    [62, 118, 2],
    [59, 137, 2],
    [95, 131, 2],
    [83, 110, 2],
    [185, 155, 3],
    [193, 129, 3],
    [164, 135, 3],
    [205, 131, 3],
    [145, 55, 4],
    [168, 35, 4],
    [135, 47, 4],
    [138, 66, 4]
    ])

    height = int(input("Введите рост:"))
    weight = int(input("Введите вес:"))

    obj = np.array([height, weight])

    k = 3
    object_class = k_nearest(X, k, obj)

    monkeys = {1: 'lemur', 2: 'schimpanze', 3: 'gorilla', 4: 'orangutan'}
    print(monkeys[object_class])



    Приложение В

    (справочное)

    Листинг Математическая статистика
    #script.py
    import numpy as np

    import matplotlib.pyplot as plt

    import scipy.io

    import pprint

    def task_1():

    a = 10

    print(a)

    b = [1, 2, 3]

    print(b)

    c = np.array([[1, 2, 3], [4, 5, 6]])

    print(c)

    d = np.random.randint(2, 6, (5, 5))

    print(d)

    e = np.zeros((2, 2))

    print(e)

    f = np.ones((2, 3))

    print(f)
    def task_2():



    array = np.loadtxt('C:/Users/m0t0s/test.txt', dtype=np.int32)

    pprint.pprint(array)
    def task_3():

    data=scipy.io.loadmat
    ('C:/Users/m0t0s/Practice_Day_Three_Edition/data/1D/var5.mat')

    data = data['n']

    print(np.max(data))

    print(np.min(data))

    print(np.median(data))

    print(np.mean(data))

    print(np.var(data))

    print(np.std(data))
    return data
    def task_4(data):

    plt.plot(data)

    plt.show()

    mean = np.mean(data) * np.ones(len(data))

    var = np.var(data) * np.ones(len(data))

    plt.plot(data, 'b-', mean, 'r-', mean-var, 'g--', mean+var, 'g--')

    plt.grid()

    plt.show()

    plt.hist(data, bins=20)

    plt.grid()

    plt.show()
    def autocorrelate(a):

    n = len(a)

    cor = []

    for i in range(n//2, n//2+n):

    a1 = a[:i+1] if i< n else a[i-n+1:]

    a2 = a[n-i-1:] if i< n else a[:2*n-i-1]

    cor.append(np.corrcoef(a1, a2)[0, 1])

    return(cor)
    def task_5(data):

    print(data.shape)

    data = np.ravel(data)

    print(data.shape) # (1000, )

    cor = autocorrelate(data)

    plt.plot(cor)

    plt.show()

    def task_67():

    data = scipy.io.loadmat

    ('C:/Users/m0t0s/Practice_Day_Three_Edition/data/ND/var3.mat')

    data = data['mn']

    n = data.shape[1]

    corr_matrix = np.zeros((n,n))

    for i in range(n):

    for j in range(n):

    column1 = data[:,i]

    column2 = data[:,j]

    corr_matrix[i, j] = np.corrcoef(column1, column2)[0, 1]

    np.set_printoptions(precision=2)

    print(corr_matrix)

    plt.plot(data[:, 2], data[:, 5], 'b.')

    plt.grid()

    plt.show()

    if __name__ == '__main__':

    print('Задание #1')

    task_1()

    print('Задание #2')

    task_2()

    print('Задание #3')

    data = task_3()

    print('Задание #4')

    task_4(data)

    print('Задание #5')

    task_5(data)

    print('Задание #6 и #7')

    task_67()
    Приложение Г

    (справочное)

    Листинг Шифра A1Z26

    def A1Z26_code(codestring):
    rezult = ""
    codestring = codestring.lower()
    codestring = "".join(codestring.split())
    for x in range(0, len(codestring)):
    char = ord(codestring[x]) - 96
    if char > 0 and char <= 26: rezult += str(char) + " "
    return rezult


    def A1Z26_decode(decodestring):

    rezult = ""
    data = decodestring.split()

    for char in data:
    char = chr(int(char) + 96)
    rezult += char
    return rezult


    select= input("Введите 0 если хотите зашифровать или 1 для расшифровки:")

    if select == '0':
    codestring = input("Введите текст на английском, цифры и пробелы будут проигнорированы:")
    print("Результат шифрования:")
    print(A1Z26_code(codestring))
    if select == '1':
    decodestring = input("Введите зашифрованную фразу разделяя цифры пробелами:")
    print("Результат расшифровки:")
    print(A1Z26_decode(decodestring))
    Приложение Д

    (справочное)

    Библиографический список
    1) Доля П.Г. Введение в научный Phyton [Текст]: учебное пособие/П.Г. Доля – Харьков: Харьковский Национальный Университет, 2016. – 43с.

    2) СТП ВятГУ 101-2004 Общие требования к оформлению текстовых документов// Киров: ВятГУ, 2004.



    написать администратору сайта