Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Чаплыгин А.Н. Учимся програмировать вместе с Пи...doc
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
3 Мб
Скачать
☆

§7.9. Модуль string

Модуль string содержит полезные функции, заметно упрощающие работу со строками. Как обычно, необходимо сначала импортировать модуль до его использования:

>» import string

Модуль string включает функцию find(), которая делает то же самое, что и функция, написанная нами. Это распространенная ситуация в области программирования: прежде чем «изобретать велосипед», иногда стоит поискать готовые решения - всегда есть вероятность, что кто-то уже сталкивался с похожей задачей и решил ее лучше нас. К тому же разбираясь в чужом коде можно многому научиться.

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

>» fruit

= "banana"

>» index

= string.find(fruit,

"a")

>» print

index

1

Такой способ вызова помогает избежать конфликтов (и семантических ошибок, которые могут стать их следствием) между именами встроенных или написанных нами

16 Инкрементировать -увеличивать значение чего-либо на единицу; декрементировать -уменьшать значение на единицу.

81

Ревизия: 170

Строки

функций и именами функций, импортированных из модулей. Используя точку в качестве разделителя, мы можем указать какую версию f ind () хотим использовать.

В подтверждение мысли об «изобретении велосипеда», стоит заметить, что функция string .find () является более общим решением, чем наш вариант. Во-первых, может искать подстроки, не только символы:

>» string . find ( "banana", "na") 2

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

>» string . find ( "banana", "na", 3" 4

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

>» string. find("bob", "b", 1, 2 -1

В последнем примере, поиск оказался неудачным, потому что символ b не входит в диапазон индексов от 1 до 2 (не включая 2).

Упражнение. Выведите на экран справку по модулю string и ознакомьтесь со справочной информацией следующих функций: 1.

2.

capwordsQ

3.

countQ

4.

find()

5.

lowerQ

6.

replace 0

7.

splitQ

8.

upperQ

КС

периментируите с ними.

§7.10. Классификация символов

Иногда возникает потребность проверить регистр символа или выяснить не является ли он цифрой. Модуль string предоставляет несколько специальных переменных, которые могут быть полезны для этих целей.

Строка string, lowercase содержит все строчные символы. Аналогично в переменной string.uppercase хранятся все заглавные буквы. Попробуйте следущие примеры и посмотрите,какой результат выдаст интерпретатор:

>» print string . lowercase

>» print string .uppercase

>» print string . digits

Мы можем использовать эти переменные и функцию find() для классифицирования символов. Например, если find (lowercase, ch) возвращает результат, отличный от -1, то символ ch должен быть строчным.

82

Ревизия: 170

Строки

def isLower(ch):

return string.find(string.lowercase, ch) != -1

Так же мы можем использовать оператор in, котрый определяет, входит ли символ в строку или нет:

def isLower(ch):

return ch in string.lowercase

Альтернативно мы можем использовать оператор сравнения:

def isLower(ch):

return 'a' <= ch <= 'z'

Если ch между а и z, то это строчной символ.

Упражнение. Какая версия isLower() будет самой быстрой? Какие еще причины, помимо скорости, Вы можете привести для предпочтения одного другому?

Другая определенная в модуле string переменная содержит все пробельные (непечатаемые) символы, включая пробел, табуляцию ("\t") и символы возврата каретки ("\г") и новой строки ("\п") :

>» print string .whitespace

Как мы заметили в §6.6, пробельные символы перемещают курсор без печати чего-либо: они создают пустое пространство между видимыми символами.

§7.11. Строки Unicode

83

Ревизия: 170

Списки

Глава 8. Списки

§8.1. Создание списков

§8.2. Доступ к элементам списка

§8.3. Длина списка

§8.4. Принадлежность списку

§8.5. Списки и цикл for

§8.6. Операции над списками

§8.7. Срезы списков

§8.8. Изменение списков

§8.9. Удаление элементов списка

§8.10. Объекты и значения

§8.11. Ссылки на объекты

§8.12. Копирование списков

§8.13. Списки-параметры

§8.14. Вложенные списки

§8.15. Матрицы

§8.16. Списки и строки

84

Ревизия: 170

Кортежи

Глава 9. Кортежи

85

Ревизия: 170

Словари

Глава 10. Словари

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

Словари схожи со списками за исключением того, что в них могут использоваться в качестве индекса значение любого неизменяемого типа (например, str, float, tuple).

§10.1. Создание словаря

Для примера мы создадим англо-испанский словарь, индексами в котором будут служить строковые значения.

Один из способов создать словарь - начать с пустого словаря и добавлять элементы. Пустой словарь обозначается фигурными скобками {}:

>» eng2sp = {}

>» eng2sp [ ' one ' ] =

'uno'

>» eng2sp [ ' two ' ] =

' dos '

Первый оператор присваивания создает словарь названный eng2sp; остальные операторы добавляют новые элементы в словарь. Мы можем распечатать текущее значение словаря обычным способом:

>» print eng2sp

{'one': 'uno', 'two': 'dos'}

Элементы словаря выводятся через запятую; каждый элемент содержит индекс и значение, разделенные двоеточием. В словаре индексы называют ключами, а элементы называют парами ключ-значение.

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

|»> eng2sp = {'one': 'uno', 'two': 'dos', 'three': 'tres'} Если мы снова распечатаем значение eng2sp, мы получим небольшой сюрприз:

>» print eng2sp

{'one': 'uno', 'three': 'tres', 'two': 'dos'}

Пары ключ-значение расположены в другом порядке! К счастью нет повода беспокоиться о расположении, так как элементы словаря никогда не индексируются целыми индексами. Вместо этого для поиска соответствующего значения мы используем ключ:

>» print eng2sp [ ' two ' ]

' dos '

Ключ ' two' выдал значение ' dos ' хотя оно появляется в третьей паре ключ-значение.