Видеокурс выложен на сайте Altube.ru вместо Youtube и плеер Altube не поддерживает субтитры. Прошу решить вопрос о предоставлении русских субтитров в этом англоязычном видеокурсе. |
Строки
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
В последнем примере мы вызвали в одном выражении подряд два метода.