Наши партнеры

UnixForum






Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Глава 1

Интерактивный Python



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

1.1. Запускаем Python

Для диалога с Python нам необходимо прежде всего запустить интерпретатор Python. Упрощенно, интерпретатор — это такая программа, которая последовательно, одну за другой, читает команды языка программирования (они называются операторами), и переводит их в машинные команды, которые исполняет процессор компьютера.



Рис. 1.1. Первый запуск IDLE

В системе Windows интерпретатор обычно запускается вместе с графической оболочкой IDLE (рис. 1.1) из Программы | Python | IDLE (Python GUI), но можно запустить только интерпретатор, выбрав команду Программы | Python | Python (Command line). И то, и другое даст нам возможность вводить команды, которые Python будет исполнять.

В системе UNIX и Linux также можно запустить Python  просто командой python, а можно запустить IDLE (если вы любите работать в X Window) — командой idle. (В UNIX режим командной строки гораздо богаче возможностями редактирования, чем в Windows).

Сразу после запуска Python нас приветствует, например, так:

Python 2.1 (#1, Apr 21 2001, 13:46:58)

[GCC egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)] on linux2

Type "copyright", "credits" or "license" for more information.

>>>

Три знака ">" — приглашение ко вводу. Мы можем вводить наши команды.

1.2. Диалог с Python

Наш Python готов к диалогу, о чем говорит >>>. Для начала спросим его о погоде на сегодня:

>>> Какая сегодня погода?

File "<stdin>", line 1

Какая сегодня погода?

^

SyntaxError: invalid syntax

>>>

К сожалению, уважаемый Python не понимает русского языка, и нам придется учить его язык. Но что же он нам сказал, указав на нашу ошибку? SyntaxError — синтаксическая ошибка, а более конкретно invalid syntax — неверный синтаксис. Высказавшись, Python снова предложил продолжить общение.

>>> 2+2

4

Вот это ему понятно. Пробуем дальше (print означает "печатай"):

>>> print "Сегодня хороший день!"

Сегодня хороший день!

>>> print "Сегодня хороший день!", 1, "мая!"

Сегодня хороший день! 1 мая!

>>> print "Завтра будет", 1+1, "мая!"

Завтра будет 2 мая!

>>> print "Послезавтра будет", 1+ "мая!"

Послезавтра будет

Traceback (most recent call last):

File "<stdin>", line 1, in ?

TypeError: unsupported operand types for +

>>>

Кажется, мы увлеклись и забыли, что компьютер — вещь точная, и требует четкости при работе с ним. На этот раз произошла ошибка типа TypeError, потому что нельзя складывать числа и строки, как это случайно произошло в диалоге выше. Ничего страшного, мы исправим ошибку и продолжим общение:

>>> print "Послезавтра будет", 1+2, "мая!"

Послезавтра будет 3 мая!

>>>

Кстати, строки с текстом тоже можно "складывать":

>>> print "Послезавтра" + "будет" + "май!"

Послезавтрабудетмай!

>>> print "Послезавтра " + "будет " + "май!"

Послезавтра будет май!

А вот арифметические операции в кавычках исполняться, естественно, не будут:

>>> print "2+2"

2+2

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

>>> print """Текст можно писать и в таких кавычках, """ 'и в таких.'

Текст можно писать и в таких кавычках, и в таких.

>>> print "Но не в таких:", `2+2`

Но не в таких: 4

Надеемся, что читатель неплохо провел время в легкой беседе с интерпретатором Python и готов к более серьезному общению в следующем разделе.

Упражнение

Сложите яблоки с апельсинами.

1.3. Python как калькулятор

В этом разделе мы научимся использовать Python в качестве калькулятора. Запустите Python (см. разд. 1.1, если вы забыли, как это делается) и за дело.

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

>>> 2+3*4

14

>>> 2*3+4

10

>>> (2+3)*4

20

>>> 10/2

5

>>> 10/3

3

>>> 12.48/2

6.24

>>> 13%5

3

В первых примерах все ясно. Операция умножения обычно обозначается в языках программирования как "*", деление — как "/", а операция получения остатка от деления — как "%". Вы, наверное, заметили, что десятичные дроби пишутся через точку (12.48), несмотря на то, что в России принято писать через запятую. Запись дробей с точкой традиционна для многих языков и систем программирования. Кроме того, результат 10/3 равен 3. Дело в том, что и 10, и 3 — целые числа, и потому Python осуществляет деление нацело. Для того чтобы разделить числа "обычным" образом, нужно записать хотя бы одно из них как десятичную дробь — с точкой:

>>> 10.0/3

3.33333333333

>>> 11./3

3.66666666667

>>> 10/3.

3.33333333333

Теперь можно решать примеры любой сложности:

>>> (12.3 + 12)/(12 - (78.3+5*6))

-0.252336448598

>>> _ + 5

4.7476635514

Одиночное подчеркивание "_" является специальным именем для обозначения результата предыдущего вычисления.

Упражнение

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

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

>>> 1000000000*1000000000

Traceback (innermost last):

File "<stdin>", line 1, in ?

OverflowError: integer multiplication

Это было сказано для того, чтобы, пользуясь имеющейся в Python операцией возведения в степень (обозначается **), вы не удивлялись возникающим переполнениям:

print "1 килобайт =", 2**10, "байт"

1 килобайт = 1024 байт

print "1 мегабайт =", 1024 ** 2, "байт"

1 мегабайт = 1048576 байт

print "1 гигабайт =", 1024 ** 3, "байт"

1 гигабайт = 1073741824 байт

>>> 2**100

Traceback (innermost last):

File "<stdin>", line 1, in ?

OverflowError: integer pow()

Упражнение

В какую наибольшую степень можно возвести число 2 без переполнения?

Python может стать "инженерным" калькулятором, если перед вычислениями подать специальную команду, загружающую в память модуль с различными математическими функциями (см. разд. 9.4.1). Ниже мы будем использовать sqrt (квадратный корень), sin (синус), cos (косинус), atan (арк­тангенс).

>>> from math import *

>>> sqrt(16)

4.0

>>> sqrt(18.49)

4.3

>>> sin(3)

0.14112000806

>>> sin(1.22)**2 + cos(1.22)**2

1.0

Упражнение

Поработав с функцией fabs(), попытайтесь установить, что она делает.

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

>>> from math import *

>>> x = sin(0.5) + atan(2.3)

>>> y = 7

>>> x*y

11.480661674

В этом примере Python, вычислив sin(0.5) + atan(2.3), дает полученному результату имя x. Аналогично происходит и с y, хотя там уже никаких сложных вычислений нет. Говорят, что (переменной) y присваивается значение 7. А дальше мы просто используем имена переменных в вычисляемых выражениях наравне с числами.

Кстати, все тот же модуль math содержит имена, соответствующие приближенным значениям известных констант p и е:

>>> from math import *

>>> print "pi =", pi

pi = 3.14159265359

>>> print "e =", e

e = 2.71828182846

Так что площадь круга радиуса r можно вычислить так:

>>> from math import *

>>> r = 3

>>> print "S =", pi * r**2

S = 28.2743338823

Упражнение

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

За исключением примера с переполнением, в наших вычислениях участвовали сравнительно небольшие числа. Оказывается, для представления очень больших или очень близких нулю чисел существует свой вид записи — запись в экспоненциальном формате. В такой записи записываются лишь действительные числа (числа "с точкой"):

>>> 0.0001

0.0001

>>> 0.00001

1e-05

>>> 10.0**-6

1e-06

>>> 100000000000.

100000000000.

>>> 1000000000000.

1e+12

>>> 10.0**13

1e+13

>>> 3.14e5

314000.0

>>> 3.14e-5

3.14e-05

>>> 3.14e-3

0.00314

Секрет записи раскрывается просто: число получается в результате умножения мантиссы (стоит перед "e") на 10 в степени, указанной после "e". Указанное после "e" число называется порядком.

Упражнение

Как в Python запишется миллион миллиардов?

Если же нас интересуют большие целые числа, мы можем использовать целые числа с произвольной точностью. В Python они (скромно) названы длинными целыми. Запись длинного целого отличается от записи обычного целого только добавлением "L" на конце:

>>> print "1 терабайт =", 1024L ** 4, "байт"

1 терабайт = 1099511627776L байт

>>> print "1 петабайт =", 1024L ** 5, "байт"

1 петабайт = 1125899906842624L байт

Числа с произвольной точностью ограничены лишь размером памяти, доступной интерпретатору Python, и степенью вашего терпения при ожидании результатов вычислений.

Упражнение

Вычислите с помощью целых чисел произвольной точности число 2 в десятитысячной степени. А в стотысячной?

Кстати, выполняющиеся вычисления можно прервать с помощью комбинации клавиш <Ctrl>+<C> (Linux) или <Ctrl>+<Break> (Windows). Прервемся и мы, чтобы в следующей главе заняться настоящими программами.