Опубликован: 14.06.2015 | Уровень: для всех | Доступ: платный
Самостоятельная работа 6:

Строки

< Самостоятельная работа 1 || Самостоятельная работа 6: 123

12.5. Строки являются неизменяемыми

Заманчиво использовать оператор [ ] с левой стороны при присвоении с намерением изменить символ в строке.

Например:

>>> greeting = 'Hello, world!'
>>> greeting[0] = 'J'
TypeError: object does not support item assignment

Объект (object) в этом случае является строкой, элемент (item) - символ, который пытаемся изменить. На данный момент будем считать, что объект - некоторая вещь как переменная, но мы уточним это определение позже.

Элемент - одно из значений последовательности.

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

>>> greeting = 'Hello, world!'
>>> new_greeting = 'J' + greeting[1:]
>>> print new_greeting
Jello, world!

Этот пример соединяет новую первую букву со срезом greeting, это не влияет на оригинальную строку.

12.6. Циклы и счет

Следующая программа подсчитывает количество вхождений буквы а в строку:

>>> word = 'banana'
>>> count = 0
>>> for letter in word:
if letter == 'a':
count = count + 1
>>> print count
3

Эта программа демонстрирует другой шаблон вычислений под названием - счетчик (counter). Переменной count присваивается нулевое начальное значение, затем это значение инкрементируется (увеличивается на 1) всякий раз, когда встречается символ а. Когда цикл завершается, в count содержится результат подсчета.

12.7. Оператор in

Слово in - это логический оператор, который принимает две строки и возвращает True, если первая строка является подстрокой во второй строке:

>>> 'a' in 'banana'
True
>>> 'seed' in 'banana'
False

12.8. Сравнение строк

Оператор сравнения работает для строк. Рассмотрим вариант, если две строки одинаковые (equal):

>>> word = 'banana'
>>> if word == 'banana':
print 'All right, bananas.'

Другие операции сравнения полезны для ввода слова в алфавитном порядке:

word = 'banan'

if word < 'banana':
       print 'Your word, ' + word + ', comes before banana.'
elif word > 'banana':
     print 'Your word, ' + word + ', comes after banana.'
else:
     print 'All right, bananas.'

Python не обрабатывает буквы верхнего и нижнего регистра так же как это делают люди. Все буквы верхнего регистра идут перед буквами нижнего регистра, так:

Your word, Pineapple, comes before banana.

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

12.9. Строковые методы

Строка - пример объекта в Python. Объекты содержат данные (фактически саму строку) и методы, которые являются функциями, встроенными в объект и доступными для любого экземпляра (instance) объекта.

В Python есть функция dir, которая выводит список доступных методов для объекта. Функция type показывает тип объекта:

>>> stuff = 'Hello world'
>>> type(stuff)
< type 'str'>
>>> dir(stuff)
['capitalize', 'center', 'count', 'decode', 'encode',
'endswith', 'expandtabs', 'find', 'format', 'index',
'isalnum', 'isalpha', 'isdigit', 'islower', 'isspace',
'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip',
'partition', 'replace', 'rfind', 'rindex', 'rjust',
'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines',
'startswith', 'strip', 'swapcase', 'title', 'translate',
'upper', 'zfill']
>>> help(str.capitalize)
Help on method_descriptor:
capitalize(...)
S.capitalize() -> string
Return a copy of the string S with only its first character
capitalized.
>>>

Вы можете воспользоваться функцией help, чтобы получить дополнительную информацию о методе. Лучший источник документации по строковым методам находится тут: docs.python.org/library/string.html

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

Например, метод upper получает на вход строку и возвращает новую строку со всеми буквами в верхнем регистре:

>>> word = 'banana'
>>> new_word = word.upper()
>>> print new_word
BANANA

Пустые круглые скобки означают, что метод не имеет аргументов. Вызов метода называется вызовом (invocation), в этом случае мы можем сказать, что вызвали метод upper объекта word.

Рассмотрим строковый метод find:

>>> word = 'banana'
>>> index = word.find('a')
>>> print index
1
>>> 

В этом примере мы вызвали метод find объекта word и передали в качестве входного параметра букву, которую ищем. Метод find может искать подстроки, а не только отдельные символы:

>>> word.find('na')
2

В качестве второго аргумента метод find принимает индекс, с которого начинается поиск вхождения:

>>> word.find('na', 3)
4

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

>>> line = ' Here we go '
>>> line.strip()
'Here we go'

Некоторые методы, такие как startswith возвращают логические значения:

>>> line = 'Please have a nice day'
>>> line.startswith('Please')
True
>>> line.startswith('p')
False

Предварительно применим метод lower, переводящий строку в нижний регистр:

>>> line = 'Please have a nice day'
>>> line.startswith('p')
False
>>> line.lower()
'please have a nice day'
>>> line.lower().startswith('p')
True

В последнем примере мы вызвали в одном выражении подряд два метода.

< Самостоятельная работа 1 || Самостоятельная работа 6: 123
Алексей Виноградов
Алексей Виноградов

Видеокурс выложен на сайте Altube.ru вместо Youtube и плеер Altube не поддерживает субтитры. Прошу решить вопрос о предоставлении русских субтитров в этом англоязычном видеокурсе.

Петр Олейников
Петр Олейников

Данные файлы неоходимы не только для самостоятельных работ, но и для тестов. А по ссылкам в лекциях они не доступны, выдает ошибку 404.

Александр Душечкин
Александр Душечкин
Россия, Ижевск, ИжГТУ, 2002
Дмитрий Голиков
Дмитрий Голиков
Россия