Programming: Python:
В мире животных: Python 2
Абстракт. В статье рассмотрены действия с числовыми данными и
списками, а также основные управляющие конструкции языка Python 2.
Изложенный материал позволит читателю без затруднений использовать
интерпретатор Python в качестве программируемого калькулятора, например,
для решения нестандартных вычислительных задач - вычислений с длинными и
комплексными числами. Содержание
Интродюкшн. Всякий программист наверняка, хотя
бы раз, да сталкивался с задачей, связанной с обработкой "длинных" чисел.
И наверняка, если сталкивался, разработал для себя подпрограммы для работы
с такими числами (или скачал из Интернета %)). Но что делать, если вдруг
понадобилось спрограмить что-нибудь эдакое, под рукой своих инструментов
нет, а времени на написание программы не то, что в обрез, а в
пол-обреза? Если на компе есть интерпретатор Python - считай, спасен! У
Питона - встроенная поддержка длинных чисел. А также комплексных. Кроме
прочего, у него очень удобная и понятная манера оформления кода. Сейчас мы
разберем основные моменты этого языка, и, по прочтении статьи, читатель
сможет самостоятельно справиться с написанием своей вычислительной
Python-программы.
Обозначения. Фигурные скобки {} в определениях
используются для обозначения необязательных элементов.
Где взять и как установить. Скачать
установочный пакет можно с официального сайта разработчиков языка .
Новейшая версия на момент написания статьи - 2.3.4 (2.4 еще
идет как alpha 1). Приятно то, что в пакет установки
входит удобно структурированная и полная документация по программированию
в Питоне, поэтому отдельно скачивать документацию не нужно. Будем
считать, что мы скачали установочный файл Python-2.3.4.exe для Win32.
Смело его запускаем и следуем инструкциям.
Как записать и запустить программу. После
установки, в меню кнопки "Пуск" в разделе "Программы" появится подменю
"Python 2.0". Для запуска интерпретатора языка необходимо выбрать в это
подменю пункт "IDLE (Python GUI)". В результате появится окно
интерпретатора с заголовком "Python Shell". Это окно предназначено для
интерактивного ввода команд. Каждая вводимая строка тут же и выполняется.
Программу можно записать и в таком режиме, но это неудобно. Для того,
чтобы работать с текстом программы в обычном режиме, необходимо нажать
[Ctrl+N] - создать новое окно. В этом окне уже можно вводить текст
программы как в обычном текстовом редакторе.
Примечание -
А.Р. Безусловно, текст Питон-программы можно записать в любом текстовом
редакторе, но встроенный редактор IDLE удобен тем, что автоматически
расставляет отступы и, при необходимости, увеличивает их. Кроме того,
имеется очень полезная возможность закомментировать/раскомментировать
выделенный код.
После набора текста программы запустить ее
можно, нажав комбинацию [Ctrl+F5]. Не забудем сохранить программу перед
запуском. Если же мы все-таки забудем, система напомнит об этом сама, т.к.
запускать можно только программу, сохраненную в дисковом файле. При
запуске программы активным становится окно Python Shell - то, которое мы
открыли первым. Весь вывод программы и сообщения об ошибках будут
отображаться в этом окне.
Как выглядит Питон-программа. Никаких особых
обозначений для начала либо конца программы не нужно. Также нет никаких
особых условий на порядок следования элементов программы (кроме здравого
смысла, разумеется). Записываем инструкции в обычный текстовый файл - вот
она и программа.
Данные. Всякий элемент данных в Питоне - это
объект. Всякий объект имеет подпись (identity), тип и
значение. Подпись - штука постоянная и уникальная: с ее помощью
можно однозначно определить, тождественны ли два объекта (такую проверку
выполняет оператор is). Тип - указывает на поддерживаемые
объектом операции и его возможные значения. Тип объекта неизменяем. В
Питоне типы переменных явно не указываются. Они определяются из
контекста.
Примечание - А. Р. Кажущееся изменение типа при
присваивании объектов с разными типами на самом деле не является таковым:
после присваивания x=y, x и y - один и тот же объект (точнее, x и y -
ссылаются на один и тот же объект).
Все объекты делятся на
изменяемые (mutable) и неизменяемые (immutable). Понятия "изменяемый" и
"не-" являются довольно тонкими и связаны с возможностью изменения
значения самого объекта после его создания. Изменяемость объекта
однозначно определяется по его типу.
Далее мы рассмотрим числовые
типы и тип-список, как наиболее востребованные при составлении
вычислительных программ.
Числовые типы. Относятся к неизменяемым.
Т.е. для объекта x такого типа нельзя написать, например, x.value = 3. Для
изменения значения нужно писать x = 3 - присваивание объекта.
- 1. Целый (plain integer) тип.
- Размер может варьироваться от 32 бит и выше - в зависимости от
аппаратуры. В любом случае, выделяемая память - не меньше 32 бит.
Диапазон допустимых значений: не уже
-2147483648..2147483647.
Литералы, представляющие числа целого типа,
могут задаваться в одной из трех систем счисления: 8-, 10-, и 16-ричной.
Восьмеричный литерал начинается с 0 (012 = десятичное 10),
десятичный с ненулевой десятичной цифры (12 = десятичное 12), а
16-ный - с 0x или 0X (0x12 = 0X12 = десятичное 18). Разумеется,
все цифры литерала должны соответствовать выбранной системе
счисления. В случае 32-битового типа для 8- и 16-ричной систем
допустимы литералы, обозначающие десятичные значения 0..4294967295, но
значения, большие 2147483647, преобразовываются в отрицательное число
(вычитанием 4294967296).
- 2. Длинный целый (long integer) тип.
- Единственное ограничение на значения длинных целых чисел заключается
в объеме доступной памяти. Не хило, правда?
Литералы, представляющие
числа длинного целого типа, образуются приставкой к числу целого формата
префикса l либо L (1L - длинное целое, хотя и вмещается в 32 бита).
- 3. Тип с плавающей точкой (floating point).
- В Питоне представлен только числами с двойной точностью (уровня
математического сопроцессора). Как написано в документации, "... нет
причин усложнять язык двумя типами чисел с плавающей точкой". Диапазон
допустимых значений зависит от аппаратуры.
Литералы, представляющие
числа этого типа, задаются либо в записи через точку, либо в
экспоненциальном виде (5.2e-1 = 5.2E-1 = 0.52, 5.2e+1 = 5.2E+1 = 52).
Всегда трактуются как десятичные (03.5 - синтаксическая ошибка).
Поддерживается сокращенная запись: 1. = 1 с плавающей точкой, .1 = 0.1.
Показатель степени в экспоненциальной форме записи может быть только
целым (1.2e+0.2 - синтаксическая ошибка).
- 4. Комплексный (complex) тип.
- Представляет собой упорядоченную пару чисел с плавающей точкой. Все,
сказанное выше о числах с плавающей точкой, верно и для обеих
составляющих комплексного числа.
Литералов, представляющих
комплексные числа, - нет. Есть только литералы, представляющие мнимые
числа, т.е. комплексные числа с нулевой действительной частью. Такие
литералы образуются с помощью префикса j либо J (12j = 12J =
0.0+12i). Комплексные числа с ненулевой действительной частью
образуются суммированием действительного числа и мнимого: (4+7j) -
комплексное число. Доступ (на чтение!) к действительной и мнимой
компонентам комплексного числа z: z.real, z.imag.
Тип-список. Список - это изменяемая
упорядоченная последовательность элементов (т.е. по форме - обычный
массив) не обязательно одинакового типа. Обращение к i-му элементу списка
A производится так: A[i]. Также можно задействовать несколько стоящих
подряд элементов:
- A[i:j]
- - выбираются элементы с индексами i..(j-1)
- A[i:]
- - выбираются все элементы A, начиная с i-го
- A[:j]
- - выбираются все элементы A, заканчивая (j-1)-м
- A[:]
- - копия списка A
Если список имеет длину N, тогда его
элементы имеют номера 0..N-1. Т.к. список - изменяем, доступ к его
элементам - как на чтение, так и на запись. Создаются списки
так: A = [a0,a1,...,aN-1] -
простым перечислением элементов в квадратных скобках.
Примечание
- А.Р. Если элементы перечислить в круглых скобках, это был бы уже
другой тип - один из вариантов неизменяемых последовательностей, которые в
этой статье мы рассматривать не будем.
Операторы. Числовые операторы. Разберемся сначала, по каким
правилам Питон выполняет приведение типов переменных к общему, если
аргументы бинарного оператора имеют различные типы.
Итак,
правила приведения числовых типов:
- если один из аргументов - комплексное число
- - второй приводится к комплексному типу
- если оба аргумента - действительные и один из них - с плавающей
точкой
- - второй приводится к числу с плавающей точкой
- если оба аргумента - действительные и целые, и один из них - длинный
- - второй приводится к длинному целому
- Арифметические
-
- Унарные
-
- +x
- - оставляет x неизменным
- -x
- - изменяет знак x на противоположный
- Бинарные
-
- x+y, x-y, x*y
- - сложение, вычитание, умножение
- x/y
- - деление. Если оба аргумента - целочисленные, результатом будет
наименьшее целое число, не превышающее частного аргументов
- x%y
- - возвращает остаток от деления аргументов. Работает и для
нецелых чисел (12.37%2.01 = 0.31)
- x**y
- - возведение x в степень y
- Побитовые (применимы только к числам целых типов)
-
- Унарные
-
- ~x
- - побитовое инвертирование (отрицание) x
- Бинарные
-
- x&y
- - булево умножение (логическое "И")
- x|y
- - булево сложение (логическое "ИЛИ")
- x^y
- - булево сложение по модулю 2 (логическое "ИСКЛЮЧАЮЩЕЕ ИЛИ")
- Операторы сдвига (применимы только к числам целых типов)
-
- x<<n (x>>n)
- - сдвиг x на n (n≥0) бит влево (вправо)
Операторы над списками.
- X+Y
- - слияние списков
- A*n, n*A
- - слияние n копий списка A. Случай n<0 трактуется как и n=0 - в
результате получаем пустой список
Логические операторы. В контексте
логических операций численный ноль всех типов интерпретируются как ложь.
Все другие численные значения - истина. Особо обращаю внимание
читателя на то, что результат логических операций в Питоне существенно
отличается от аналогов в других языках программирования.
- not x
- - если x есть ложь, возвращается 0. В противном случае - 1
- x or y
- - если x есть истина, возвращается значение x. В противном случае
возвращается значение y
- x and y
- - если x есть ложь, возвращается значение x. В противном случае
возвращается значение y
Операции сравнения. Все сравнения возвращают
0 либо 1. Сравнения могут быть связаны в цепочку: a<b<c - то же
самое, что и a<b and b<c (вот только, если b является выражением,
тогда в первом случае оно вычисляется один раз, а во втором - два).
Цепочки могут иметь произвольную длину и содержать любые операции.
Раскрываются они, как в указанном примере, через логическое "И" всех
сравнений, составляющих цепочку. Например, a<b>=c - то же, что и
a<b and b>=c (смотрится несколько необычно, не правда ли?) Перед
числовым сравнением аргументы приводятся к общему типу. Списки
сравниваются путем поочередного сравнения элементов с одинаковыми
индексами, начиная с 0. Объекты разных типов всегда считаются
неравными.
- x<y
- - меньше
- x>y
- - больше
- x==y
- - равно
- x>=y
- - больше либо равно
- x<=y
- - меньше либо равно
- x<>y
- - не равно
- x!=y
- - не равно
- x is y
- - проверка тождественности объектов. Негативная форма - is not: x is
not y
- x in A
- - проверка, содержит ли правый аргумент-список значение-левый
аргумент. Негативная форма - not in: x not in A
Операторы
<> и != - эквиваленты, но предпочтение стоит отдавать оператору !=
(в стиле Си), т.к. <> - считается устаревшим.
Приоритеты операторов (в порядке
возрастания). or
and
not
in, not in
is, is not
<, <=, >, >=, <>, !=, ==
|
^
&
<, >
+, -
*, /, %
**
+x, -x
~x Для явного указания приоритетов, как и в любом другом языке
программирования, можно использовать круглые скобки.
Имена и пространства имен. Имена переменных
могут содержать символы 'a'..'z','A'..'Z','0'..'9','_'. Первый символ
имени - буква или символ подчеркивания. Длина имен ограничения не имеет.
Регистр символов - учитывается, т.е. var и Var - два разных
имени.
В Питоне всякое имя может принадлежать локальному,
глобальному либо встроенному (built-in) пространствам имен. Локальное
пространство присутствует, например, в функциях. Глобальное - пространство
основной программы. Поиск соответствия между именем и объектом
производится в порядке Л - Г - В. Если, к примеру, в функции используется
имя x, но в самой функции и ее формальных параметрах оно не определено,
производится поиск в глобальном пространстве - все такие имена "видны" из
тела функции. Но это "видение" дает доступ исключительно на чтение:
присваивание приводит к появлению локального имени, а расширенное
присваивание - к ошибке (о присваиваниях написано ниже). Для того, чтобы
можно было использовать имена из глобального пространства в левой части
присваиваний, необходимо в теле функции объявить желаемые имена переменных
со словом global: global x,y,z.
Простые предложения языка. Концом
простого предложения считается переход на новую строку либо символ ';'.
Если несколько простых предложений записаны в одну строку, они должны быть
отделены друг от друга символом ';'.
Примеры. x = 5
a = 4; b = a + 5 Комментарий начинается с символа '#' и
продолжается до конца строки. Многострочных комментариев -
нет.
Примечание - А.Р. По крайней мере, на моей машине с
WinXP и Python 2.0.1, мне не удалось "русифицировать" Питон по части
кириллических символов в тексте программы и, в том числе, в комментариях:
если набирать в русской раскладке, выводятся символы cp1252,
перекодированные из cp1251, и манипуляции с реестром (как для Photoshopа)
ничего не дают! При вставке же из буфера, в окне появляются верные
символы, однако Питон выдает ошибку даже при попытке
сохраниться. Поэтому во всех примерах комментарии будем записывать
на транслите.
Примеры. # Programma nichego ne delaet
i = 0 # Zadaem nachalnoe znachenie i Присваивание имеет
расширенный синтаксис по сравнению с другими языками. Как справа, так и
слева от знака равенства могут стоять списки: слева - список переменных,
справа - список значений. Если это не вызывает двусмысленности, скобки для
обозначения списков можно не ставить. Главное, чтобы количество объектов
по обе стороны знака равенства совпадало. Присваивания могут быть связаны
в цепочку. При присваивании сначала вычисляется все, что стоит в правой
части, а затем вычисленные значения поочередно присваиваются тому, что
стоит в левой части. Поэтому, например, выражение a, b = b, a - не
приводит к "затиранию" значений, а корректно обменивает значения
переменных a и b.
Примеры.
x = 2
a, b = -4, 5
z, y = [1,2,3], [4,7,[6,9]]
p, r, [s, u] = [1,2], 3, [4, [5,6,7]]
i, j = k, m = n = 0, 4 Последнее присваивание не ошибочно (как может
показаться), т.к. для списка [0, 4] просто опущены скобки, отсутствие
которых в данном случае не приводит к двусмысленности
Примеры
ошибок.
- x, y = 1
- - справа не хватает еще одного значения
- a, b, c = 1, 2, 3, 4
- - справа - лишнее значение
- z, [y, p] = 1, 2, 4
- - справа нужны скобки вокруг [2,4]
Кроме обычного
присваивания, в Питоне есть и расширенные присваивания в стиле Си,
которые получаем, приставляя слева к знаку равенства символы бинарных
операций, например: x += y (x = x + y). В общем случае: x op= y - то же,
что и x = x op y. Объединять такие присваивания в цепочки
нельзя.
Примечание - А.Р. Не смотря на то, что в документации
написано, что по обе стороны расширенного присваивания, как и прежде,
могут находиться списки, интерпретатор для такого "списочного"
присваивания выдает ошибку и пишет, что "расширенное присваивание к
спискам неприменимо".
break, continue - влияют на
ход выполнения циклов for, while. Рассматриваются ниже, вслед за
циклами.
return {список_выражений} - возвращает в
качестве значения функции список значений, вычисленных по
списку_выражений. Примеры см. далее в разделе, посвященном определению
функций.
print {список_выражений} - вывод на
стандартное устройство вывода (по умолчанию - монитор) списка значений,
вычисленного по списку_выражений. Перед каждым, отдельно взятым, выводимым
значением печатается пробел. Если в конце списка_выражений поставлена
запятая, print не будет переводить курсор на строку ниже. Если нет -
следующий вывод будет начинаться на следующей строке. Текстовые сообщения,
входящие в список_выражений, нужно заключать в двойные или одинарные
кавычки. Элементы списков, содержащихся в списке_выражений, выводятся в
скобках через запятую.
Примеры. Вывод значения переменной
x print "x = ",x
Вывод значения выражения
a*b*c print "a*b*c =",a*b*c
Вывод значения
переменных a, b, c без перевода строки print
a,b,c,
Вывод "1" - на первой строке, "2 3 4" - на второй и
"5" - на третьей print 1
print 2,3,
print 4
print 5
Составные предложения. Они содержат
другие предложения - простые и составные - и неким образом на них
действуют либо управляют их выполнением. Всякое составное
предложение имеет такой вид: тип_предложения:
сгруппированный_код
В общем случае, сгруппированный_код охватывает
несколько строк кода, но можно записывать их и в одну строку, пользуясь
разделителем ';'. Если сгруппированный_код охватывает несколько строк, все
эти строки должны иметь одинаковый отступ слева - на 1 или более пробелов
больший отступа для тип_предложения - таков принцип группирования
многострочного кода в Питоне. Эта особенность языка позволяет сделать
логическую структуру программы максимально прозрачной. Да и, вообще, -
удобно таким образом оформлять код.
В качестве типов предложений мы
рассмотрим if, for, while и определение функций. Условное предложение. if условное_выражение1: код1
{elif условное_выражение2: код2}
{elif условное_выражение3: код3}
{...}
{elif условное_выражениеN_1: кодN_1}
{else кодN} Каждый elif - это сокращенная форма записи пары else
if. Если верно условное_выражение1, выполняется код1; иначе, если верно
условное_выражение2, выполняется код2... Если ни одно из
условных_выражений не оказалось истинным, выполняется
кодN.
Примеры. Извлечение квадратного корня из x, если
x≥0 if x>=0: x **= 0.5 Определение
большего из чисел a, b if a>b: max = a
else: max = b Если x принадлежит одному из непересекающихся
интервалов (a,b) и (c,d), присвоить переменным r и p, соответственно,
величину ширины выбранного интервала и координату его середины; иначе
присвоить r=0 if a<x<b:
r = b-a
p = (a+b)/2
elif c<x<d: r = d-c; p = (c+d)/2
else: r = 0 Пример неверной записи. Сгруппированные строки
кода можно писать либо через ';', либо с одинаковым отступом. Миксовать
';' и отступы нельзя.
if x==2: y = 3;
z = 4
else: y = 2 Цикл с параметром. for переменная in список_значений: тело_цикла
{else: код_завершения} В отличие от других языков, в Питоне цикл for
выполняется для всех значений из заданного списка_значений. На элементы
списка никакие ограничения не накладываются. Его элементами могут быть
также и списки. После естественного завершения цикла выполняется
код_завершения. Если цикл был прерван посредством break, код_завершения не
выполняется. Особо обращаю внимание читателя на то, что если внутри
тела_цикла изменяется длина списка_значений (вставлен новый элемент или
удален существующий), при выполнении цикла некоторые значения из
списка_значений могут быть пропущены. Это связано с внутренним механизмом
цикла for в Питоне.
Для создания привычного цикла по арифметической
прогрессии (например, в Паскале - for i=1 to N, Си - for ( i=1; i<=N;
i+=3)) полезной оказывается функция range(), которая возвращает список
элементов арифметической прогрессии с заданными параметрами. Формат
вызова: range({start,} stop{, step}). Тип всех аргументов -
целый (не длинный). Как видно, обязательным является только параметр stop.
Значения по умолчанию для двух других: start = 0, step = 1. step - задает
шаг прогрессии, start - значение первого элемента. Если step>0, тогда
последний элемент возвращаемого списка - наибольшее значение вида
start+i*step (i≥0), не превышающее stop. Если step<0, последний элемент
возвращаемого списка - наименьшее значение вида start+i*step (i≥0),
превышающее stop. Некоторые частные случаи: range(N) - список значений
0..N-1, range(1,N+1) - список значений
1..N.
Примеры. Вычисление суммы первых N натуральных
чисел. s = 0
for i in range(1,N+1):
s += i
print "Sum = ",s Вычисление суммы натуральных чисел, кратных K и не
превышающих N
s = 0
for i in range(K,N+1,K)
s += i
print "Sum = ",s Слияние списков A = [1,2,3]
B = [4,5]
C = [6,7,8]
D = []
for i in [A,B,C]:
D += i
print "A+B+C = ",D Цикл с предусловием. while условное_выражение: тело_цикла
{else: код_завершения} Тело_цикла выполняется, пока
условное_выражение верно. Если при первом вычислении условного_выражения
оно оказалось ложным, тело_цикла не выполнится ни разу. После
естественного завершения цикла выполняется код_завершения. Если цикл был
прерван посредством break, код_завершения не
выполняется.
Примеры. Вычисление наибольшего общего
делителя чисел a и b. Алгоритм Евклида. x, y = a, b
while x!=y:
while x>y:
x -= y
x, y = y, x
print "NOD(",a,",",b,") = ",x Управление
ходом выполнения циклов. break - прерывает выполнение
ближайшего охватывающего цикла for или while. continue -
приводит к переходу на начало тела цикла for или while. Для цикла for
производится переход к следующему значению параметра
цикла.
Примеры. Определяем, равно ли нулю одно из чисел
a, b, c for i in [a,b,c]:
if i==0:
print "a*b*c = 0"
break
else: print "a*b*c !=0" Суммирование величин, обратных ненулевым
элементам списка A s = 0
for i in A:
if i==0: continue # na nol delit nelzya
s += 1/i
print "Sum = ",s Поиск первого нуля в списке A, содержащем, как
минимум, один ноль i = 0
while 1:
if not A[i]: break
i += 1
print "A[",i,"]= 0" Вычисление модуля вектора (списка) A m, i = 0, 0
while i<len(A):
i += 1
if A[i-1]==0: continue
m += A[i-1]**2
print "|A| = ",m**0.5 Определение функций.
def имя_функции (список_параметров): код_функции В
списке_параметров через запятую перечисляются имена формальных параметров.
Чтобы указать, что, кроме указанных, функция может принимать произвольное
количество аргументов, необходимо добавить еще один формальный параметр и
перед его именем поставить символ '*'. Параметр, помеченный '*', может
стоять только последним. При вызове такой функции все дополнительные
параметры будут помещены в неизменяемый список с соответствующим именем.
Для параметров можно указывать и значения по умолчанию - через знак
равенства. Как и в Си, параметры со значениями по умолчанию должны стоять
последними в списке_параметров. Возврат значения функции производится
так: return {список_выражений}. Если список_выражений опущен
(т.е. имеем не функцию, а процедуру), возвращается объект None, который
можно проверить с помощью оператора is (is not). Если предложение return
опущено, по достижении конца кода_функции возвращается объект
None.
Примеры. Функция для вычисления факториала числа def fact(n):
k=1L # nachalnoe znachenie factoriala. Ono zhe - rezultat dlya n=0,1
for m in range(2,n+1): k *= m
return k
fact(4) = 24
fact(0) = 1
fact(21) = 51090942171709440000 Функция для вычисления суммы цифр
числа n в системе счисления с основанием base≥2
def sumdig( n, base=10): # opredelyaem desyatichnuyu sistemu no umolchaniyu
s = 0 # nachalnoe znachenie summiy
while n:
s += n % base # zanosim v summu ocherednuyu tsifru
n /= base # perehod k sleduyuschey tsifre
return s
sumdig(10,2) = 2
sumdig(38983) = 31
sumdig(87324,8) = 20
sumdig(173,3) = 5 Функция для суммирования произвольного количества
переданных ей чисел def sum(*a):
s = 0
for i in a: s += i
return s
sum(1,2,3,4,5) = 15
sum(-1,1,10,20,100) = 130
Некоторые полезные встроенные функции.
- Числовые (работают на всех числовых типах)
-
- abs(x)
- - модуль x
- pow(x,y)
- - x в степени y
- Списковые
-
- len(A)
- - длина списка A
- min(A), max(A)
- - минимальный и максимальный элемент списка A
Методы объекта "список". Т.к. список -
объект, у него есть свои методы. Они могут оказаться полезными при работе.
- append(x)
- - добавление элемента со значением x в конец списка
- extend(L)
- - добавление в конец списка всех элементов списка L
- insert(i, x)
- - вставка элемента со значением x перед i-м элементом. Именно
вставка, т.к. индексы всех элементов с номерами k≥i в результате вставки
увеличиваются на 1
- remove(x)
- - удаление из списка первого элемента со значением x. Если такого
элемента нет - ошибка
- pop({i})
- - удаление из списка элемента с заданным индексом и возвращение его
значения. Если индекс не указан - работает последний элемент списка
- index(x)
- - возвращение индекса первого элемента списка со значением x. Если
такого элемента нет - ошибка
- count(x)
- - возвращение количества повторений значения x среди элементов
списка
- sort()
- - сортировка элементов списка. Отсортированный список помещается на
место исходного
- reverse()
- - изменение порядка следования элементов списка на обратный
Примеры. A = [1,2,4]
A.append(5) # A = [1,2,4,5]
A.extend([25,3,10]) # A = [1,2,4,5,25,3,10]
A.insert(2,3) # A = [1,2,3,4,5,25,3,10]
A.remove(4) # A = [1,2,3,5,25,3,10]
x = A.pop() # x = 10, A = [1,2,3,5,25,3]
i = A.index(5) # i = 3
c = A.count(3) # c = 2
A.sort() # A = [1,2,3,3,5,25]
Модули math и cmath. В Питоне есть множество
стандартных модулей, содержащих полезные функции на все случаи жизни.
Например, модуль math - содержит математические функции для действительных
чисел, а cmath - для комплексных. Подключение модуля к программе
осуществляется очень просто - с помощью предложения import имя_модуля. Для
доступа к функциям или переменным модуля необходимо использовать приставку
"имя_модуля." перед именем: math.pi, math.cos(1).
Рассмотрим состав
модулей math и cmath. В них обоих определены следующие константы:
- pi
- - число "пи"
- e
- - основание натурального логарифма
Функции модуля math
работают только с действительными числами и возвращают действительное
значение. Функции модуля cmath работают с комплексными и действительными
числами (которые при передаче аргументов преобразуются в комплексные) и их
результат - всегда комплексное число, даже если мнимая часть равна
нулю. Большинство функций в модуле math имеют соответствующую версию в
модуле cmath и наоборот. Вот эти общие функции:
- acos(z)
- - арккосинус
- asin(z)
- - арксинус
- atan(z)
- - арктангенс
- cos(z)
- - косинус
- cosh(z)
- - гиперболический косинус
- exp(z)
- - экспонента
- log(z)
- - натуральный логарифм
- log10(z)
- - логарифм по основанию 10
- sin(z)
- - синус
- sinh(z)
- - гиперболический синус
- sqrt(z)
- - квадратный корень
- tan(z)
- - тангенс
- tanh(z)
- - гиперболический тангенс
Некоторые функции модуля
math, у которых нет аналогов в cmath:
- atan2(y, x)
- - возвращает atan(y/x)
- ceil(x)
- - наименьшее целое число, превышающее x
- fabs(x)
- - модуль
- floor(x)
- - наибольшее целое число, не превышающее x
- pow(x, y)
- - возведение x в степень y
Функции модуля cmath, у
которых нет аналогов в math:
- acosh(x)
- - ареа-косинус
- asinh(x)
- - ареа-синус
- atanh(x)
- - ареа-тангенс
Примеры.
import math
print math.cos(math.pi) # vivod "-1"
x = 1
print math.cos(x)**2+math.sin(x)**2 # vivod "1"
print math.asin(1) # vivod "pi/2" import cmath
z = 2+3j
print cmath.log(cmath.sinh(z)+cmath.cosh(z)) # vivod 2+3j, t.k. chx+shx=exp(x)
print cmath.sqrt(z)**2 # vivod 2+3j
Заключение. Безусловно, главное в Питоне - это
не арсенал его вычислительных возможностей. Это очень гибкий и богатый
язык, не стесняющий разработчика в средствах выражения своих замыслов. Но
уже в сфере реализации вычислительных алгоритмов он оказывается очень
удобным и действенным инструментом, отчасти из-за своей схожести с
псевдокодом: ведь в Питон-программе главное - это инструкции, а не
определения переменных. Благодарю за внимание!
Что почитать? Официальная документация по
языку выложена на сайте . Там же - подборки статей,
ссылки на подписные листы и многое другое.
Александр Рябов. Июль 2004, Украина. ryabov@ua.fm
При перепечатке любого материала
с сайта, видимая ссылка на источник www.warayg.narod.ru
и все имена, ссылки авторов обязательны.
© 2005
|