Вы находитесь на странице: 1из 30

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

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


высшего образования
«Уральский государственный экономический университет»

КУРСОВАЯ РАБОТА
по дисциплине «Основы компьютерных и информационных наук»

Тема: Программное обеспечение на языке Python

Институт/Факультет/Департамент/ Студент
Центр Батыров Всеволод Олегович
(ФИО)
Институт менеджмента и
информационных технологий
Группа ПИЭ-18-1
Направление
Прикладная информатика Руководитель
Кислицын Е.В., ст. преподаватель
кафедры СЭиИУрГЭУ
(ФИО, должность, звание)

Профиль/программа
Прикладная информатика в
экономике

Кафедра
Кафедра информационных
Технологий и статистики

Дата защиты: ___________________

Екатеринбург
2018 г.
СОДЕРЖАНИЕ

Введение 3

1 Теория 5

1.1 Программное обеспечение 5

1.2 Язык программирования Python 6

1.2 Что из себя представляет программа 7

1.2 Исследования 7

1.3 Недостатки 8

2 Создание приложения на языке Python 9

2.1 Выбор среды реализации программы 9

2.2 Функциональность программы 10

2.3 Алгоритм программы 10

2.4 Интерфейс программы 21

2.5 Характеристика программы 26

Заключение 27

Список использованных источников 29


ВВЕДЕНИЕ

Python — высокоуровневый язык программирования общего назначения,


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

Плюсы:

- Язык активно развивается в настоящее время

- Язык очень гибкий и обладает простым синтаксисом

- Большое количество библиотек

- Наличие подробной документации на разных языках мира

- Код на языке Python легко читаем, вследствие обязательной табуляции. Из


этого вытекает и хорошая сопровождаемость кода.

- Имеет встроенный компилятор, что позволяет сразу же проверить код на


наличие ошибок

Минусы:

- Низкая скорость работы программ

- Слишком универсален и не обладает каким-либо отдельным направлением

3
Актуальность темы

В наше время язык Python используется огромным количеством


программистов. Python является языком общего назначения. Это значит то, что
он может применяться в абсолютно любой сфере разработки программного
обеспечения. Так, например, сложные математические системы можно
создавать с помощью модуля NumPy, веб-приложения с помощью Django,
графические интерфейсы с помощью Tkinter или Kivy, игры с помощью
PyGame и так далее.

Целью выполнения курсовой работы является расширение и углубление знаний


и навыков программирования на языке Python.

Цели исследования:

1. Ознакомиться с языком программирования Python

2. Освоить базовые знания Adobe Photoshop, для дальнейшего создания дизайна


программы

3. Ознакомиться с Фреймворком Kivy и языком разметки Kivy Language, с


помощью него мы сделаем GUI

3. Создание самой программы

В процессе выполнения курсовой работы будет создано программное


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

4
1 ТЕОРИЯ

1.1 ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ

Программное обеспечение (ПО) — программа или множество программ,


созданных для управления компьютером.

Другие определения (по разным мировым стандартам):

совокупность программ системы обработки информации и программных


документов, необходимых для эксплуатации этих программ (ГОСТ 1981-90);
все или часть программ, процедур, правил и соответствующей документации
системы обработки информации (ISO/IEC 2382-1:1993);
компьютерные программы, процедуры и, возможно, соответствующая
документация и данные, относящиеся к функционированию компьютерной
системы (IEEE Std 829—2008).

Программное обеспечение, наряду с техническим (аппаратным),


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

5
1.2 ЯЗЫК ПРОГРАММИРОВАНИЯ PYTHON

Python - интерпретируемый язык программирования для программирования


общего назначения. Созданный Гвидо ван Россум и впервые выпущенный в
1991 году.
Python имеет систему динамического типа и автоматическое управление
памятью. Он поддерживает несколько парадигм программирования, включая
объектно-ориентированный, императивный, функциональный и процедурный,
и имеет большую и всеобъемлющую стандартную библиотеку.
Интерпретатор Python доступен для многих операционных систем. Это
программное обеспечение с открытым исходным кодом.

Python был задуман в конце 1980-х годов Гвидо ван Россумом в Centrum
Wiskunde & Informatica (CWI) в Нидерландах как преемник языка ABC (сам
вдохновленный SETL), способный обрабатывать и взаимодействовать с
Операционная система Amoeba. Его реализация началась в декабре 1989 года.
Длительное влияние Ван Россума на Python отражено в названии.

Python 2.0 был выпущен 16 октября 2000 года со множеством функций,


включая сборщик мусора, обнаруживающий цикл, и поддержку Unicode.

Python 3.0 был выпущен 3 декабря 2008 года. Это был серьезный пересмотр
языка, который не полностью обратно совместим. Многие из его основных
функций были переданы в версии Python 2.6.x и версии 2.7.x. Релизы Python 3
предоставили утилиту, которая автоматизирует (по крайней мере частично)
перевод кода Python 2 на Python 3.

6
Дата окончания срока службы Python 2.7 была установлена на 2015 год, а затем
отложена до 2020 года из-за опасений, что большая часть существующего кода
не может быть легко перенесена на Python 3. В январе 2017 года Google
объявила о работе над Python 2.7, для повышение производительности.

1.2 ЧТО ИЗ СЕБЯ ПРЕДСТАВЛЯЕТ ПРОГРАММА

Быстрое последовательное визуальное предъявление - способ показа текстовой


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

1.2 ИССЛЕДОВАНИЯ

Учёные из Университета Карнеги — Меллон установили, что быстрое


последовательное визуальное предъявление позволяет достичь максимальной
скорости чтения на английском языке в 720 слов в минуту (12 в секунду). Или,

7
что также очень важно, позволяет повысить скорость чтения на 33 % по
сравнению с нормальной без существенной потери понимания материала.
Исследования в Уичитском университете показали, что при быстром
последовательном визуальном предъявлении английского текста на скорости
250 слов в минуту, понимание лишь незначительно ухудшилось по сравнению с
обычным чтением с экрана электронной книги. Предъявление же со скоростью
650 слов в минуту снизило понимание с 74,6 % до 52,1 % по сравнению с 250
словами в минуту, что тоже хороший результат.

1.3 НЕДОСТАТКИ

К недостаткам быстрого последовательного визуального предъявления следует


отнести затруднительность поиска по тексту, и, в связи с этим, трудность
перечитывания текста. Кроме того, читатели склонны дольше фокусироваться
на словах, имеющих для них эмоциональную окраску, что ведёт к затруднению
восприятия.

8
2 СОЗДАНИЕ ПРИЛОЖЕНИЯ НА ЯЗЫКЕ PYTHON

2.1 ВЫБОР СРЕДЫ РЕАЛИЗАЦИИ ПРОГРАММЫ

В ходе разработки программного обеспечения используем библиотеку Kivy.


Kivy — это библиотека Python, имеющая открытый код, предназначенная для
разработки кроссплатформенных GUI приложений. Она позволяет писать
приложения с графическим интерфейсом на чистом Python, которые работают
на основных платформах (Windows, Linux, MacOS, Android, IOS).

Kivy бесплатна для использования в соответствии с лицензией MIT и LGPL 3.


Инструментарий профессионально разработан, поддерживается и используется.
Структура стабильна и имеет хорошо документированный API, а также
руководство по программированию, которое поможет вам начать работу.
Графический движок построен поверх OpenGL ES 2, используя современный и
быстрый графический конвейер.

Набор инструментов содержит более 20 виджетов, все они очень расширяемы.


Многие части написаны на C с использованием Cython и протестированы с
помощью регрессионных тестов.

9
2.2 ФУНКЦИОНАЛЬНОСТЬ ПРОГРАММЫ

Программа будет открывать файлы формата pdf или txt. С помощью модуля
pdfminer она преобразует файлы pdf в текстовый формат. Далее из полученного
файла удаляются все ненужные символы и знаки препинания, а из оставшихся
слов создается массив, который с помощью модуля pickle загружается в
отдельный файл формата pickle. В свою очередь pickle файлы сохраняются в
папке с программой, и оттуда она их извлекает в виде массива слов, каждый
элемент которого выводится на экран в быстрой последовательности. Скорость
появления слов на экране можно изменить благодаря внутренней задержке в
теле цикла вывода.

2.3 АЛГОРИТ ПРОГРАММЫ

Для начала импортируем все нужные для нас библиотеки и модули Kivy
Фреймворка. Они потребуются для реализации GUI.
Листинг 1. Импорт модулей

from kivy.app import App

from kivy.lang import Builder

from kivy.uix.screenmanager import ScreenManager, Screen

from kivy.uix.filechooser import FileChooser

from kivy.uix.floatlayout import FloatLayout

from kivy.factory import Factory

from kivy.properties import ObjectProperty, StringProperty

from kivy.uix.popup import Popup


10
from kivy.config import Config

from time import sleep

from threading import Thread

import pdfminer.high_level

import os

import sys

import pickle

Наше окно программы будет фиксированным, размером 900 на 600.

Листинг 2. Настройка окна

Config.set('graphics', 'resizable', '0')

Config.set('graphics', 'width', '900')

Config.set('graphics', 'height', '600')

Создаем макет будущей программы с помощью классов и присвоем в виджет из


библиотеки kivy. Виджет называется ScreenManager, он позволяет
переключаться из одного окна в другое.

Листинг 3. Макет программы

class LoadDialog(FloatLayout):

pass

class Started(Screen):

pass

class Root(Screen):

pass

sm = ScreenManager()

sm.add_widget(Started(name='started'))

sm.add_widget(Root(name='root'))

11
class SpeedYApp(App):

def build(self):

return sm

if __name__ == '__main__':

SpeedYApp().run()

Сделаем дизайн для нашей интерактивной заставки с помощью Kivy Language.


Также используем заранее подготовленный дизайн кнопки сделанный в
Photoshop, он сохранен в нашей папке Image в формате png.

Листинг 4. Дизайн заставки

Builder.load_string("""

<Started>:

BoxLayout:

Button:

on_press:

root.manager.transition.duration = 1.4

root.manager.current = 'root'

background_normal: 'Image/speedynormal.png'

background_down: 'Image/speedydown.png'

Дальше нужен графический интерфейс для выбора файла. Дописываем в Kivy


Language код и добовляем в класс Root функцию вывода всплывающего меню.

Листинг 5. File Chooser

<Root>:

FloatLayout:

canvas.before:

Color:
12
rgb: 0.94,0.94,0.94

Rectangle:

pos: self.pos

size: self.size

size: 900, 600

orientation: 'vertical'

Button:

text: 'Choose File'

color: 0.94,0.94,0.94,1

size_hint: .15, .08

pos: 35, 530

on_release: root.show_load()

<LoadDialog>:

BoxLayout:

size: root.size

pos: root.pos

orientation: "vertical"

FileChooserListView:

id: filechooser

BoxLayout:

size_hint_y: None

height: 30

Button:

text: "Cancel"

on_release: root.cancel()

Button:

text: "Load"

13
on_release: root.load(filechooser.path,
filechooser.selection)

def show_load(self):

content = LoadDialog(load=self.load,
cancel=self.dismiss_popup)

self._popup = Popup(title="Load file", content=content,


size_hint=(0.9, 0.9))

self._popup.open()

Добавим в главный класс Root основные функции. Они загружают выбранный


файл в программу и преобразуют ее в txt формат. Удаляет из текста все
ненужные символы, из оставшихся создается массив words. Массив загружаем
в файл формата pickle. Файл pickle используется в качестве сохранения массива
и последнего выводимого слова.

Листинг 6. Основные функции загрузки файла

def dismiss_popup(self):
self._popup.dismiss()

def load(self, path, filename):


fill = filename[0]
self.fpath=path
try:
if 'pdf' in fill:
self.fname = fill.replace(self.fpath,'')
self.fname = self.fname.replace('.pdf','')
if 'pickle' in fill:
self.fname = fill.replace(self.fpath,'')
self.fname = self.fname.replace('.pickle','')
else:
with open(fill, 'rb') as file:
if fill[-3::] == 'pdf':
with
open(self.fpath+self.fname+'_speedy'+'.txt','w') as ff:

pdfminer.high_level.extract_text_to_fp(file,ff)

14
elif fill[-3::] == 'txt':
with open(fill,'r') as file:
with
open(self.fpath+self.fname+'_speedy'+'.txt','w') as ff:
for line in file:
ff.write(line)
with open(self.fpath+self.fname+'_speedy'+'.txt','r')
as file:
self.words=[]
word=''
for line in file:
for i in line:
if i == '.' or i==' ' or i==',' or i
=='?' or i=='!' or i=='-' or i=='_' or i=='—':
if word!='':
self.words+=[word]
word=''
elif i.isupper():
self.words+=[word]
word=''
word+=i
else:
word+=i
for i in self.words:
if i!='':
self.wordsss+=[i]
with open(self.fpath+self.fname+'.pickle','wb') as
file:
pickle.dump(self.wordsss,file)
os.remove(self.fpath+self.fname+'_speedy'+'.txt')
except UnicodeEncodeError:
pass
self.dismiss_popup()

С помощью функции super() наследуем поведение и атрибуты родительского


класса. В этом же классе создаем атрибуты для счётчика слов, счётчика
скорости вывода, массивы для слов, а также атрибуты названия файла и пути до
него.

Листинг 7. Наследование класса


def __init__(self,*args,**kwargs):
super(Root,self).__init__(*args,**kwargs)
self.gtre=0
self.jen=0
self.parts=[]
15
self.count=0.500
self.words=[]
self.wordsss=[]
self.fpath=''
self.fname=''
self.wpm=120

Создаем текстовое поле для вывода слов. Добавляем кнопки Play, Stop/Start для
запуска и остановки программы, предварительно передав в них запуск функции
с созданием потока. Без использования потока, программа выдаст в текстовое
поле последний элемент массива.

Листинг 8. Тестовое поле

Button:

background_normal: 'Image/play1.png'

background_down: 'Image/play2.png'

size_hint: .15, .066

pos: 390, 107

on_release: root.upd_ltxt()

Image:

source: 'Image/line.png'

pos: 35, 35

Label:

id: texts

color: 0,0,0,1

text: 'Loo[color=ff3333]k[/color] Here!'

halign: 'center'

markup: True

font_size: 30

pos: -40, 35

Button:

16
background_normal: 'Image/stop1.png'

background_down: 'Image/stop2.png'

size_hint: .22, .095

pos: 358, 36

on_press: root.stop()

def upd_ltxt(self):

self.gtre=0

self.jen=0

self.parts=[]

Thread(target=self.update_label).start()

def stop(self):

if self.gtre==0:

self.gtre=1

elif self.gtre==1:

self.gtre=0

Thread(target=self.update_label).start()

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


красным цветом. Реализуем это в главной функции вывода.

Листинг 9. Функция вывода

def update_label(self):

with open(self.fname+'.pickle','rb') as myfile:

self.parts = pickle.load(myfile)

for i in range(self.jen):

self.parts.pop(0)

17
for i in self.parts:

color=i

x = len(color)//2

if len(color)==1 or len(color)==2:

self.ids.texts.text='[color=FF0000]'+color[0:1]+'[/color]'+color[1
:]

if x%2 ==0:

self.ids.texts.text=color[0:x-
1]+'[color=FF0000]'+color[x-1:x]+'[/color]'+color[x:]

else:

self.ids.texts.text=color[0:x]
+'[color=FF0000]'+color[x:x+1]+'[/color]'+color[x+1:]

self.jen+=1

print(self.jen)

sleep(self.count)

if self.gtre==1:

raise TypeError

self.parts=self.parts[1:]

Также нам потребуется добавить функции управления скоростью вывода слов.


Для этого добавим две кнопки (+ и -) и интерфейс показывающий количество
слов в минуту (wpm).

Листинг 10. Скорость вывода

Label:

id: speed

color: 0,0,0,1

text: '120 wpm'


18
halign: "center"

font_size: 20

pos: 240, -65

Button:

background_normal: 'Image/plus.png'

background_down: 'Image/downplus.png'

size_hint: .105, .15

pos: 720, 43

on_release: root.upd_count_plus()

Button:

background_normal: 'Image/minus.png'

background_down: 'Image/downminus.png'

size_hint: .105, .15

pos: 80, 43

on_release: root.upd_count_minus()

def upd_count_plus(self):

if self.count-0.05555>0.05:

self.count-=0.05

self.wpm+=10

self.ids.speed.text=str(self.wpm)+' wpm'

def upd_count_minus(self):

if self.count+0.05555<1.1:

self.count+=0.05

self.wpm-=10

self.ids.speed.text=str(self.wpm)+' wpm'

19
И последняя функция, которая нам потребуется это функция сохранения
последнего выводимого слова. Ее мы реализуем с помощью сдвига массива и
пересохранения файла.

Листинг 11. Сохранение позиции

Button:

text: 'Save File'

color: 0.94,0.94,0.94,1

size_hint: .15, .08

pos: 730, 530

on_release: root.save()

def save(self):

with open(self.fpath+self.fname+'.pickle','wb') as file:

pickle.dump(self.parts,file)

self.jen=0

20
2.4 ИНТЕРФЕЙС ПРОГРАММЫ

- Интерактивная заставка (Рисунок 1)

Рисунок 1 - Интерактивная заставка

- Окно вывода текста (Рисунок 2)

21
Рисунок 2 - Окно вывода текста

- Кнопка, выделенная красным прямоугольником отвечает за загрузки файла,


после нажатия на кнопку появляется всплывающее меню (Рисунок 3, Рисунок
4)

Рисунок 3 – Кнопка загрузки файла

22
Рисунок 4 – всплывающее меню для выбора файла

- Кнопка вывода слов в окно (Рисунок 5)

Рисунок 5 – Кнопка play

23
- Кнопки управления скоростью вывода слов (Рисунок 6)

Рисунок 6 – Кнопки скорости

- Окно указывающее количество выводимых слов в минуту (Рисунок 7)

Рисунок 7 – интерфейс скорости

- Кнопка остановки/запуска вывода слов (Рисунок 8)

Рисунок 8 – Кнопка stop/start


24
- Кнопка сохранения позиции последнего слова в тексте (Рисунок 9)

Рисунок 9 – Кнопка сохранения файла

- Общее представление главного окна (Рисунок 10)

Рисунок 10 – Главное окно программы


25
2.5 ХАРАКТЕРИСТИКА ПРОГРАММЫ

Характеристики программы: Общий размер 78,9 КБ, при этом 10 КБ занимает


сама программа, 68,9 КБ занимают изображения, используемые для
отображения интерфейса программы. При этом запуск программы занимает
около пяти секунд при первом запуске, при повторных запусках примерно две-
три секунды. Исходный код программы состоит из 289 строк.

26
ЗАКЛЮЧЕНИЕ

Благодаря простоте и гибкости языка Python, его можно рекомендовать


пользователям, не являющимся программистами, но использующими
вычислительную технику и программирование в своей работе.
Программы на Python разрабатываются в среднем в полтора-два раза быстрее,
нежели на компилируемых языках, таких как С, С++, Pascal. Поэтому, язык
представляет не малый интерес и для профессиональных программистов,
разрабатывающих приложения, не критичные к скорости выполнения, а также
программы, использующие сложные структуры данных.

В наше время информационные технологии и программы для пользователей


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

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

27
программы, которая может иметь потенциал в будущем для массового (в т.ч. и
коммерческого) использования.

28
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

Иностранная литература.
1. Лутц, М. Изучаем Python, 3 е издание – Пер. с англ. – СПб.: Символ Плюс,
2012. – 848 с., ил. 

2. Лутц, М. Программирование на Python, том I, 4-е издание. – Пер. с англ. –


СПб.: Символ-Плюс, 2011. – 992 с., ил. 

3. Лутц, М. Программирование на Python, том II, 4-е издание. – Пер. с англ. –


СПб.: Символ-Плюс, 2011. – 992 с., ил. 

4. Саммерфилд, М. Программирование на Python 3. Подробное руководство. -


Пер. с англ. - СПб.: Символ-Плюс, 2009. - 608 с., ил.

Интернет-сайты.
5. Kivy Framework /API Reference: [Электронный ресурс]. – Режим доступа:
https://kivy.org/doc/stable/api-index.html

6. Форум, где можно задать вопросы: [Электронный ресурс]. – Режим доступа:


https://ru.stackoverflow.com

7. Официальный форум Python: [Электронный ресурс]. – Режим доступа:


https://python-forum.io

8. Форум, где можно задать вопросы: [Электронный ресурс]. – Режим доступа:


https://geekbrains.ru/topics

29
9. Информация об ПО, языке Python была взята из Википедии: [Электронный
ресурс]. – Режим доступа:
https://ru.wikipedia.org/wiki/Заглавная_страница

30

Вам также может понравиться