Опубликован: 14.06.2015 | Доступ: свободный | Студентов: 4655 / 500 | Длительность: 21:48:00
Авторские права: Creative Commons Attribution 3.0
Самостоятельная работа 6:

Строки

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

Смотреть лекцию на: ИНТУИТ | youtube.com

Если проблемы с видео, нажмите выше ссылку youtube

Get Adobe Flash Player

По ссылке youtube выложено видео с русскими титрами.

12.1. Строка - это последовательность

Строка - это последовательность символов. Вы можете получить доступ к одному символу с помощью оператора скобок:

>>> fruit = 'banana'
>>> letter = fruit[1]

Вторая инструкция извлекает символ из позиции 1, хранящейся в переменной fruit и помещает его в переменную letter.

Выражение в скобках называется индексом (index). Индекс обозначает, какой символ в последовательности вы хотите получить:

>>> print letter
a

Для большинства людей, первая буква в 'banana' это b, а не a. Но в Python индекс - это смещение от начала строки, смещение для первого символа – нуль:

>>> letter = fruit[0]
>>> print letter
b

Таким образом, b - это нулевая буква 'banana', а - это первая буква и т.д.


Вы можете использовать любое выражение, включая переменные или операторы, в качестве индекса, но значение индекса должно быть целочисленным (integer):

>>> letter = fruit[1.5]
TypeError: string indices must be integers

12.2. Получение длины строки с использованием len

len - встроенная функция, которая возвращает число символов в строке:

>>> fruit = 'banana'
>>> len(fruit)
6

Чтобы получить последний символ в строке можно попробовать следующее:

>>> length = len(fruit)
>>> last = fruit[length]
IndexError: string index out of range

Причина IndexError в том, что не существует буквы с индексом 6 в строке 'banana', поэтому исправленный вариант:

>>> last = fruit[length-1]
>>> print last
a

Взамен можно использовать отрицательные индексы, которые считаются с конца. Выражение fruit[-1] выдаст последний символ, fruit[-2] - второй с конца строки и т.д.

12.3. Обход через строку с помощью цикла

Множество вычислений включают посимвольную обработку строк. Часто они начинаются с начала строки, выбирают каждый символ по очереди, делают что-то с ним и продолжают до окончания строки. Этот шаблон обработки называется обход (traversal). Один из вариантов написания обхода с помощью цикла while:

>>> index = 0
>>> while index < len(fruit):
       letter = fruit[index]
       print letter
       index = index + 1
       
       
b
a
n
a
n
a

Этот цикл обходит строку и отображает каждый символ строки отдельно.

Условием цикла является index < len(fruit), т.е. когда index становится равным длине строки, условие становится ложным (false) и тело цикла прекращает выполняться.

Другой способ написания обхода с помощью цикла for:

>>> for char in fruit:
print char

Каждый раз, в цикле следующий символ в строке присваивается переменной char. Цикл работает, пока не закончатся символы.

12.4. Срез строки

Часть строки называется срезом (slice). Выбор среза аналогичен выбору символа:

>>> s = 'Monty Python'
>>> print s[0:5]
Monty
>>> print s[6:12]
Python
>>> 

Оператор [n:m] возвращает часть строки от n-ого символа до m-ого символа, включая первый, но исключая последний. Это противоречивое поведение, но оно позволяет представить индексные указатели между символами, как на следующей диаграмме:


Если опустить первый индекс (перед двоеточием), то срез будет начинаться с начала строки. Если вы опустите второй индекс - срез завершится в конце строки:

>>> fruit = 'banana'
>>> fruit[:3]
'ban'
>>> fruit[3:]
'ana' 

Если первый индекс больше или равен второму, то результатом будет пустая строка (empty string), представленная двумя кавычками:

>>> fruit = 'banana'
>>> fruit[3:3]
''
< Самостоятельная работа 1 || Самостоятельная работа 6: 123
Ксения Шошина
Ксения Шошина

курс Программирование на Python

Илья Кизилов
Илья Кизилов

В лекции приводится программа для сортировки слов по их длинне. В коде ошибка. Я исправил так:

def sort_by_length(words):

words = words.split()

t = []

for word in words:

t.append((len(word), word))

t.sort(reverse=True)

res = []

for length, word in t:

res.append(word)

return res

print(sort_by_length(words))

 

Кто ещё как сделал?

 

Алмагул Бектлеуова
Алмагул Бектлеуова
Казахстан, г. Алматы, АГУ имени Абая, 1999
Андрей Милых
Андрей Милых
Россия, г. Донской Тульской области, Средняя школа № 12, 1987