Струны

  1. 6,1 Строка - это последовательность
  2. 6,4 Струнные ломтики
  3. 6,11 Оператор формата

6,1 Строка - это последовательность

Строка - это последовательность символов. Вы можете получить доступ к символам по одному с помощью оператора скобок: >>> fruit = 'banana' >>> letter = fruit [1] Второй оператор извлекает символ в позиции индекса 1 из переменной fruit и присваивает его букве переменная.
Выражение в скобках называется индексом . Индекс указывает, какой символ в последовательности вы хотите (следовательно, имя).
Но вы можете не получить то, что ожидаете: >>> напечатать букву a Для большинства людей первая буква «банан» - это b, а не a. Но в Python индекс является смещением от начала строки, а смещение первой буквы равно нулю. >>> letter = fruit [0] >>> print letter b Таким образом, b - это 0-я буква («ноль-эти») «банана», a - это 1-я буква («один-эт»), а n - это 2-е («два-эт») письмо.


Вы можете использовать любое выражение, включая переменные и операторы, в качестве индекса, но значение индекса должно быть целым числом. В противном случае вы получите:
>>> letter = fruit [1.5] TypeError: строковые индексы должны быть целыми числами

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

len - это встроенная функция, которая возвращает количество символов в строке: >>> fruit = 'banana' >>> len (fruit) 6 Чтобы получить последнюю букву строки, у вас может возникнуть желание попробовать что-то вроде этот:
>>> length = len (fruit) >>> last = fruit [length] IndexError: строковый индекс выходит за пределы диапазона Причина IndexError заключается в том, что в «банане» нет буквы с индексом 6. Так как мы начали считать в ноль, шесть букв пронумерованы от 0 до 5. Чтобы получить последний символ, вы должны вычесть 1 из длины: >>> last = fruit [length-1] >>> print last a В качестве альтернативы, вы можете использовать отрицательные индексы, которые считаются в обратном направлении от конца строки. Выражение fruit [-1] возвращает последнюю букву, fruit [-2] - второе до последнего и т. Д.

6,3 Обход строки через петлю

Многие вычисления включают обработку строки по одному символу за раз. Часто они начинаются с начала, выбирают каждого персонажа по очереди, что-то с ним делают и продолжают до конца. Эта схема обработки называется обходом . Один из способов написания обхода - использовать цикл while: index = 0, а index <len (fruit): letter = fruit [index] print letter index = index + 1 Этот цикл проходит строку и отображает каждую букву в строке отдельно. , Условие цикла - это индекс <len (fruit), поэтому, когда индекс равен длине строки, условие ложно, и тело цикла не выполняется. Последний доступ к символу - это индекс с индексом len (fruit) -1, который является последним символом в строке.

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


Другой способ написания обхода - цикл for: для символа в фрукте: print char Каждый раз в цикле следующему символу в строке присваивается переменная char. Цикл продолжается до тех пор, пока не останется ни одного символа.

6,4 Струнные ломтики

Сегмент строки называется срезом . Выбор фрагмента аналогичен выбору символа: >>> s = 'Monty Python' >>> print s [0: 5] Monty >>> print s [6:13] Python Оператор [n: m] возвращает часть строки от символа «n-eth» до символа «m-eth», включая первый, но исключая последний.
Если вы опустите первый индекс (перед двоеточием), срез начнется с начала строки. Если вы опустите второй индекс, срез будет идти до конца строки: >>> fruit = 'banana' >>> fruit [: 3] 'ban' >>> fruit [3:] 'ana' Если первый index больше или равен секунде, результатом является пустая строка , представленная двумя кавычками:
>>> fruit = 'banana' >>> fruit [3: 3] "Пустая строка не содержит символов и имеет длину 0, но, кроме этого, она такая же, как и любая другая строка.
Упражнение 2 Принимая во внимание тот факт, что фрукты - это нить, что означает фрукт [:]?

6,5 Строки неизменны

Соблазнительно использовать оператор [] в левой части присваивания с намерением изменить символ в строке. Например:
>>> приветствие = 'Привет, мир!' >>> приветствие [0] = 'J' TypeError: объект не поддерживает назначение элемента. В данном случае «объект» - это строка, а «элемент» - символ, который вы пытались назначить. Пока объект - это то же самое, что и значение, но мы уточним это определение позже. Элемент является одним из значений в последовательности.

Причина ошибки заключается в том, что строки являются неизменяемыми , что означает, что вы не можете изменить существующую строку. Лучшее, что вы можете сделать, - это создать новую строку, отличающуюся от оригинала: >>>reeting = 'Hello, world!' >>> new_greeting = 'J' + приветствие [1:] >>> печать new_greeting Jello, мир! Этот пример объединяет новую первую букву с фрагментом приветствия. Это не влияет на исходную строку.

6,6 Циклы и подсчет

Следующая программа считает количество раз, когда буква a появляется в строке: word = 'banana' count = 0 для буквы в слове: if letter == 'a': count = count + 1 print count Эта программа демонстрирует другой шаблон вычисление называется счетчиком . Переменная count инициализируется в 0, а затем увеличивается каждый раз, когда обнаруживается a. Когда цикл завершается, count содержит результат --- общее число.
Упражнение 3
Инкапсулируйте этот код в функцию с именем count и обобщите ее так, чтобы она принимала строку и букву в качестве аргументов.

6,7 Оператор в

Слово in является логическим оператором, который принимает две строки и возвращает True, если первая отображается как подстрока во второй: >>> 'a' в 'banana' True >>> 'seed' в 'banana' False

6,8 Сравнение строк

Операторы сравнения работают со строками. Чтобы увидеть, равны ли две строки: if word == 'банан': выведите 'Хорошо, бананы'. Другие операции сравнения полезны для размещения слов в алфавитном порядке: если слово <'банан': выведите 'Ваше слово, + слово +', предшествует банану. ' elif word> 'banana': выведите 'Your word,' + word + ', после банана.' еще: напечатайте «Хорошо, бананы». Python не обрабатывает прописные и строчные буквы так, как это делают люди. Все заглавные буквы идут перед всеми строчными, поэтому: ваше слово, ананас, стоит перед бананом. Распространенным способом решения этой проблемы является преобразование строк в стандартный формат, например все строчные, перед выполнением сравнения. Имейте это в виду на случай, если вам придется защищаться от человека, вооруженного ананасом.

6,9 строковые методы

Строки являются примером объектов Python. Объект содержит как данные (сама фактическая строка), так и методы , которые фактически являются функциями, которые встроены в объект и доступны для любого экземпляра объекта.
В Python есть функция dir, которая перечисляет методы, доступные для объекта. Функция type показывает тип объекта, а функция dir показывает доступные методы. >>> stuff = 'Hello world' >>> type (stuff) <type 'str'> >>> dir (stuff) ['прописные буквы', 'center', 'count', 'decode', 'encode', 'ndswith ',' 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', 'setswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill'] >>> help (str.capitalize) Справка для method_descriptor: прописные буквы (... ) S.capitalize () -> string Возвращает копию строки S только с первым заглавным символом. >>> Хотя функция dir перечисляет методы, и вы можете использовать справку для получения простой документации по методу, лучшим источником документации для строковых методов будет docs.python.org/library/string.html.
Вызов метода похож на вызов функции - он принимает аргументы и возвращает значение - но синтаксис другой. Мы вызываем метод, добавляя имя метода к имени переменной, используя точку в качестве разделителя.
Например, метод upper принимает строку и возвращает новую строку со всеми заглавными буквами:

Вместо синтаксиса функции upper (word) используется синтаксис метода word.upper ().
>>> word = 'banana' >>> new_word = word.upper () >>> print new_word BANANA В этой форме точечной нотации указывается имя метода, верхняя часть и имя строки, к которой применяется метод, слово. Пустые скобки указывают, что этот метод не имеет аргументов.

Вызов метода называется вызовом ; в этом случае мы бы сказали, что мы вызываем верхнюю часть слова.

Оказывается, есть строковый метод с именем find, который очень похож на написанную нами функцию: >>> word = 'banana' >>> index = word.find ('a') >>> print index 1 In В этом примере мы вызываем поиск по слову и передаем искомую букву в качестве параметра.
На самом деле, метод find является более общим, чем наша функция; он может найти подстроки, а не только символы: >>> word.find ('na') 2 Он может принимать в качестве второго аргумента индекс, с которого он должен начинаться:
>>> word.find ('na', 3) 4 Одна из распространенных задач - удалить пробелы (пробелы, символы табуляции или новые строки) из начала и конца строки с помощью метода strip: >>> line = 'Here мы идем '>>> line.strip ()' Здесь мы идем 'Некоторые методы, такие как старты с возвращаемыми логическими значениями. >>> line = 'Пожалуйста, хорошего дня' >>> line.startswith ('Please') True >>> line.startswith ('p') False Вы заметите, что для стартов с регистром требуется совпадение, поэтому иногда мы берем выровняйте и отобразите все это в нижний регистр, прежде чем выполнять какую-либо проверку с использованием метода lower. >>> line = 'Пожалуйста, хорошего дня' >>> line.startswith ('p') False >>> line.lower () 'Пожалуйста, хорошего дня' >>> line.lower (). startwith ( 'p') True В последнем примере вызывается метод lower, а затем мы используем начальный метод, чтобы проверить, начинается ли полученная строчная строка с буквы «p». Пока мы тщательно следим за порядком, мы можем сделать несколько вызовов методов в одном выражении.
Упражнение 4
Существует строковый метод count, который похож на функцию в предыдущем упражнении. Прочтите документацию по этому методу на docs.python.org/library/string.html и напишите вызов, который подсчитывает, сколько раз буква a встречается в «банане».

6,10 Разбор строк

Часто мы хотим заглянуть в строку и найти подстроку. Например, если нам представили серию строк, отформатированных следующим образом: [электронная почта защищена] uct.ac.za Sat 5 января 09:14:16 2008 И мы хотели извлечь только вторую половину адреса (т.е. uct.ac.za) из каждой строки. Мы можем сделать это, используя метод find и нарезку строк.
Сначала мы найдем положение знака at в строке. Затем мы найдем позицию первого пробела после знака. И тогда мы будем использовать нарезку строк, чтобы извлечь часть строки, которую мы ищем. >>> data = 'From [электронная почта защищена] Суббота 5 января 09:14:16 2008 '>>> atpos = data.find (' @ ') >>> print atpos 21 >>> sppos = data.find (' ', atpos) >>> print sppos 31> >> host = data [atpos + 1: sppos] >>> print host uct.ac.za >>> Мы используем версию метода find, которая позволяет нам указать позицию в строке, где мы хотим найти, чтобы начать поиск , Когда мы срезаем, мы извлекаем символы от "одного за знаком" до, но не включая пробел ".
Документация по методу find доступна по адресу docs.python.org/library/string.html.

6,11 Оператор формата

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

Первый операнд - это строка формата , которая содержит одну или несколько последовательностей формата, которые определяют форматирование второго операнда. Результатом является строка.

Например, последовательность форматирования «% d» означает, что второй операнд должен быть отформатирован как целое число (d означает «десятичный»): >>> camels = 42 >>> '% d'% camels '42' Результат это строка '42', которую не следует путать с целочисленным значением 42.
Последовательность форматирования может появиться в любом месте строки, поэтому вы можете вставить значение в предложение: >>> camels = 42 >>> 'Я заметил% d верблюдов.' % верблюдов «Я заметил 42 верблюда». Если в строке более одной последовательности форматирования, второй аргумент должен быть кортежем. Каждая последовательность формата соответствует элементу кортежа по порядку.
В следующем примере используется «% d» для форматирования целого числа, «% g» для форматирования числа с плавающей запятой (не спрашивайте почему) и «% s» для форматирования строки: >>> «В% d лет» Я заметил% g% s. % (3, 0,1, «верблюды») «Через 3 года я заметил 0,1 верблюдов». Количество элементов в кортеже должно соответствовать количеству последовательностей формата в строке. Кроме того, типы элементов должны соответствовать форматным последовательностям:
>>> '% d% d% d'% (1, 2) TypeError: недостаточно аргументов для строки формата >>> '% d'% 'долларов' TypeError: недопустимый тип аргумента для встроенной операции В первом примере не хватает элементов; во втором элемент имеет неправильный тип.
Оператор форматирования мощный, но его может быть сложно использовать. Вы можете прочитать больше об этом на docs.python.org/lib/typesseq-strings.html.

6,12 отладка

Навык, который вы должны развивать, программируя, всегда спрашивает себя: «Что здесь может пойти не так?» или, в качестве альтернативы, «Что может сделать наш пользователь, чтобы сбить нашу (на первый взгляд) идеальную программу?».
Например, посмотрите на программу, которую мы использовали для демонстрации цикла while в главе об итерации: while True: line = raw_input ('>'), если line [0] == '#': продолжить, если line == 'done ': прервать печать строки печати' Готово! ' Посмотрите, что происходит, когда пользователь вводит пустую строку ввода:> привет там привет там> # не печатать это> печатать это! распечатай это! > Traceback (последний вызов был последним): файл "copytildone.py", строка 3, в <module>, если строка [0] == '#': код работает нормально, пока не будет представлена ​​пустая строка. Тогда нет нулевого символа, поэтому мы получаем трассировку. Есть два решения, чтобы сделать третью строку "безопасной", даже если строка пуста.
Одна возможность состоит в том, чтобы просто использовать метод startwith, который возвращает False, если строка пуста. if line.startswith ('#'): Другой способ безопасно написать оператор if с использованием шаблона хранителя и убедиться, что второе логическое выражение вычисляется только там, где в строке есть хотя бы один символ .: if len (line)> 0 и строка [0] == '#':

6,13 глоссарий

counter: переменная, используемая для подсчета чего-либо, обычно инициализируется нулем, а затем увеличивается.
пустая строка: строка без символов и длиной 0, представленная двумя кавычками.
Оператор форматирования: оператор%, который принимает строку формата и кортеж и генерирует строку, включающую элементы кортежа, отформатированные в соответствии со строкой форматирования.
последовательность форматирования: последовательность символов в строке форматирования, например% d, которая указывает, как следует форматировать значение.
строка формата: строка, используемая с оператором формата, которая содержит последовательности формата.
flag: логическая переменная, используемая для указания того, является ли условие истинным.
invocation: оператор, который вызывает метод.
immutable: свойство последовательности, элементы которой не могут быть назначены.
index: целочисленное значение, используемое для выбора элемента в последовательности, например символа в строке.
item: одно из значений в последовательности.
Метод: функция, которая связана с объектом и вызывается с использованием точечной нотации.
объект: нечто, на что может ссылаться переменная. На данный момент вы можете использовать «объект» и «значение» взаимозаменяемо.
поиск: шаблон обхода, который останавливается, когда находит то, что ищет.
последовательность: упорядоченный набор; то есть набор значений, где каждое значение идентифицируется целочисленным индексом.
slice: часть строки, заданная диапазоном индексов.
traverse: для перебора элементов в последовательности, выполняя аналогичную операцию для каждого элемента.

6,14 упражнения


Упражнение 5 Возьмем следующий код Python, в котором хранится строка: ` str = 'X-DSPAM-Confidence: 0.8475 ' Используйте поиск и срез строки для извлечения части строки после символа двоеточия, а затем используйте функцию float для преобразования извлеченной строки. строка в число с плавающей запятой.
Упражнение 6
Прочитайте документацию по строковым методам на docs.python.org/lib/string-methods.html. Возможно, вы захотите поэкспериментировать с некоторыми из них, чтобы убедиться, что вы понимаете, как они работают. раздеть и заменить особенно полезны.
В документации используется синтаксис, который может сбивать с толку. Например, в find (sub [, start [, end]]) скобки указывают необязательные аргументы. Так что sub требуется, но start необязательный, а если вы включите start, end не обязательный.
» или, в качестве альтернативы, «Что может сделать наш пользователь, чтобы сбить нашу (на первый взгляд) идеальную программу?