Скачиваний:
35
Добавлен:
02.05.2014
Размер:
203.78 Кб
Скачать

VII. Пример использования некоторых библиотек

Задача: Написать программу, которая задумывает число в диапазоне от 1 до 10 и предлагает пользователю угадать число за 3 попытки.

#include <conio.h>

#include <stdlib.h> // для доступа к srand

#include <time.h>

void main()

{

int comp; // задуманное число

int igrok; // вариант, игрока

int n; //количество попыток

time_t t; // текущее время - для инициализации генератора случайных чисел

srand((unsigned) time(&t));

comp=rand()%10+1;

clrscr();

cprintf("\n\rKomputer\"zdumal\"chislo ot 1 do\10\n\r");

cprintf("Vi dolzni ego ugadat za 3 popitki");

n=0;

do {

cprintf("\n\r->");

cscanf("%i",&igrok);

n++;

} while ((igrok != comp)&&(n < 3));

if (igrok == comp)

{

textcolor (RED+BLINK);

cprintf("\n\r VI VIIGRALI!");

}

else

{

textcolor(GREEN);

cprintf("\n\r Vi proigrali");

cprintf ("Komputer zadumal chislo %d",comp);

}

textcolor(LIGHTGRAY);

cprintf("\n\r Dla zavershenia nazmite lubuu klavishu...");

getch();

getch();

}

В данной задаче использованы библиотеки conio.h, stdlib., time.h, их предназначение заключается в следующем:

Библиотека conio.h предназначена для работы с терминалом в текстовом режиме, в данной задаче используется функция textcolor(), которая устанавливает цвет символов по значению параметра, находящегося внутри круглых скобок (textcolor(GREEN)).

Библиотека stdlib.h предназначена для доступа к функции srand – функция инициализации генератора случайных чисел.

Библиотека time.h предназначена для определения дат и времени, в данной задаче предназначена для определения текущего времени для инициализации генератора случайных чисел.

VIII. Язык программирования Python. Стандартная библиотека

Большим достоинством Python как инструмента программиста является стандартная библиотека, входящая в дистрибутив. Первое, с чем сталкивается программист - это, конечно, встроенные типы данных, встроенные исключения, и встроенные функции. Список их невелик, и программисты, привыкшие, что у них сразу есть функции для манипуляций со строками, с датой и временем, регулярные выражения - спрашивают "есть у вас в Питоне вообще хоть что-нибудь?" Все есть, только не в списке встроенных функций, а в модулях стандартной библиотеки. Манипуляции со строками делаются с помощью модуля string, дата и время приходят из модуля time, регулярные выражения в модуле re, доступ к функциям операционной системы - модуль os, и так далее.

Рассмотрим подробнее стандартную библиотеку Питона. Библиотека состоит из нескольких разделов. Во-первых, модули, дающие доступ к внутренностям интерпретатора и особенностям языка и реализации. Во-вторых, модули для манипуляции со строками, в том числе и с юникодовыми строками. Модули, дающие доступ к системной библиотеке, в первую очередь математические функции. Модули для написания тестов в стиле Extreme Programming. Модули для (относительно) переносимого способа доступа к функциям операционной системы. В библиотеку же входит простой пошаговый отладчик и профилировщик - средство нахождения "узких мест" кода. Отдельный большой раздел библиотеки - сетевые протоколы и средства интернет. Python - отличный инструмент для написания клиентов и серверов, CGI, парсеров HTML/XML и т.д.

Рассмотрим некоторые из этих разделов поподробнее. Первый важный модуль - sys, модуль доступа к Системе. Не операционной системе, а Системе. То есть к интерпретатору. Самая популярная функция из этого модуля - exit, то есть завершение работы интерпретатора. Впрочем, она в модуле не единственная. Еще есть функции получения информации о последнем исключении, и тому подобные составляющие интерпретатора. Несколько интересных переменных - стандартные потоки ввода/вывода - stdin, stdout и stderr.

Еще несколько модулей, тесно связанных с интерпретатором. Модуль gc позволяет управлять сборкой мусора. Модуль atexit дает возможность каждому модулю зарегистрировать функцию де инициализации, которая вызовется при завершении программы. В модуле types перечислены все встроенные типы данных, так что программист может выполнить проверку if type(myvar) == types.ListType...

Модуль inspect - для интроспекции объектов во время выполнения. Модуль traceback позволяет получить и распечатать информацию об исключении. Parser действительно дает доступ ко внутреннему парсеру языка, а imp позволяет управлять импортом модулей. Казалось бы, зачем им управлять? Очень просто - вдруг программа распространяется в нестандартном виде или на нестандартном носителе, скажем, в zip-файле. Тут возможность импортировать модули особенным образом программисту сильно пригодится.

Модули marshal, pickle и shelve позволяют сериализовать объекты, то есть превращать их в поток байт, который потом можно сохранить в файл или передать по сети. Впоследствии сериализованные объекты можно восстановить средствами тех же модулей. Marshal умеет сериализовать только встроенные типы данных, включая питоновский байт-код. Этот модуль используется самим интерпретатором для загрузки сохраненного байт-кода из файла при импорте модуля. Pickle не умеет сериализовать и восстанавливать байт-код, и это сделано специально, для безопасности, чтобы программист был уверен, что не получит по сети вирус в байт-коде. Зато у pickle есть средства, с помощью которых программист может управлять сериализацией и восстановлением своих объектов. Модуль shelve позволяет сохранять сериализованные объекты в дисковых накопителях BerkeleyDB, (G/N)DBM). Модули dumbdbm, dbm, gdbm, bsddb дают доступ к соответствующим встраиваемым базам данных; модуль anydbm является оболочкой с единым API, который позволяет использовать любую из имеющихся БД; модуль whichdb позволяет определить, в каком формате текущая БД.

String - модуль для манипуляции со строками без регулярных выражений. Здесь собраны функции для поиска подстроки в строке, замены и тому подобное. Регулярные выражения - в модуле re. Долгое время этот модуль был интерфейсом к библиотеке PCRE (Perl-Compatible Regular Expressions), но в Python 2.0 был полностью переписан для того чтобы работать не только с ASCII-строками, но и с юникодом. Модуль locale дает доступ к функциям локализации, имеющимся в операционной системе; при установки locale этот модуль модифицирует переменные модуля string в соответствии с установленной locale.

Модули для интерфейса с операционной системой. Первый из них - модуль os. В нем собраны функции для управления файловой системой и процессами. Модуль thread содержит низкоуровневый переносимый интерфейс к потокам (нитям, "легким" процессам) операционной системы. Модуль threading содержит классы-высокоуровневые оболочки модуля thread в стиле Java; здесь есть классы Thread, Lock, Condition, Event, Semaphore. Модуль mmap дает переносимый интерфейс к отображаемым в память файлам. Модули glob и fnmatch позволяют манипулировать шаблонами имен файлов. Библиотека signal позволяет устанавливать обработчики для асинхронных событий (POSIX signals в тех ОС, которые эти сигналы поддерживают).

Отдельной группой стоят модули, специфичные для юникса: posix и posixfile (низкоуровневые части модуля os), pwd и grp (доступ к функциям паролей, получение информации о пользователях и группах пользователей), модуль crypt, модули tty и pty (функции терминала и псевдотерминала), модуль fcntl (доступ к системным вызовам fcntl и ioctl), модуль resource (системные вызовы get/set-rlimit, getrusage), модуль syslog, модули pipes и cmd.

Есть модули для доступа к внешним библиотекам. Модули zlib/gzip/zipfile дают доступ к соответствующим функциям компрессии (архивирования). Модули readline и rlcompleter - к библиотеке GNU readline. Библиотеки math, cmath, random дают программисту доступ к широкому спектру математических функций.

Несколько модулей криптографии, из которых 2 для доступа не к алгоритмам шифрования и дешифрования, а к хешам - модули md5 и sha. Модули Bastion и rexec позволяют создавать защищенные среды и выполнять в них код, которому программист не доверяет, например, код, переданный по сети. Программист сам управляет степенью доверия, и сам определяет, какое подмножество встроенных функций и стандартных модулей будет доступно в такой среде.

В дистрибутив Питона входит интерфейс к графической библиотеке Tk (на самом деле в этом интерфейсе спрятан полноценный Tcl :), сами Tcl/Tk в дистрибутив не входят, их надо ставить отдельно. Есть несколько простых модулей для манипулирования аудиофайлами и файлами изображений.