Главная страница

Питон для нормальных. Учебник Москва Базальт спо макс пресс 2018


Скачать 2.54 Mb.
НазваниеУчебник Москва Базальт спо макс пресс 2018
АнкорПитон для нормальных
Дата05.10.2022
Размер2.54 Mb.
Формат файлаpdf
Имя файлаsysoeva_sysoev_piton_dlya_normalnyh_ch1.pdf
ТипУчебник
#715174
страница1 из 14
  1   2   3   4   5   6   7   8   9   ...   14

В серии:
Библиотека ALT
М. В. Сысоева, И. В. Сысоев
Программирование для
«нормальных» с нуля на языке
Python
В двух частях
Часть 1
Учебник
Москва
Базальт СПО
МАКС Пресс
2018

УДК 004.43
ББК 22.1
С95
С95
Сысоева М. В., Сысоев И. В.
Программирование для «нормальных» с нуля на языке
Python: Учебник. В двух частях. Часть 1 / Ответственный редактор: В. Л. Черный : — М.: Базальт СПО; МАКС Пресс,
2018. — 176 с. [+4 с. вкл]: ил. — (Библиотека ALT).
ISBN 978-5-9908979-5-3
ISBN 978-5-317-05783-1
ISBN 978-5-317-05784-8 (часть 1)
Книга — учебник, задачник и самоучитель по алгоритмизации и программированию на Python. Она не требует предварительных знаний в области программирования и может использоваться для обучения «с нуля».
Издание адресовано студентам, аспирантам и преподавателям ин- женерных и естественно-научных специальностей вузов, школьникам старших классов и учителям информатики. Обучение языку в значи- тельной степени строится на примерах решения задач обработки ре- зультатов радиофизического и биологического эксперимента.
Сайт книги: http://www.altlinux.org/Books:Python-sysoeva
Ключевые слова: программирование; численные методы; алгорит- мы; графики; Python; numpy
УДК 004.43
ББК 22.1
Материалы, составляющие данную книгу, распространяются на условиях лицензии GNU
FDL. Книга содержит следующий текст, помещаемый на первую страницу обложки: «В серии
“Библиотека ALT”». Название: «Программирование для «нормальных» с нуля на языке Python.
В двух частях. Часть 1». Книга не содержит неизменяемых разделов. Linux — торговая мар- ка Линуса Торвальдса. Прочие встречающиеся названия могут являться торговыми марками соответствующих владельцев.
ISBN 978-5-9908979-5-3
ISBN 978-5-317-05783-1
ISBN 978-5-317-05784-8 (часть 1)
c
Сысоева М. В., Сысоев И. В., 2018
c
Basealt, 2018

Оглавление
Предисловие
5
Глава 1.
Введение
7 1.1
Языки программирования . . . . . . . . . . . . . . . . . . . . . .
7 1.2
Парадигмы программирования . . . . . . . . . . . . . . . . . . .
12 1.3
Типизация в языках программирования . . . . . . . . . . . . . .
14 1.4
Области программирования . . . . . . . . . . . . . . . . . . . . .
20 1.5
Области применения Python . . . . . . . . . . . . . . . . . . . . .
23 1.6
Первая программа. Среда разработки . . . . . . . . . . . . . . . .
27
Глава 2.
Основные типы данных
32 2.1
Числа. Арифметические операции с числами. Модуль math . . .
32 2.2
Строки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
38 2.3
Условия и логические операции . . . . . . . . . . . . . . . . . . .
42 2.4
Списки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
48 2.5
Кортежи . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
53 2.6
Словари . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
55 2.7
Примеры решения задач . . . . . . . . . . . . . . . . . . . . . . .
56 2.8
Задания . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
59
Глава 3.
Циклы
67 3.1
Цикл с условием (while) . . . . . . . . . . . . . . . . . . . . . . .
67 3.2
Цикл обхода последовательности (for) . . . . . . . . . . . . . . .
70 3.3
Некоторые основные алгоритмические приёмы
73 3.4
Отладка программы . . . . . . . . . . . . . . . . . . . . . . . . . .
78 3.5
Задания на циклы . . . . . . . . . . . . . . . . . . . . . . . . . . .
86
Глава 4.
Функции
93 4.1
Функции в программировании . . . . . . . . . . . . . . . . . . . .
93 4.2
Параметры и аргументы функций . . . . . . . . . . . . . . . . . .
97 4.3
Локальные и глобальные переменные . . . . . . . . . . . . . . . .
100 4.4
Программирование сверху вниз . . . . . . . . . . . . . . . . . . .
102 4.5
Рекурсивный вызов функции . . . . . . . . . . . . . . . . . . . . .
103 4.6
Примеры решения заданий . . . . . . . . . . . . . . . . . . . . . .
106 4.7
Задания на функции . . . . . . . . . . . . . . . . . . . . . . . . .
108

4
Оглавление
Глава 5.
Массивы. Модуль numpy
112 5.1
Создание и индексация массивов . . . . . . . . . . . . . . . . . .
113 5.2
Арифметические операции и функции с массивами . . . . . . . .
120 5.3
Двумерные массивы, форма массивов . . . . . . . . . . . . . . .
125 5.4
Примеры решения задач . . . . . . . . . . . . . . . . . . . . . . .
130 5.5
Задания на массивы, модуль numpy . . . . . . . . . . . . . . . . .
132
Глава 6.
Графики. Модуль matplotlib
134 6.1
Простые графики . . . . . . . . . . . . . . . . . . . . . . . . . . .
134 6.2
Заголовок, подписи, сетка, легенда . . . . . . . . . . . . . . . . .
138 6.3
Несколько графиков на одном полотне . . . . . . . . . . . . . . .
141 6.4
Гистограммы, диаграммы-столбцы . . . . . . . . . . . . . . . . .
146 6.5
Круговые и контурные диаграммы . . . . . . . . . . . . . . . . .
149 6.6
Трёхмерные графики . . . . . . . . . . . . . . . . . . . . . . . . .
150 6.7
Учёт ошибок . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
152 6.8
Примеры построения графиков . . . . . . . . . . . . . . . . . . .
153 6.9
Задания на построение графиков . . . . . . . . . . . . . . . . . .
156
Глава 7.
Библиотеки, встроенные в numpy
160 7.1
Элементы линейной алгебры . . . . . . . . . . . . . . . . . . . . .
160 7.2
Быстрое преобразование Фурье . . . . . . . . . . . . . . . . . . .
163 7.3
Генерация случайных чисел . . . . . . . . . . . . . . . . . . . . .
166 7.4
Примеры решения заданий . . . . . . . . . . . . . . . . . . . . . .
167 7.5
Задания на использование встроенных библиотек numpy . . . . .
171

Предисловие
Эта книга написана для инженеров, физиков, биологов и просто всех-всех, кто не изучал программирование прежде, но для кого оно может быть полезно как средство решения своих насущных задач, а не является самоцелью. Для них вы- бор правильного языка для обучения и работы очень важен: такой язык должен быть одновременно прост в освоении и использовании и логично организован,
иметь много внешних модулей и расширений для решения реальных задач (то есть быть популярным), и быть хорошо доступен — свободно распространяться вместе со внешними модулями для всех основных операционных систем. Язык
Python лучше всех других удовлетворяет всем этим требованиям и поэтому ныне используется во многих вузах и школах для обучения и одновременно бьёт ре- корды по популярности среди учёных и инженеров.
Книга позволит вам, начав с нуля, быстро и качественно научиться делать нужные вещи: производить вычисления, читать, записывать и анализировать данные, строить графики, и при этом освоить основные принципы программи- рования: структуры данных, циклы, условия, подпрограммы, поиск ошибок и отладку. Подбирая материал, мы сознательно придерживались самых простых путей решения той иной задачи, даже если это несколько противоречило ака- демически принятому порядку изложения или сложившимся традициям. В ря- де случаев, например, при работе с текстовыми файлами и массивами, мы да- же предпочли использование широко популярных внешних модулей встроенным средствам. Всё изложение построено так, чтобы быть полезным и применимым сразу, ведь усваивается то, что используется.
Книга может выступать как в качестве самоучителя, так и в качестве учеб- ника для преподавания в школе или вузе, задачника или просто справочника.
Сведения об авторах
• Сысоева Марина Вячеславовна — кандидат физико-математических наук,
ассистент кафедры «Радиоэлектроника и телекоммуникации» Саратовско- го государственного технического университета имени Гагарина Ю.А.
• Сысоев Илья Вячеславович — кандидат физико-математических наук, до- цент кафедры динамического моделирования и биомедицинской инженерии

6
Предисловие
Саратовского национального исследовательского государственного универ- ситета имени Н.Г. Чернышевского.
Сведения о рецензентах
• Пономаренко Владимир Иванович — доктор физико-математических наук,
ведущий научный сотрудник Саратовского филиала Института радиотех- ники и электроники имени В.А. Котельникова РАН.
• Огнева Марина Валентиновна — кандидат физико-математических наук,
заведующая кафедрою информатики и программирования Саратовского национального исследовательского государственного университета имени
Н. Г. Чернышевского.
• Курячий Георгий Владимирович — преподаватель факультета ВМК Мос- ковского Государственного Университета им. М. В. Ломоносова, автор кур- сов по Python для ВУЗов и Вечерней математической Школы, разработчик компании «Базальт СПО».

Глава 1
Введение
1.1
Языки программирования
Первый проект вычислительной машины был разработан Чарльзом Бэбби- джем в 1833 году в Великобритании. Описание проекта сделала Августа Ада
Кинг (единственная дочь знаменитого поэта лорда Байрона), она же ввела такие фундаментальные понятия, как «цикл», «рабочая ячейка», и потому считается первым в мире программистом; язык программирования Ада назван в её честь.
Машина Бэббиджа никогда не была реализована полностью, хотя на её реа- лизацию ушло 17 тысяч фунтов стерлингов и 9 лет времени. Основная проблема,
с которою столкнулся Бэббидж, — низкий уровень элементной базы: промыш- ленность того времени не была готова производить детали нужного качества и в требуемые сроки. Тем не менее, его последователь Георг Шутц в 1850-ых по- строил несколько работающих «разностных машин».
Первая реальная электрическая вычислительная машина была построена немецким инженером-исследователем К. Цузе в 1938 году, аналогичные рабо- ты велись независимо от него в США Д. Штибитцем и Г. Айкеном. Базовые принципы архитектуры современных ЭВМ были сформулированы Джоном фон
Нейманом в 1946 году в США, а в 1948 году в Англии была построена первая
ЭВМ, основанная на этих принципах.
В СССР первая машина БЭСМ была спроектирована в 1951 году и уже в следующем году началась её практическая эксплуатация. Элементная база для первых ЭВМ 40-50-ых годов представляла собою вакуумные лампы. Переход на полупроводниковую элементную базу в 1960-ых позволил существенно повысить быстродействие, уменьшить размер и энергопотребление ЭВМ. Следующим эта- пом стал переход от отдельных транзисторов к интегральным логическим схе- мам.
Первые программы заключались в установке ключевых переключателей на передней панели вычислительного устройства. Очевидно, таким способом мож- но было составить только небольшие программы. Одну из первых попыток со-

8
Глава 1. Введение здать полноценный язык программирования предпринял немецкий учёный Ко- нрад Цузе, который в период с 1943 по 1945 год разработал язык Plankalk¨
ul
(Планкалкюль). В переводе на русский язык это название соответствует выра- жению «планирующее исчисление». Это был очень перспективный язык, факти- чески являвшийся языком высокого уровня, однако из-за военных действий он не был доведён до практической реализации.
Неизвестно, насколько бы ускорилось развитие программирования, если бы наработки Цузе стали доступны другим учёным в конце 40-х годов, но на прак- тике с развитием компьютерной техники сначала получил распространение ма- шинный язык. Запись программы на нём состояла из единиц и нулей. Машинный язык принято считать языком программирования первого поколения (при этом разные машины разных производителей использовали различные коды, что тре- бовало переписывать программу при переходе на другую ЭВМ).
Программа «Hello, world!» для процессора архитектуры x86 (ОС MS DOS,
вывод при помощи BIOS прерывания int10h) выглядит следующим образом (в шестнадцатеричном представлении):
BB 11 01 B9 0 D 00 B4 0 E 8 A 07 43 CD 10 E2 F9
CD 20 48 65 6 C 6 C 6 F 2 C 20 57 6 F 72 6 C 64 21
Вскоре на смену такому методу программирования пришло применение язы- ков второго поколения, также ограниченных спецификациями конкретных ма- шин, но более простых для использования человеком за счет использования мне- моник (символьных обозначений машинных команд) и возможности сопоставле- ния имен адресам в машинной памяти. Они традиционно известны под наиме- нованием языков ассемблера (транслируемые языки). Эти языки относятся к языкам низкого уровня, то есть близким к программированию непосредственно в машинных кодах.
Однако при использовании ассемблера становился необходимым процесс пере- вода программы на язык машинных двоичных кодов перед её выполнением, для чего были разработаны специальные программы, также получившие название ассемблеров (трансляторов). Сохранялись и проблемы с переносимостью про- граммы с ЭВМ одной архитектуры на другую, и необходимость для программи- ста при решении задачи мыслить терминами «низкого уровня»: ячейка, адрес,
команда.
Классическая программа на одном из диалектов Ассемблера:
.386 // тип процессора
. MODEL SMALL // модель памяти
. DATA // инициализированные данные:
msg DB ’ Hello , Ђ World ’ , 13 , 10 , ’$ ’
. CODE // исполняемый код:
START :
mov ax , @DATA // Загрузка адреса сегмента в регистр ds mov ds , ax

1.1. Языки программирования
9
mov ax , 0900 h lea dx , msg int21h mov ax , 4 C00h i
n t
21 h
END START
Поскольку команды ассемблера всего лишь более удобно обозначенные ин- струкции в двоичных кодах, как правило, можно добиться взаимнооднозначного соответствия между программами в машинных кодах и программами на ассем- блере, следовательно, они оказываются полностью взаимно заменяемыми. В этом кроется как ключевое преимущество, так и ключевой недостаток ассемблера. С
одной стороны, программирование в двоичных кодах становится ненужным ров- но с того момента, как написана программа-транслятор, при этом сохраняется полный доступ ко всем возможностям ЭВМ. С другой стороны, если изменят- ся инструкции или регистры, программа на ассемблере окажется бесполезна.
Поскольку архитектура ЭВМ меняется часто, а одновременно сосуществуют вы- числительные машины различных архитектур, получается, что программы на ассемблере приходится всё время переписывать.
Чтобы не переписывать каждый раз программу, необходимо было создать некоторый уровень абстракции: спрятать детали организации конкретного ком- пьютера от программиста и позволить ему мыслить категориями более универ- сальными, чем категории конкретных инструкций конкретной машины. Такой шаг был впервые сделан в 1958 году, когда появился первый язык высокого уровня — FORTRAN (сокращение от FORmula TRANSlation). Хотя програм- мы на Фортране работали существенно (в 2–4 раза) медленнее, чем программы на ассемблере, переход на языки высокого уровня стал огромным шагом вперёд,
поскольку число способных к программированию людей резко увеличилось: ста- ло не нужно помнить все регистры и инструкции процессора. Программировать начали не только профессиональные программисты, но и учёные и инженеры.
Программа «Привет мир» на Фортране (эта программа будет компилиро- ваться только сравнительно современными компиляторами, поддерживающими стандарт Frotran 90 или более новые):
P
r o
g r
a m
hello w
r i
t e
(* ,*) ’ Hello , Ђ World ! ’
e n
d
Конечно, программа на Фортране требовала перевода в двоичный код, ко- торый, в отличие от ассемблера, нельзя было сделать простым взаимно одно- значным транслированием. Для этого была написана на ассемблере специальная программа — компилятор. Поэтому такие языки получили название компили- руемых. Когда изменяется архитектура ЭВМ, компилятор для каждого языка приходится переписывать, ведь он всё равно написан на ассемблере. Компили- руемые языки: Fortran (1958 г.), Algol (1960 г.), С (1970 г.) и его потомки (C++,

10
Глава 1. Введение
D, Vala), Pascal (1970 г.) и его потомки (Delphi, FreePascal/Lazarus) — основа современного программирования.
Программа «Привет мир» на Pascal:
p r
o g
r a
m hello ;
b e
g i
n w
r i
t e
( ’ Hello , Ђ World ’ );
e n
d
Программа «Привет мир» на С:
#
i n
l u
d e
< stdio .h >
i n
t main () {
printf ( ’ Hello , Ђ World ’ );
r e
t u
r n
0;
}
Со временем производительность компьютеров выросла настолько, что ока- залось возможным не компилировать код программ в двоичный, а сразу испол- нять его строчка за строчкою. Такой способ называется интерпретированием,
программа, интерпретирующая код — интерпретатором, а такие языки — ин- терпретируемые. MATLAB (1978 г.), Perl (1987 г.), Python (1992 г.), PHP (1995
г.), Ruby (1995 г.), Javascript (1995 г.) — примеры популярных интерпретируе- мых языков. Интерпретатор может работать в двух режимах: интерактивном и выполнения скрипта.
Программа «Привет мир» на Perl:
# !/ usr / bin / perl p
r i
n t
" Hello , Ђ World \ n "
Программа «Привет мир» на Python:
p r
i n
t
( ’ Hello , Ђ World ’)
На PHP:

На Ruby:
{ puts " Hello , Ђ World " }
На JavaScript:
< script type =" a p p l i c a t i o n / j a v a s c r i p t " >
Alert ( ’ Hello , World ’);

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

1.1. Языки программирования
11
компилируемых. Они используются там, где либо время исполнения программы некритично, либо в случае, когда программа пишется на один раз, поскольку то- гда относительно большое время исполнения компенсируется существенно мень- шим временем написания. Так, Perl появился как язык для обработки текстов,
PHP — пример удачного языка для создания сайтов.
Промежуточное положение между компилируемыми и интерпретируемыми языками занимают языки виртуальных машин, самые распространённые из ко- торых Java (компилируется в машинный код виртуальной машины Java Virtual
Machine) и C# (компилируется в машинный код виртуальной машины Common
Language Runtime — основы для всех языков семейства .NET).
Для них компиляция происходит не в двоичный код данного конкретного процессора, а в двоичный код специальной виртуальной машины (иногда его называют байткод). Таким образом, достигаются два существенных плюса: во- первых, можно не перекомпилировать программу под каждый новый процессор,
  1   2   3   4   5   6   7   8   9   ...   14


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