InfoCity
InfoCity - виртуальный город компьютерной документации
Реклама на сайте







Размещение сквозной ссылки

 

Глава 3. Неформальное введение в Python


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


3.1 Использование Python в качестве калькулятора


Давайте испробуем несколько простых команд Python. Запустите интерпретатор и дождитесь появления первичного приглашения ">>>" (это не должно занять много времени.)


3.1.1 Числа


Интерпретатор работает как простой калькулятор: Вы можете набрать выражение, и он выдаст результат. Синтаксис выражений прост: операторы + , - , * и / работают как и в большинстве других языков (например, Pascal или C); для группирования можно использовать скобки:

>>> 2+2
4
>>> # Это комментарий
... 2+2
4
>>> 2+2 # и комментарий в той же строке, что и код
4
>>> (50-5*6)/4
5
>>> # Целочисленное деление
... 7/3
2
>>> 7/-3
-3
>>>

Подобно С, знак равенства (=) используется для присваивания значения переменной. Присвоенное значение не выводится:

>>> width=20
>>> height=5*9
>>> width*height
900
>>>

Значение может быть одновременно присвоено нескольким переменным:

>>> x=y=z=0 # x, y, и z равны нулю
>>> x
0
>>> y
0
>>> z
0
>>> 

Имеется полная поддержка вещественных чисел; операторы со смешанными типами операндов конвертируют целочисленные операнды к числам с плавающей точкой:

>>> 4*2.5/3.3
3.0303030303
>>> 7.0/2
3.5
>>> 

3.1.2 Строки


Кроме чисел, Python также манипулирует со строками (string), заключенными в одинарные или двойные кавычки:

>>> ’spam eggs’
‘spam eggs’
>>> ’doesn\’t’
"doesn’t"
>>> ’"Да," сказал он.’
’"Да," сказал он.’
>>> "\"Да,\" сказал он."
’"Да," сказал он.’
>>> ’"Isn\’t," she said.’
’"Isn\’t," she said.’
>>> 

Строки пишутся точно также, как они набраны для ввода: внутри кавычек и с кавычками, и другими специальными символами, выводимыми с помощью обратного слэша ( \ ), который необходим для показа точного значения. Строка заключается в двойные кавычки, если она сама содержит одинарные кавычки и не содержит двойных, в противном случае - в апострофах (одинарных кавычках). Оператор print , описываемый ниже, можно использовать для вывода строк без всяких кавычек.

Строки можно конкатенировать (сцеплять друг с другом) с помощью оператора + . Оператор * позволяет получить несколько копий строки:

>>> word=’Help’+’A’
>>> word
‘HelpA’
>>> ’<’+word*5+’>’
‘’
>>> 

Строки можно индексировать; первый символ строки имеет индекс 0, так же как и в С.

Отдельного символьного типа не существует; символ - это просто строка длины 1. Подобно Icon, подстроки могут быть специфицированы в кусочной нотации: два индекса, разделенных двоеточием.

>>> word[4]
‘A’
>>> word[0:2]
‘He’
>>> word[2:4]
‘lp’
>>>

Кусочная индексация имеет полезные значения по умолчанию: опущенный первый индекс считается равным 0, опущенный второй индекс - длине строки.

>>> word[:2] # Первые два символа
'He'
>>> word[2:] # Все кроме первых двух символов
'lpA'
>>> 

Полезный инвариант кусочных операций: s[:i]+s[i:] равно s

>>> word[:2]+word[2:]
'HelpA'
>>> word[:3]+word[3:]
'HelpA'
>>> 

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

>>> word[1:100]
'elpA'
>>> word[10:]
''
>>> word[2:1]
''
>>> 

Индексы могут быть отрицательными, для начала отсчета справа. Например:

>>> word[-1] # Последний символ
'A'
>>> word[-2] # Предпоследний символ
'p'
>>> word[-2:] # Два последних символа
'pA'
>>> word[:-2] # Все, кроме двух последних символов
'Hel'
>>>

Но -0 все равно, что 0, и не будет никакого отсчета справа!

>>> word[-0] # (поскольку -0 равен 0)
'H'
>>>

Отрицательные индексы вне диапазона отсекаются, но не пытайтесь это использовать для простых (не кусочных) индексов:

>>> word[-100:]
'HelpA'
>>> word[-10] # ошибка
Traceback (innermost last):
  File "", line 1
IndexError: string index out of range
>>> 

Лучший способ для запоминания того, как работает кусочное выделение - это считать индексы указывающими между символами, с номером 0 на левой границе первого символа. А правая граница последнего символа строки длины n имеет индекс n, например:

 +---+---+---+---+---+
 | H | e | l | p | A |
 +---+---+---+---+---+
 0   1   2   3   4   5
-5  -4  -3  -2  -1

Первая строка чисел дает позицию индексов 0..5 в строке; вторая строка - соответствующие отрицательные индексы. Кусок от i до j включает в себя все символы между краями, помеченными i и j , соответственно.

Для неотрицательных индексов длина куска равняется разности индексов, если они оба в пределах диапазона, например, длина куска word[1:3] равна 2.

Встроенная функция len() возвращает длину строки:

>>> s=’supercalifragilisticexpialidocious’
>>> len(s)
34
>>> 

3.1.3 Списки


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

Самым универсальным является список (list), который может быть записан в виде перечня значений (элементов), разделенных запятыми, между квадратными скобками. Элементы списка не обязаны быть одного типа.

>>> a=[‘spam’,‘eggs’,100,1234]
>>> a
[‘spam’,‘eggs’,100,1234]
>>> 

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

>>> a[0]
‘spam’
>>> a[3]
1234
>>> a[-2]
100
>>> a[1:-1]
[‘eggs’,100]
>>> a[:2]+[‘bacon’,2*2]
[‘spam’,‘eggs’,‘bacon’,4]
>>> 3*a[:3]+[‘Boe!’]
[‘spam’,‘eggs’,100,‘spam’,‘eggs’,100,‘spam’,‘eggs’,100,‘Boe!’]
>>>
 

В отличие от строк, которые неизменяемы (немутируемы), существует возможность изменения отдельных элементов списка:

>>> a
[‘spam’,‘eggs’,100,1234]
>>> a[2]=a[2]+23
>>> a
[‘spam’,‘eggs’,123,1234]
>>> 

Присваивания кускам также возможны, и это даже может менять размер списка:

>>> # Замена нескольких элементов:
... a[0:2]=[1,12]
>>> a
[1,12,123,1234]
>>> # Удаление нескольких:
... a[0:2]=[]
>>> a
[123,1234]
>>> # Вставка:
... a[1:1]=[‘bletch’,‘xyzzy’]
>>> a
[123,‘bletch’,‘xyzzy’,1234]
>>> a[:0]=a # Вставка копии самого себя в начало
>>> a
[123,‘bletch’,’xyzzy’,1234,123,‘bletch’,’xyzzy’,1234]
>>> 

Встроенная функция len() также применима ко строкам:

>>> len(a)
8
>>> 

Списки могут быть вложенными (списки, содержащие другие списки), например:

>>> q=[2,3]
>>> p=[1,q,4]
>>> len(p)
3
>>> p[1]
[2,3]
>>> p[1][0]
2
>>> p[1].append(‘xtra’) # См. раздел 5.1
>>> p
[1,[2,3,’xtra’],4]
>>> q
[2,3,’xtra’]
>>> 

В последнем примере p[1] и q на самом деле ссылаются на один и тот же объект! Мы позднее вернемся к объектной семантике.


3.2 Первые шаги в программировании


Безусловно, мы можем использовать Python для намного более сложных задач, нежели сложения 2 плюс 2. Например, мы можем вывести первые члены последовательности чисел Фибоначчи:

>>> # Числа Фибоначчи:
... # сумма двух элементов определяет следующий член последовательности
... a,b=0,1
>>> while b<10:
...       print b
...       a,b=b,a+b
... 
1
1
2
3
5
8
>>> 

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

  • Первая строка содержит составное присваивание (multiple assignment): переменные a и b одновременно получают новые значения 0 и 1. В последней строке это снова используется, демонстрируя, что выражения в правой части вычисляются перед, как будет осуществлено присваивание.

  • Цикл while выполняется пока условие (здесь: b<10 ) является истинным. В Python, как и в С, любое ненулевое целое значение является истиной; ноль - ложь. Условие еще может быть строкой или списком, фактически, любым значением последовательного типа 7 ; все, с ненулевой длиной - истина, пустая последовательность - ложь. Проверка, использованная в примере, является простым сравнением. Стандартные операторы сравнения записываются также, как в С: <, >, ==, <=, >=, и != .

  • Тело цикла записано с абзацным отступом: отступ - это способ Python группировки операторов. Python еще не предоставляет разумной услуги по автоматическому сдвигу вводимых строк, поэтому, Вам необходимо нажимать клавишу табуляции или пробела для каждой строки с отступом. На практике Вы будете готовить более сложный ввод для Python с помощью текстового редактора; большинство текстовых редакторов осуществляют автоматический сдвиг. Когда составной оператор вводится интерактивно, за ним должна следовать пустая строка, как признак завершения (поскольку разборщик не может угадать когда Вы ввели последнюю строку).

  • Оператор print выводит значение выражения (выражений), переданных ему. Он отличается от простого вывода значения выражения (которым мы пользовались ранее в примерах калькулятора), в том, что он обрабатывает сложные выражения и строки. Строки выводятся без кавычек, и между аргументами вставляется пробел, так что Вы можете удобно форматировать вывод, как здесь:

        >>> i=256*256
        >>> print ‘Значение i равно’,i
        Значение i равно 65536
        >>>
        

Запятая в хвосте позволяет избежать перехода на новую строку:

>>> a,b=0,1
>>> while b<1000:
...     print b,
...     a,b=b,a+b
... 
1 1 2 3 4 8 13 21 34 55 89 144 233 377 610 987
>>> 

Интерпретатор сам вставляет новую строку перед выдачей приглашения, если последняя строка не была завершена.

[Назад][Содержание][Вперед]


Реклама на InfoCity

Яндекс цитирования



Финансы: форекс для тебя








1999-2009 © InfoCity.kiev.ua