Разное

Работа со строками в python: Литералы строк | Python

Содержание

Про Python — Справочник — str (строка)

Строка — базовый тип представляющий из себя неизменяемую последовательность символов; str от «string» — «строка».

Строки относятся к неизменяемым последовательностям.

Начиная с +py3.0 имеется в виду последовательность кодовых точек Unicode (соответствует типу unicode в предыдущих версиях Python).

До -py3.0 последовательность представляла из себя строку байт (поддерживает ASCII).

Поскольку в языке нет типа для одиночного символа, то обращение к строке при помощи индекса: my_str[1] — возвращает новую строку с символом по этому индексу.

Строковые литералы могут быть записаны разными способами:

    # Одиночные кавычки. Часто встречаемый вариант записи.
my_str = 'а внутри "можно" поместить обычные'

# Кавычки.
my_str = "а внутри 'можно' поместить одиночные"

# Три одиночных кавычки. Удобно для записей в несколько строк
my_str = '''В трёх одиночных
кавычках'''

# Тройные кавычки. Общепринятый способ для строк документации.
my_str = """Three double quotes"""

Строковые литералы, содержащие промеж себя только пробел объединяются в единую строку:

    ('Кот' 'обус') == 'Котобус'

Приведение к строке

Другие типы могут быть приведены к строке при помощи конструктора str(): str(obj).

    str(10)  # '10'
str(len) # '<built-in function len>'

Таким образом можно получить «неформальное» строковое представление объектов. Для пользовательских типов такое представление может быть определено в специализированном методе __str__.

В случае, если получить строковое представление не удалось, производится попытка получить «формальное» представление (см. repr).

Синонимы поиска: str (строка), строка, строки, строковые методы, функции для строк, преобразование в строку, методы строк

Python: работа со строками

Краткий обзор работы со строками:

# Объявить строку

Str = ‘text’

Str = «text «

Str = «»»многострочный текст»»»

# При использовании кириллицы(Юникода)

Str = u’текст’

# Преобразование кодов символов

ord(‘W’) # вернет 87 — код символа в ASCII

chr(87) # вернет W — символ для кода 87

# Оператор форматирования строк %, производит подстановку в строку значений из кортежа

‘моя строка %s с числом %d’ % (‘№1’, 1)

# оператор форматирования, словарь в виде аргумента

print «Hello %(name)s! How’s %(value)s?» % {‘name’: ‘Bill’, ‘value’: ‘life’} # Hello Bill! How’s life?

# Не форматированные строки или сырые строки(игнорируются знаки типа перевода строки и подобные)

Str = r’ ext’

# Конкатенация (слияние двух строк)

Str = Str1 + Str2

# Повторение (повторить строку n-раз)

Str = ‘hello’ * 10

# Обратиться к символу по номеру

symbol = Str[i]

# Извлечение подстроки

Str = Str[i:j] # где i индекс начало среза, j — длина среза

Str = u’питону’ # строка юникод

print Str[:-1]+u’ы’ # вся строка без последнего символа + буква Ы

# Расширенная операция извлечения подстроки

Str[1:10:2] # каждый второй элемент в последовательности от 1 до 9, то есть Str[начальная позиция:конечная позиция:длина]

Str[::2] # каждый второй элемент от начала и до конца стоки, в данном случае начальная позиция принимается как начало строки, конечная — как конец строки

# Длина строки

len(Str)

# Количество вхождений подстроки в строку, если нет совпадений — 0

Str. count(‘то что ищем’)

# Поиск подстроки, возвращает позицию первого совпадения, иначе -1

Str.find(‘то что ищем’)

# Поиск и замена, если строка не найдена — возвращает исходную строку

Str.replace(‘то что ищем’, ‘то на что заменяем’)

# Разбить на список по символу, по умолчанию принимает символ пробела

Str.split(‘символ или строка’)

# Собрать список в строку, между элементами списка добавляется разделитель

‘разделитель’.join(Str)

# Регистр

Str.upper() # к верхнему

Str.lower() # к нижнему

Str.title() # первый символ каждого слова к верхнему

Str.capitalize() # первый символ строки к верхнему

Str.isupper() # проверить находиться ли строка в верхнем регистре

Str.islower() # проверить находиться ли строка в нижнем регистре

Str.startswith(‘строка’) # определяет начинается ли строка с указанной подстроки

Str.endswith(‘строка’) # определяет заканчивается ли строка с указанной подстрокой

# Удаляет пробельные символы

Str. strip() # в начале и конце

Str.lstrip() # в начале

Str.rstrip() # в конце

7. Строки — Учимся с Python

7.1. Составной тип данных

К этому момент мы уже встречали пять типов данных: int, float, bool, NoneType и str. Тип str — строка — качественно отличается от четырех других тем, что состоит из меньших элементов — символов.

Типы, включающие меньшие элементы, называются составными типами данных. В разных ситуациях можно либо обращаться с составным типом данных как с чем-то цельным, либо работать с его отдельными частями. Эта двоякость полезна.

Оператор [] выбирает единственный символ из строки:

>>> fruit = "banana"
>>> letter = fruit[1]
>>> print letter

Выражение fruit[1] выбирает символ номер 1 из строки fruit. Результат присваивается переменной letter. Отобразив letter, вы, вероятно, удивитесь:

Ведь первая буква в строке «banana» не a! Но программисты часто ведут счет, начиная с 0. Буква номер 0 в строке «banana» — буква b. Буква номер 1 — a, номер 2 — n, и так далее.

Если вам нужна буква номер 0, просто поместите 0, или любое выражение, дающее 0, в квадратные скобки:

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

Выражение в скобках называется индекс. Индекс указывает на элемент упорядоченного набора, в данном случае, набора символов строки. Индекс может быть произвольным целочисленным выражением.

7.2. Длина

Функция len (англ.: длина) возвращает количество символов в строке:

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

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

length = len(fruit)
last = fruit[length]       # Ошибка!

Это не работает! Вы получите ошибку выполнения IndexError: string index out of range. Причина в том, что в строке «banana» нет символа с индексом 6. Так как мы начинаем счет с 0, шесть символов пронумерованы от 0 до 5. Для того, чтобы получить последний символ, нужно из length вычесть 1:

length = len(fruit)
last = fruit[length-1]

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

7.3. Обход и цикл for

Часто программе требуется обрабатывать строку по одному символу за раз. Начав с начала строки, программа выбирает очередной символ и что-то с ним делает, и так до тех пор, пока строка не закончится. Такой прием обработки называется обходом. Вот как можно запрограммировать обход с помощью предложения while:

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

Этот цикл обходит строку и выводит каждую букву в отдельной строке. Условие цикла здесь index < len(fruit), так что, когда index становится равным длине строки, условие становится ложным и тело цикла больше не выполняется. Последний обработанный символ имеет индекс len(fruit)-1, и является последним символом в строке.

Обход элементов последовательности настолько часто используется, что Python предлагает для этого другой, более простой синтаксис — цикл for:

for char in fruit:
    print char

В каждой итерации переменной char присваивается очередной символ строки. Цикл продолжается до тех пор, пока строка не закончится.

Следующий пример показывает, как с помощью конкатенации и цикла for сгенерировать последовательность в алфавитном порядке. Например, Роберт МакКлоски в своей книге дал такие имена утятам: Jack, Kack, Lack, Mack, Nack, Ouack, Pack и Quack. Следующий цикл выводит имена утят в алфавитном порядке:

prefixes = "JKLMNOPQ"
suffix = "ack"

for letter in prefixes:
    print letter + suffix

Эта программа выводит:

Jack
Kack
Lack
Mack
Nack
Oack
Pack
Qack

Конечно, это не совсем то, что нужно, поскольку Ouack и Quack написаны неправильно. Вам предстоит исправить это в одном из упражнений к этой главе.

7.4. Срезы строк

Подстроку строки будем называть срезом. Получение среза строки похоже на получение одного символа:

>>> s = "Peter, Paul, and Mary"
>>> print s[0:5]
Peter
>>> print s[7:11]
Paul
>>> print s[17:21]
Mary

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

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

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

А как вы думаете, что дает срез s[:]?

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

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

if word == "banana":
    print "Yes, we have no bananas!"

С помощью других операторов сравнения можно располагать слова в алфавитном порядке:

if word < "banana":
    print "Your word, " + word + ", comes before banana."
elif word > "banana":
    print "Your word, " + word + ", comes after banana."
else:
    print "Yes, we have no bananas!"

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

Your word, Zebra, comes before banana.

Стандартное решение этой задачи — преобразовать строки к единому виду, например, в нижний регистр, и только потом сравнивать. (А вот заставить программу понимать, что зебры — не фрукты, является более сложной задачей.)

7. 6. Строки неизменяемы

Возможно, вы захотите изменить символ в строке, используя оператор [] в левой части предложения присваивания. Например:

greeting = "Hello, world!"
greeting[0] = 'J'            # Ошибка!
print greeting

Вместо вывода Jello, world! этот код выдаст сообщение об ошибке выполнения TypeError: ‘str’ object doesn’t support item assignment.

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

greeting = "Hello, world!"
newGreeting = 'J' + greeting[1:]
print newGreeting

Здесь конкатенируются первая буква и срез строки greeting. Это никак не влияет на первоначальную строку.

7.7. Оператор in

Оператор in проверяет, является ли одна строка частью другой строки (ее подстрокой):

>>> 'p' in 'apple'
True
>>> 'i' in 'apple'
False
>>> 'ap' in 'apple'
True
>>> 'pa' in 'apple'
False

Заметьте, что строка является подстрокой самой себя:

>>> 'a' in 'a'
True
>>> 'apple' in 'apple'
True

Комбинируя оператор in с конкатенацией строк, напишем функцию, удаляющую из строки все гласные:

def remove_vowels(s):
    vowels = "aeiouAEIOU"
    s_without_vowels = ""
    for letter in s:
        if letter not in vowels:
            s_without_vowels += letter
    return s_without_vowels

Напишите доктесты для этой функции, чтобы убедиться, что она работает как задумано.

7.8. Функция find

Что делает следующая функция?

def find(strng, ch):
    index = 0
    while index < len(strng):
        if strng[index] == ch:
            return index
        index += 1
    return -1

В некотором смысле, find является противоположностью оператора []. Вместо того, чтобы по индексу извлекать символ, эта функция по символу находит индекс, под которым этот символ присутствует в строке. Если символ не найден, функция возвращает -1.

Это первый случай, когда мы видим предложение return в теле цикла. Если strng[index] == ch, функция немедленно возвращает значение и завершается, прекращая выполнение цикла.

Если искомого символа в строке нет, то цикл завершится, как обычно, после чего программа завершится, возвращая -1.

Этот прием иногда называют эврика-обходом. Ведь как только мы нашли то, что ищем, мы можем закричать “Эврика!”, и больше не искать.

7.9. Счетчик в цикле

Следующая программа подсчитывает, сколько раз в строке встречается буква a. Это еще один пример использования приема счетчик, с которым мы познакомились в главе 6:

fruit = "banana"
count = 0
for char in fruit:
    if char == 'a':
        count += 1
print count

7.10. Необязательные параметры

Для того, чтобы найти в строке второе или третье вхождение некоторого символа, можно изменить функцию find, добавив третий параметр для указания позиции начала поиска:

def find2(strng, ch, start):
    index = start
    while index < len(strng):
        if strng[index] == ch:
            return index
        index += 1
    return -1

Вызов find2(‘banana’, ‘a’, 2) теперь возвращает 3, позицию первого вхождения ‘a’ в строке ‘banana’ после позиции 2. А что вернет вызов find2(‘banana’, ‘n’, 3)? Если вы ответили 4, значит, вы поняли, как работает find2.

Но можно пойти дальше, и объединить find и find2 с помощью необязательного параметра:

def find(strng, ch, start=0):
    index = start
    while index < len(strng):
        if strng[index] == ch:
            return index
        index += 1
    return -1

Вызов find(‘banana’, ‘a’, 2) теперь ведет себя так же, как find2, и, в то же время, при вызове find(‘banana’, ‘a’) параметр start получит значение по умолчанию 0.

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

def find(strng, ch, start=0, step=1):
    index = start
    while 0 <= index < len(strng):
        if strng[index] == ch:
            return index
        index += step
    return -1

Передав значение -1 для step, мы заставим функцию искать от конца к началу. Обратите внимание, что в условии цикла теперь нужно поверять достижение index как нижней, так и верхней границы строки.

7.11. Модуль string

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

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

Вы получите список элементов модуля string:

[‘Template’, ‘_TemplateMetaclass’, ‘__builtins__’, ‘__doc__’,
‘__file__’, ‘__name__’, ‘_float’, ‘_idmap’, ‘_idmapL’, ‘_int’,
‘_long’, ‘_multimap’, ‘_re’, ‘ascii_letters’, ‘ascii_lowercase’,
‘ascii_uppercase’, ‘atof’, ‘atof_error’, ‘atoi’, ‘atoi_error’, ‘atol’,
‘atol_error’, ‘capitalize’, ‘capwords’, ‘center’, ‘count’, ‘digits’,
‘expandtabs’, ‘find’, ‘hexdigits’, ‘index’, ‘index_error’, ‘join’,
‘joinfields’, ‘letters’, ‘ljust’, ‘lower’, ‘lowercase’, ‘lstrip’,
‘maketrans’, ‘octdigits’, ‘printable’, ‘punctuation’, ‘replace’,
‘rfind’, ‘rindex’, ‘rjust’, ‘rsplit’, ‘rstrip’, ‘split’,
‘splitfields’, ‘strip’, ‘swapcase’, ‘translate’, ‘upper’, ‘uppercase’,
‘whitespace’, ‘zfill’]

Чтобы побольше узнать о любом из элементов списка, можно воспользоваться функцией type. Укажите имя модуля и имя элемента, используя точечную нотацию.

>>> type(string.digits)
<type 'str'>
>>> type(string.find)
<type 'function'>

Поскольку string.digits (англ.: цифры) является строкой, мы можем вывести ее и посмотреть, что она содержит:

>>> print string.digits
0123456789

Как и следовало ожидать, она содержит все десятичные цифры.

Функция string.find делает, в основном, то же самое, что и функция, которую мы написали. Чтобы узнать о ней больше, мы можем вывести ее документирующую строку __doc__, которая содержит документацию по этой функции:

>>> print string.find.__doc__
find(s, sub [,start [,end]]) -> in

    Return the lowest index in s where substring sub is found,
    such that sub is contained within s[start,end].  Optional
    arguments start and end are interpreted as in slice notation.

    Return -1 on failure.

Параметры, указанные в документации в квадратных скобках, являются необязательными. Заметьте, что функцию string.find можно использовать почти так же, как нашу собственную find:

>>> fruit = "banana"
>>> index = string.find(fruit, "a")
>>> print index
1

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

На самом деле, string.find является функцией более общего применения, чем наша. Она может искать подстроки, а не только отдельные символы:

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

Как и наша функция, она принимает дополнительный аргумент, задающий индекс для начала поиска:

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

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

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

В этом примере поиск не удался, поскольку буква b не встречается между индексами 1 и 2 (последний исключается).

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

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

Строка string.lowercase содержит все латинские символы, которые система относит к нижнему регистру. Аналогично, string.uppercase содержит все латинские символы верхнего регистра. Выполните следующее и посмотрите, что вы получите:

print string.lowercase
print string.uppercase
print string.digits

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

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

Как вариант, можно воспользоваться оператором in:

def is_lower(ch):
    return ch in string. lowercase

Той же цели можно достичь с помощью операторов сравнения:

def is_lower(ch):
    return 'a' <= ch <= 'z'

Если ch больше или равен a и меньше или равен z, то он является символом нижнего регистра.

Еще одна константа, определенная в модуле string, может удивить вас, если вывести ее на экран:

>>> print string.whitespace

Пробельные символы перемещают курсор, ничего не отображая. Они создают пустое пространство между видимыми символами. Константа string.whitespace содержит все пробельные символы, включая пробел, табуляцию (\t) и перевод строки (\n).

В модуле string содержится много других полезных функций. Но эта книга — не справочник. Если вам нужно больше узнать о возможностях модулей Python, обратитесь к справочнику Python Library Reference. Так же, как и другая документация, справочник по библиотеке Python доступен на сайте Python http://www.python.org.

7. 13. Форматирование строк

Наиболее выразительный и мощный способ форматирования строк в Python — использование оператора форматирования строки % вместе с операндами для форматирования. Чтобы посмотреть, как это работает, начнем с нескольких примеров:

>>> "His name is %s."  % "Arthur"
'His name is Arthur.'
>>> name = "Alice"
>>> age = 10
>>> "I am %s and I am %d years old." % (name, age)
'I am Alice and I am 10 years old.'
>>> n1 = 4
>>> n2 = 5
>>> "2**10 = %d and %d * %d = %f" % (2**10, n1, n2, n1 * n2)
'2**10 = 1024 and 4 * 5 = 20.000000'
>>>

Операция форматирования строки записывается так:

"<формат>" % (<значения>)

Левый операнд формат — строка, содержащая, помимо прочего, спецификации преобразования, которые начинаются с символа %. Справа от оператора форматирования % записывается в скобках последовательность значений, разделенных запятыми. Каждое значение в этой последовательности соответствует спецификации преобразования в форматируемой строке слева от оператора %. Скобки необязательны, если последовательность включает только одно значение.

В первом из приведенных выше примеров только одна спецификация преобразования, %s, обозначающая строку. Ей соответствует единственное значение «Arthur», не заключенное в скобки.

Во втором примере имеются переменные name со строковым значением «Alice» и age с целочисленным значением 10. Они соответствуют двум спецификациям преобразования, %s и %d. Во второй спецификации d обозначает десятичное целое число.

В третьем примере переменные n1 и n2 имеют целочисленные значения 4 и 5, соответственно. В форматируемой строке имеются четыре спецификации преобразования: три %d и одна %f. Спецификация преобразования %f показывает, что соответствующее значение должно быть представлено как число с плавающей точкой. Четыре значения, соответствующие четырем спецификациям преобразования, следующие: 2**10, n1, n2, and n1 * n2.

В этой книге нам будет достаточно форматных преобразований s, d и f. Полный их список можно найти в справочнике по библиотеке Python в разделе String Formatting Operations.

Следующий пример демонстрирует реальную пользу от форматирования строк:

i = 1
print "i\ti**2\ti**3\ti**5\ti**10\ti**20"
while i <= 10:
    print i, '\t', i**2, '\t', i**3, '\t', i**5, '\t', i**10, '\t', i**20
    i += 1

Программа печатает таблицу степеней чисел от 1 до 10. В этом варианте программы для выравнивания столбцов значений используется символ табуляции (\t). Это перестает работать, как только число в столбце становится достаточно длинным и достигает следующей позиции табуляции:

i       i**2    i**3    i**5    i**10   i**20
1       1       1       1       1       1
2       4       8       32      1024    1048576
3       9       27      243     59049   3486784401
4       16      64      1024    1048576         1099511627776
5       25      125     3125    9765625         95367431640625
6       36      216     7776    60466176        3656158440062976
7       49      343     16807   282475249       79792266297612001
8       64      512     32768   1073741824      1152921504606846976
9       81      729     59049   3486784401      12157665459056928801
10      100     1000    100000  10000000000     100000000000000000000

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

i = 1
print "%-4s%-5s%-6s%-8s%-13s%-15s" % \
      ('i', 'i**2', 'i**3', 'i**5', 'i**10', 'i**20')
while i <= 10:
    print "%-4d%-5d%-6d%-8d%-13d%-15d" % (i, i**2, i**3, i**5, i**10, i**20)
    i += 1

Эта версия программы выводит следующее:

i   i**2 i**3  i**5    i**10        i**20
1   1    1     1       1            1
2   4    8     32      1024         1048576
3   9    27    243     59049        3486784401
4   16   64    1024    1048576      1099511627776
5   25   125   3125    9765625      95367431640625
6   36   216   7776    60466176     3656158440062976
7   49   343   16807   282475249    79792266297612001
8   64   512   32768   1073741824   1152921504606846976
9   81   729   59049   3486784401   12157665459056928801
10  100  1000  100000  10000000000  100000000000000000000

Знак — после % в спецификации преобразования обозначает выравнивание по левому краю, а число обозначает минимальную длину. Так, %-13d обозначает десятичное число длиной не менее 13 символов, выровненное по левому краю.

7.14. Глоссарий

документирующая строка
Строковое значение, расположенное сразу после заголовка функции или
модуля (и, как мы увидим дальше, после заголовка класса или метода).
Документирующие строки, или докстроки, предоставляют удобный способ
документировать код. Докстроки также используются модулем doctest
для автоматического тестирования.
значение по умолчанию
Значение, которое получит необязательный параметр, если при вызове
функции для него не передан аргумент.
индекс
Переменная или значение, используемое для доступа к элементу некоторого
упорядоченного набора, например, к символу в строке.
неизменяемый тип данных
Неизменяемым является составной тип данных, элементам которого нельзя
присвоить новые значения.
необязательный параметр
Параметр, для которого вы заголовке функции указано значение по умолчанию.
Параметр получит значение по умолчанию, если при вызове функции не будет
передан аргумент для него.
обход
Перебор всех элементов некоторого множества, с выполнением над каждым
некоторой операции.
пробельные символы
Символы, которые перемещают курсор, не выводя видимые символы. Строка
string.whitespace содержит все пробельные символы.
составной тип данных:
Тип данных, включающий компоненты, которые сами относятся к некоторому
типу данных и могут использоваться как самостоятельные значения.
срез
Часть строки (подстрока), заданная диапазоном индексов. Вообще, в Python
можно получить подпоследовательность любой последовательности (не только
строки) с помощью оператора среза последовательность[start:stop].
точечная нотация
Использование оператора . (точка), например, для доступа к
функции внутри модуля.

7.15. Упражнения

  1. Измените следующий код:

    prefixes = "JKLMNOPQ"
    suffix = "ack"
    
    for letter in prefixes:
        print letter + suffix
    

    так, чтобы Ouack и Quack выводились корректно.

  2. Оформите следующий код как функцию с именем count_letters:

    fruit = "banana"
    count = 0
    for char in fruit:
        if char == 'a':
            count += 1
    print count
    

    Обобщите эту функцию, чтобы она принимала
    строку и символ в качестве аргументов.

  3. Теперь перепишите функцию count_letters так, чтобы вместо обхода строки
    она многократно вызывала find (версия из раздела 7.10), с третьим
    параметром, для того, чтобы найти новые вхождения нужной буквы.

  4. Как вы думаете, какая из версий is_lower будет самой быстрой? Можете ли
    назвать другие причины, кроме скорости, чтобы предпочесть одну версию другой?

  5. Создайте файл с именем stringtools.py и поместите в него следующее:

    def reverse(s):
        """
          >>> reverse('happy')
          'yppah'
          >>> reverse('Python')
          'nohtyP'
          >>> reverse("")
          ''
          >>> reverse("P")
          'P'
        """
    
    if __name__ == '__main__':
        import doctest
        doctest. testmod()
    

    Напишите тело функции reverse (англ.: перевернуть) так, чтобы доктесты
    успешно прошли.

  6. Напишите функцию mirror (англ.: зеркало, отражать) в файле stringtools.py.

    def mirror(s):
        """
          >>> mirror("good")
          'gooddoog'
          >>> mirror("yes")
          'yessey'
          >>> mirror('Python')
          'PythonnohtyP'
          >>> mirror("")
          ''
          >>> mirror("a")
          'aa'
        """
    

    Напишите тело функции так, чтобы доктесты успешно прошли.

  7. Добавьте функцию remove_letter (англ.: удалить букву) в файл stringtools.py .

    def remove_letter(letter, strng):
        """
          >>> remove_letter('a', 'apple')
          'pple'
          >>> remove_letter('a', 'banana')
          'bnn'
          >>> remove_letter('z', 'banana')
          'banana'
          >>> remove_letter('i', 'Mississippi')
          'Msssspp'
        """
    

    Напишите тело функции так, чтобы доктесты успешно прошли.

  8. Напишите тела следующих функций, по одной за раз, убеждаясь, что
    доктесты успешно проходят:

    def is_palindrome(s):
        """
          >>> is_palindrome('abba')
          True
          >>> is_palindrome('abab')
          False
          >>> is_palindrome('tenet')
          True
          >>> is_palindrome('banana')
          False
          >>> is_palindrome('straw warts')
          True
        """
    
    def count(sub, s):
        """
          >>> count('is', 'Mississippi')
          2
          >>> count('an', 'banana')
          2
          >>> count('ana', 'banana')
          2
          >>> count('nana', 'banana')
          1
          >>> count('nanan', 'banana')
          0
        """
    
    def remove(sub, s):
        """
          >>> remove('an', 'banana')
          'bana'
          >>> remove('cyc', 'bicycle')
          'bile'
          >>> remove('iss', 'Mississippi')
          'Missippi'
          >>> remove('egg', 'bicycle')
          'bicycle'
        """
    
    def remove_all(sub, s):
        """
          >>> remove_all('an', 'banana')
          'ba'
          >>> remove_all('cyc', 'bicycle')
          'bile'
          >>> remove_all('iss', 'Mississippi')
          'Mippi'
          >>> remove_all('eggs', 'bicycle')
          'bicycle'
        """
    
  9. Попробуйте выполнить каждую из следующих операций форматирования строки в
    интерактивном режиме Python и объясните результаты:

    1. «%s %d %f» % (5, 5, 5)
    2. «%-. 2f» % 3
    3. «%-10.2f%-10.2f» % (7, 1.0/2)
    4. print » $%5.2f\n $%5.2f\n $%5.2f» % (3, 4.5, 11.2)
  10. Форматируемые строки в следующих операциях содержат ошибки. Исправьте их:

    1. «%s %s %s %s» % (‘this’, ‘that’, ‘something’)
    2. «%s %s %s» % (‘yes’, ‘no’, ‘up’, ‘down’)
    3. «%d %f %f» % (3, 3, ‘three’)

Операции со строками в Python

Строки являются базовым типом данных практически любого языка программирования. Даже если вы не сильны в данном вопросе и просто заказываете создание сайта Киев, вы наверняка слышали про данные фразы. Это связано стем, что ввод и вывод текстовой информации неизбежен. Вы просто не сможете написать программу без использования строк. Из этого следует, что знание строк обязательно. После прочтения этой статьи вы сможете свободно работать со строками в Python!

Для начала необходимо научиться создавать строки. Для обозначения строк в Python используются кавычки (в версии Python 3.6 возможно использовать как двойные, так и одинарные кавычки). По факту программе будет всё равно как вы обозначили свою строку («дом» или ‘дом’).

Вывод строк осуществляется уже без кавычек. Для переноса строки необходимо использовать специальный символ переноса который записывается как сочетание бэкслэша () и английской буквы n. В следующем примере присутствует перенос строги:

print(«heynyou»)

print в данном случае используется для вывода строки на экран. Слова же будут выведены на разных строках.

Вторым способов являются тройные кавычки. При заключении строки в тройные кавычки символ n выставляется автоматически в тех местах, где вы нажимаете клавишу энтер. При этом вы можете использовать как «»»котик»»», так и »’котик»’ (в версиях Python от 3х принято использовать только двойные кавычки).

Сложение строк

В Python присутствует возможность сложения или так называемого склеивания строк. Вы можете просто соединить две строки. При этом возможно использование строк как в двойных, так и в одинарных кавычках. Пример сложения строк представлен далее:

print(«Haha» + ‘haha’)

Если используемая строка представляет собой число («2», ‘3’) результат будет представлять строку. При сложении «2» и «3» будет получена строка «23». Сложение строки с целым или вещественным числом приведет к ошибке.

Умножение строк

При умножении строки на число происходит повторение умножаемой строки в n раз. Результатом умножения строки «cat» на 3 будет строка «catcatcat». Последовательность строки и числа не важно, но принято записывать умножение следующим образом: «умножаемая строка» * число. Умножение строки на вещественное число приведет к ошибке и не даст программе работать корректно.

Как изменить строку в Python



Узнать, как изменить строку в Python.


Нет встроенная функция реверс строки в Python.

Самый быстрый (и самый простой?) способ заключается в использовании среза, который делает шаг назад, -1.

Объяснение примера

У нас есть строка, «Привет мир», которую мы хотим обратить вспять:

Строки в обратном

txt = «Привет мир»[::-1]
print(txt)

Создайте срез, который начинается в конце строки и движется назад.

Заявление slice [::-1] это то же самое, что и [11:0:-1] что означает начать с позиции 11
(потому что «Привет «мир» имеет 11 символов), конец в положении 0, перемещение с шагом -1, отрицательный один, что означает один шаг назад.

Нарежьте строку

txt = «Привет мир»[::-1]
print(txt)

Теперь у нас есть строка txt она читает «Привет мир» обратно.

Выведите строку, чтобы продемонстрировать результат

Распечатайте список

txt = «Привет мир»[::-1]
print(txt)



Создание функцию

Если вы хотите иметь функцию, в которой вы можете отправлять свои строки и возвращать их назад, вы можете создать функцию и вставить код из приведенного выше примера.

Пример

def my_function(x):
  return x[::-1]

mytxt =
my_function(«Интересно, как этот текст выглядит в обратном направлении»)

print(mytxt)

Пример выполнения »

Объяснение примера

Создайте функцию, которая принимает строку в качестве аргумента.

Создание функцию

def my_function(x):
  return x[::-1]

mytxt =
my_function(«Интересно, как этот текст выглядит в обратном направлении»)

print(mytxt)

Срежьте строку, начиная с конца строки и двигаться назад.

Нарежьте строку

def my_function(x):
  return x[::-1]

mytxt =
my_function(«Интересно, как этот текст выглядит в обратном направлении»)

print(mytxt)

Вернуть строку назад

Верните строку

def my_function(x):
  return
x[::-1]

mytxt =
my_function(«Интересно, как этот текст выглядит в обратном направлении»)

print(mytxt )

Вызовите функцию со строкой в качестве параметра:

Вызов функции

def my_function(x):
  return
x[:-1]mytxt = my_function(«Интересно, как этот текст выглядит в обратном направлении»)print(mytxt)

Вывести результат:

Вывести результат

def my_function(x):
  return
x[::-1]

mytxt = my_function(«Интересно, как этот текст выглядит в обратном направлении»)

print(mytxt)


Вывод строк в Python | IThowto. ru

Продолжая изучать Python, рассмотрим примеры работы со строками в Python.

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

В этом совете я расскажу о способах вывода строк в Python.

В одном из прошлых советов мы уже выводили на экран строку «Hello World!!!». Если вы помните, мы делали это при помощи команды print.

Наша программа содержала следующий код:

Как видим, после команды print, строка «Hello World!!!» заключена в простые кавычки. Но это не единственная возможность вывода строк в Python.

Давайте создадим новый файл и добавим в него следующие строки (замечаем где находится текстовая строка во втором print, и где в первом print !):

Выполним созданный нами скрипт и увидим на экране следующее:

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

Давайте немного видоизменим наш код, разбив строку по словам и разместив каждое слово на отдельной строке:

В итоге, получим следующее:

Другой пример использования тройных кавычек в Python:

выведет на экран следующее:

Этот способ очень удобно применять при многострочном выводе текстовых данных или выводе на экран рисунков из ASC-символов.

Предположим, что вам необходимо заключить какие-то слова в одинарные кавычки. Сделать это очень просто.

Смотрим на код и видим:

Запускаем на выполнение и убеждаемся в том, что все как надо:

О.К., скажете вы, с одинарными кавычками все ясно. Но, как мне сделать так, чтобы слово, стоящее в начале строки, было в двойных кавычках?!

Вам поможет следующее решение:

Как видим, слово взятое нами в двойные кавычки и стоящее в начале строки, выведено на экран так, как нам надо:

Как мы этого добились? Все очень просто — нам в этом помог управляющий символ обратного слэша, с помощью которого мы отделили нашу кавычку от трех, в которых мы вывели всю строку.

При выводе строк в Python не забывайте следить за открывающимися и закрывающимися кавычками (строка должна завершаться тем же типом кавычек, которым и началась). Это самая часто распространенная ошибка среди новичков при работе со строками.

Этот совет — лишь начало работы со строками в Python. В последующих советах мы будет расширять наши знания, так что следите за обновлениями раздела.

Python f-string tutorial — форматирование строк в Python с помощью f-строки

последнее изменение 6 июля 2020 г.

В учебнике Python f-string показано, как форматировать строки в Python с помощью f-строки.

Python f-строка

F-строка Python — это новейший синтаксис Python для форматирования строк. Это доступно
начиная с Python 3.6. F-строки Python обеспечивают более быструю, удобочитаемую, более лаконичную и
менее подверженный ошибкам способ форматирования строк в Python.

Струны f имеют префикс f и используют скобки {} .
для оценки ценностей.

Спецификаторы формата для типов, заполнения или выравнивания указываются после
символ двоеточия; например: f '{price: .3}' , где цена
это имя переменной.

Форматирование строки Python

В следующем примере приведены параметры форматирования строк в Python.

formatting_strings.py

#! / usr / bin / env python3

name = 'Питер'
возраст = 23

print ('% s% d лет'% (имя, возраст))
print ('{} составляет {} лет'. формат (имя, возраст))
print (f '{name} {age} лет')
 

В примере строка форматируется с использованием двух переменных.

print ('% s% d лет'% (имя, возраст))
 

Это самый старый вариант. Он использует оператор %
а классический строковый формат указывает, например, % s и % d .

print ('{} составляет {} лет'. формат (имя, возраст))
 

Начиная с Python 3.0, была введена функция format () для предоставления
расширенные возможности форматирования.

print (f '{name} {age} лет')
 

F-строки Python доступны начиная с Python 3.6. У струны есть f
префикс и использует {} для оценки переменных.

$ python formatting_string.py
Питеру 23 года
Питеру 23 года
Питеру 23 года
 

У нас такой же результат.

Python f-строковые выражения

Мы можем заключать выражения в скобки {} .

expression.py

#! / usr / bin / env python3

мешки = 3
apples_in_bag = 12

print (f'Яблок всего {мешков * apples_in_bag})
 

В примере вычисляется выражение внутри f-строки.

$ python expression.py
Всего 36 яблок
 

Это результат.

Python f-строковые словари

Мы умеем работать со словарями в f-строках.

dicts.py

#! / usr / bin / env python3

user = {'name': 'Джон Доу', 'профессия': 'садовник'}

print (f "{пользователь ['имя']} является {пользователем ['профессия']}")
 

Пример оценивает словарь в f-строке.

$ python dicts.py
Джон Доу - садовник
 

Это результат.

Отладка f-строки Python

Python 3.8 представил самодокументированное выражение с
= символов.

debug.py

#! / usr / bin / env python3

импортная математика

х = 0,8

print (f '{math.cos (x) =}')
print (f '{math.sin (x) =}')
 

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

$ ./debug.py
math.cos (x) = 0,6967067093471654
math.sin (x) = 0,71735605228
 

Это результат.

Python многострочная f-строка

Мы умеем работать с многострочными строками.

multiline.py

#! / usr / bin / env python3

name = 'Джон Доу'
возраст = 32
профессия = 'садовник'

msg = (
    f'Name: {имя} \ n '
    f'Age: {age} \ n '
    f'Occupation: {Occupation} '
)

печать (сообщение)
 

В примере представлена ​​многострочная f-строка. Фа-струны размещены
между круглыми скобками; каждой струне предшествует f
персонаж.

Многострочный $ python.ру
Имя: Джон Доу
Возраст: 32 года
Деятельность: садовник
 

Это результат.

Функция вызова f-строки Python

Мы также можем вызывать функции в f-строках.

call_function.py

#! / usr / bin / env python3

def mymax (x, y):

    вернуть x, если x> y, иначе y

а = 3
б = 4

print (f'Max of {a} и {b} is {mymax (a, b)} ')
 

В примере вызывается пользовательская функция в f-строке.

$ python call_fun.py
Максимум 3 и 4 равно 4
 

Это результат.

Python f-строковые объекты

F-строка Python также принимает объекты; объекты должны иметь либо
__str __ () или __repr __ () определены магические функции.

objects.py

#! / usr / bin / env python3

класс Пользователь:
    def __init __ (я, имя, род занятий):
        self.name = имя
        self.occupation = профессия

    def __repr __ (сам):
        return f "{self. name} является {self.occupation}"

u = Пользователь ('Джон Доу', 'садовник')

печать (f '{u}')
 

В примере оценивается объект в f-строке.

$ python objects.py
Джон Доу - садовник
 

Это результат.

Экранные символы f-строки Python

В следующем примере показано, как экранировать определенные символы в f-строках.

escaping.py

#! / usr / bin / env python3

print (f'Python использует {{}} для оценки переменных в f-строках ')
print (f'Это был \ 'отличный \' фильм ')
 

Чтобы избежать фигурной скобки, мы удваиваем символ. Одиночная цитата
экранирован символом обратной косой черты.

$ python escaping.py
Python использует {} для оценки переменных в f-строках
Это был отличный фильм
 

Это результат.

Python в формате f-строки datetime

Следующий пример форматирует datetime.

format_datetime.py

#! / usr / bin / env python3

дата и время импорта

сейчас = datetime. datetime.now ()

print (f '{сейчас:% Y-% m-% d% H:% M}')
 

В примере отображается текущее время в формате datetime. Дата и время
спецификаторы формата следуют за символом : .

$ python format_datetime.py
2019-05-11 22:39
 

Это результат.

Формат f-строки Python с плавающей точкой

Значения с плавающей запятой имеют суффикс f . Мы можем
также укажите точность: количество десятичных знаков.
Точность — это значение, которое идет сразу после символа точки.

format_floats.py

#! / usr / bin / env python3

val = 12,3

print (f '{val: .2f}')
print (f '{val: .5f}')
 

В примере выводится форматированное значение с плавающей запятой.

$ python format_floats.py
12.30
12,30000
 

Вывод показывает число, состоящее из двух и пяти десятичных знаков.

Ширина формата f-строки Python

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

format_width.py

#! / usr / bin / env python3

для x в диапазоне (1, 11):
    print (f '{x: 02} {x * x: 3} {x * x * x: 4}')
 

В примере печатаются три столбца.Каждый столбец имеет предопределенный
ширина. В первом столбце 0 используется для заполнения более коротких значений.

$ python format_width.py
01 1 1
02 4 8
03 9 27
04 16 64
05 25 125
06 36 216
07 49 343
08 64 512
09 81 729
10 100 1000
 

Это результат.

Python f-строка выравнивания строки

По умолчанию строки выравниваются по левому краю. Мы можем использовать
> символов, чтобы выровнять строки вправо. В
> символ следует за двоеточием.

justify.py

#! / usr / bin / env python3

s1 = 'а'
s2 = 'ab'
s3 = 'abc'
s4 = 'abcd'

print (f '{s1:> 10}')
print (f '{s2:> 10}')
print (f '{s3:> 10}')
print (f '{s4:> 10}')
 

У нас четыре струны разной длины. Устанавливаем ширину
вывод до десяти символов. Значения выровнены вправо.

$ python justify.py
         а
        ab
       abc
      abcd
 

Это результат.

Python f-строковые числовые обозначения

Числа могут иметь различные числовые обозначения, например десятичные или шестнадцатеричные.

format_notations.py

#! / usr / bin / env python3

а = 300

# шестнадцатеричный
print (f "{a: x}")

# восьмеричный
print (f "{a: o}")

# научный
print (f "{a: e}")
 

В примере значение печатается в трех разных нотациях.

$ python format_notations.py
12c
454
3.000000e + 02
 

Это результат.

В этом руководстве мы работали с f-строками Python.

Посетите учебник по Python или перечислите весь Python
учебные пособия.

строка — Работа с текстом

Назначение: Содержит константы и классы для работы с текстом.
В наличии: 2,5

Строковый модуль восходит к самым ранним версиям
Python. В версии 2.0 многие ранее реализованные функции
только в модуле были перенесены методы str и
объекты юникода. Устаревшие версии этих функций все еще
доступны, но их использование не рекомендуется, и они будут исключены из
Python 3.0. Строковый модуль по-прежнему содержит несколько полезных
константы и классы для работы со строковыми и юникодными объектами,
это обсуждение будет сосредоточено на них.

Константы

Константы в строковом модуле могут использоваться для указания категорий
символов, таких как буквы ascii и цифры. Несколько из
константы, такие как строчные, зависят от языка, поэтому значение
изменения, отражающие языковые настройки пользователя. Другие, такие как
шестнадцатеричные цифры, не меняются при изменении локали.

 строка импорта

для n в каталоге (строка):
    если n.startswith ('_'):
        Продолжать
    v = getattr (строка; n)
    если isinstance (v, basestring):
        печать '% s =% s'% (n, repr (v))
        Распечатать
 

Большинство названий констант не требуют пояснений. _` {|} ~ \ t \ n \ r \ x0b \ x0

punctuation = ‘! «# $% & \’ () * +, -._` {|} ~ ‘

верхний регистр = ‘ABCDEFGHIJKLMNOPQRSTUVWXYZ’

пробел = ‘\ t \ n \ x0b \ x0c \ r’

Функции

Две функции не выходят из строки
модуль. capwords () делает все слова в строке заглавными.

 строка импорта

s = 'Быстрая коричневая лисица перепрыгнула через ленивого пса.'

печать с
напечатать string.capwords (s)
 

Результаты такие же, как если бы вы вызвали split () с заглавными буквами.
слова в результирующем списке, затем вызывается join () для объединения
результаты, достижения.

 $ python string_capwords.py

Быстрая, коричневая лиса, перепрыгнула через ленивого пса.
Быстрая, коричневая лиса, перепрыгнула через ленивого пса.
 

Другая функция создает таблицы перевода, которые можно использовать с
метод translate () для изменения одного набора символов на
еще один.

 строка импорта

leet = string.maketrans ('abegiloprstz', '463611092572')

s = 'Быстрая коричневая лисица перепрыгнула через ленивого пса. '

печать с
напечатать s.translate (leet)
 

В этом примере некоторые буквы заменены их альтернативными числами l33t.

 $ python string_maketrans.py

Быстрая, коричневая лиса, перепрыгнула через ленивого пса.
Th4 qu1ck 620wn f0x jum93d 0v32 7h4 142y d06.
 

шаблоны

Строковые шаблоны были добавлены в Python 2.4 как часть PEP 292 и
предназначены как альтернатива встроенной интерполяции
синтаксис. При интерполяции string.Template переменные
идентифицируется по имени с префиксом $ (например, $ var) или, если
необходимо выделить их из окружающего текста, они также могут быть
обернут фигурными скобками (напр.g., $ {var}).

В этом примере сравнивается простой шаблон с аналогичной строкой.
установка интерполяции.

 строка импорта

значения = {'var': 'foo'}

t = string.Template ("" "
$ var
$$
$ {var} iable
"" ")

print 'TEMPLATE:', t.substitute (значения)

s = "" "
% (var) s
%%
% (var) siable
"" "

print 'INTERPLOATION:', s% значений
 

Как видите, в обоих случаях триггерный символ ($ или%)
удалось избежать, повторив это дважды.

 $ python string_template.py

ШАБЛОН:
фу
$
надежный

ИНТЕРПЛЯЦИЯ:
фу
%
надежный
 

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

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

 строка импорта

значения = {'var': 'foo'}

t = string.Template ("$ var здесь, но $ missing не указан")

пытаться:
    print 'ШАБЛОН:', т.заменитель (значения)
кроме KeyError, ошибка:
    напечатать 'ERROR:', str (err)
    
print 'TEMPLATE:', t.safe_substitute (значения)
 

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

 $ python string_template_missing.py

ШАБЛОН: ОШИБКА: "отсутствует"
ШАБЛОН: foo здесь, но $ missing не указан
 

Расширенные шаблоны

Если синтаксис по умолчанию для строки.Шаблон не для вашего
нравится, вы можете изменить поведение, отрегулировав обычный
шаблоны выражений, которые он использует для поиска имен переменных в шаблоне
тело. Простой способ сделать это — изменить разделитель , и
idpattern атрибутов класса.

 строка импорта

класс MyTemplate (string.Template):
    разделитель = '%'
    idpattern = '[а-я] + _ [а-я] +'

t = MyTemplate ('%%% with_underscore% notunderscored')
d = {'with_underscore': 'заменено',
      'notunderscored': 'не заменено',
      }

печать т.safe_substitute (г)
 

В этом примере идентификаторы переменных должны включать подчеркивание где-нибудь в
середина, поэтому% notunderscored ничем не заменяется.

 $ python string_template_advanced.py

% заменено% notunderscored
 

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

Давайте посмотрим на шаблон по умолчанию:

 строка импорта

t = строка.Шаблон ('$ var')
печать t.pattern.pattern
 

Поскольку t.pattern — это скомпилированное регулярное выражение, мы должны
получить доступ к его атрибуту шаблона, чтобы увидеть фактическую строку.

 $ python string_template_defaultpattern.py


    \ $ (?:
      (? P  \ $) | # Escape-последовательность из двух разделителей
      (? P  [_a-z] [_ a-z0-9] *) | разделитель # и идентификатор Python
      {(? P <в скобках> [_a-z] [_ a-z0-9] *)} | # разделитель и идентификатор в фигурных скобках
      (? P ) # Другие некорректные выражения-разделители
    )
 

Если мы хотим создать новый тип шаблона, например,
{{var}} в качестве синтаксиса переменной, мы могли бы использовать такой шаблон:

 импорт ре
строка импорта

класс MyTemplate (строка. Шаблон):
    delimiter = '{{'
    шаблон = г '' '
    \ {\ {(?:
    (? P  \ {\ {) |
    (? P  [_a-z] [_ a-z0-9] *) \} \} |
    (? P <в скобках> [_a-z] [_ a-z0-9] *) \} \} |
    (? P <недействительный>)
    )
    '' '
    
t = MyTemplate ('' '
{{{{
{{var}}
'' ')

print 'MATCHES:', t.pattern.findall (t.template)
напечатайте 'SUBSTITUTED:', t.safe_substitute (var = 'replace')
 

Нам все еще нужно предоставить как именованные, так и фигурные шаблоны, даже
хотя они такие же. Вот результат:

 $ python string_template_newsyntax.ру

СООТВЕТСТВИЯ: [('{{', '', '', ''), ('', 'var', '', '')]
ЗАМЕНЕНО:
{{
замена
 

Устаревшие функции

Информация об устаревших функциях перенесена в строку и
классы юникода, см. строковые методы в
руководство.

8. Строки — Как думать как компьютерный ученый: обучение с помощью Python 3

8.1. Составной тип данных

До сих пор мы видели встроенные типы, такие как int, float,
bool, str, и мы видели списки и пары. Строки, списки и пары качественно отличаются от других, потому что они
состоят из более мелких частей. В случае струн они состоят из более мелких
строки, каждая из которых содержит по одному символу .

Типы

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

8.2. Работа со строками как с отдельными объектами

Ранее мы видели, что каждый экземпляр черепахи имеет свои собственные атрибуты и
ряд методов, которые можно применить к экземпляру.Например,
мы могли установить цвет черепахи и написали tess.turn (90).

Точно так же, как черепаха, веревка также является объектом. Итак, каждый экземпляр строки
имеет свои атрибуты и методы.

Например:

 >>> ss = "Привет, мир!"
>>> tt = ss.upper ()
>>> тт
'ПРИВЕТ МИР!'
 

upper — это метод, который может быть вызван для любого строкового объекта
создать новую строку, в которой все
символы в верхнем регистре. (Исходная строка ss остается без изменений.)

Существуют также такие методы, как lower, capitalize и
swapcase, которые занимаются другими интересными вещами.

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

 ss = "Привет, мир!"
tt = сс.
 

Когда вы вводите период, чтобы выбрать один из методов ss, PyScripter отображает всплывающее окно.
окно выбора, показывающее все методы (их около 70 — слава богу, мы только
используйте несколько из них!), которые можно использовать в вашей строке.

Когда вы вводите имя метода, вы получаете дополнительную информацию о его параметре и возвращаете
тип и его строка документации. Это хороший пример инструмента — PyScripter —
используя метаинформацию — строки документации — предоставленные программистами модуля.

8.3. Работа с частями струны

Оператор индексации (Python использует квадратные скобки для заключения индекса)
выбирает односимвольную подстроку из строки:

 >>> фрукт = "банан"
>>> m = фрукты [1]
>>> печать (м)
 

Выражение фрукт [1] выбирает символ номер 1 из фрукта и создает новый
строка, содержащая только этот символ.Переменная m относится к результату.
Когда мы отображаем m, мы можем получить сюрприз:

Ученые-информатики всегда начинают считать
с нуля! Буква в позиции нулевого индекса слова «банан» — это b. Так что на
позиция [1] у нас есть буква а.

Если мы хотим получить доступ к нулевой букве строки, мы просто помещаем 0,
или любое выражение, которое оценивается как 0, между скобками:

 >>> m = фрукты [0]
>>> печать (м)
б
 

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

Мы можем использовать enumerate для визуализации индексов:

 >>> фрукт = "банан"
>>> список (перечислить (фрукты))
[(0, 'b'), (1, 'a'), (2, 'n'), (3, 'a'), (4, 'n'), (5, 'a')]
 

Не беспокойтесь о перечислении на этом этапе, мы увидим больше
в главе о списках.

Обратите внимание, что при индексировании возвращается строка — Python не имеет специального типа для одного символа.
Это просто строка длиной 1.

Мы также видели списки ранее. Такая же нотация индексации работает для извлечения элементов из
список:

 >>> prime_nums = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]
>>> простые_числа [4]
11
>>> друзья = [«Джо», «Зои», «Брэд», «Анджелина», «Зуки», «Танди», «Пэрис»]
>>> друзья [3]
'Анджелина'
 

8.4. Длина

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

 >>> фрукт = "банан"
>>> len (фрукт)
6
 

Чтобы получить последнюю букву строки, у вас может возникнуть соблазн попробовать что-нибудь вроде
это:

 sz = len (фрукты)
last = fruit [sz] # ОШИБКА!
 

Это не сработает. Это вызывает ошибку времени выполнения
IndexError: индекс строки вне допустимого диапазона.Причина в том, что нет
в позиции индекса 6 в «банане».
Поскольку мы начинаем отсчет с нуля, шесть индексов
пронумерованы от 0 до 5. Чтобы получить последний символ, мы должны вычесть 1 из
длина плода:

 sz = len (фрукты)
последний = фрукт [sz-1]
 

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

Как вы уже догадались, индексация с отрицательным индексом также работает для списков.

Мы не будем использовать отрицательные индексы в остальной части этих заметок — не так много компьютерных языков
используйте эту идиому, и вам, вероятно, будет лучше ее избегать. Но есть много
Код Python в Интернете, который будет использовать этот трюк, поэтому лучше знать, что он существует.

8,5. Обход и цикл for

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

 ix = 0
в то время как ix 

Этот цикл проходит по строке и отображает каждую букву в отдельной строке.
Условие цикла - ix

Но мы уже видели, как цикл for может легко перебирать
элементы в списке, а также для строк:

Каждый раз при прохождении цикла следующий символ в строке присваивается
переменная c. Цикл продолжается до тех пор, пока не останутся символы. Мы тут
можно увидеть выразительную силу, которую дает цикл for по сравнению с
цикл while при обходе строки.

В следующем примере показано, как использовать конкатенацию и цикл for для
генерировать abecedarian series. Abecedarian относится к серии или списку, в котором
элементы расположены в алфавитном порядке. Например, в книге Роберта Макклоски
книга Дорогу утятам , имена утят Джек, Как, Лак,
Мак, Нак, Уак, Пак и Кря. Этот цикл выводит эти имена по порядку:

 префиксы = "JKLMNOPQ"
суффикс = "подтверждение"

для p в префиксах:
    печать (p + суффикс)
 

Результат этой программы:

 Джек
Kack
Недостаток
Мак
Nack
Oack
Упаковка
Qack
 

Конечно, это не совсем так, потому что Уак и Кряк написаны с ошибками.Вы исправите это в качестве упражнения ниже.

8.6. Ломтики

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

 >>> s = "Пираты Карибского моря"
>>> print (s [0: 7])
Пираты
>>> print (s [11:14])
то
>>> print (s [15:24])
Карибский бассейн
>>> друзья = [«Джо», «Зои», «Брэд», «Анджелина», «Зуки», «Танди», «Пэрис»]
>>> print (друзья [2: 4])
["Брэд", "Анджелина"]
 

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

Если представить это как лист бумаги, оператор среза [n: m] копирует
часть бумаги между n и m позициями. При условии, что m и n
оба в пределах строки, ваш результат будет иметь длину (m-n).

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

 >>> фрукт = "банан"
>>> фрукт [: 3]
'запретить'
>>> фрукт [3:]
'ана'
>>> фрукт [3: 999]
'ана'
 

Как вы думаете, что означает s [:]? А как насчет друзей [4:]?

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

Операторы сравнения работают со строками. Чтобы узнать, равны ли две строки:

 если слово == "банан":
    print («Да у нас нет бананов!»)
 

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

 если слово <"банан":
    print ("Твое слово" + слово + "стоит перед бананом.")
elif word> "банан":
    print ("Твое слово" + слово + "идет после банана.")
еще:
    print («Да у нас нет бананов!»)
 

Это похоже на алфавитный порядок, который вы использовали бы в словаре,
за исключением того, что все прописные буквы идут перед всеми строчными буквами. В качестве
результат:

 Твое слово, Зебра, стоит перед бананом.
 

Распространенный способ решения этой проблемы - преобразование строк в стандартные
формат, например строчные буквы, перед выполнением сравнения.Более того
трудная проблема - заставить программу понять, что зебры - не плод.

8,8. Струны неизменны

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

 приветствие = "Привет, мир!"
приветствие [0] = 'J' # ОШИБКА!
печать (приветствие)
 

Вместо вывода Jello, world !, этот код производит
ошибка времени выполнения TypeError: объект 'str' не поддерживает назначение элементов.

Строки неизменяемые , что означает, что вы не можете изменить существующую строку. В
Лучшее, что вы можете сделать, это создать новую строку, которая является вариацией оригинала:

 приветствие = "Привет, мир!"
new_greeting = "J" + приветствие [1:]
 

Python Docstring - вещи, которые вы должны знать

Python Document String (Docstring) - это строковый литерал, который является первым оператором в модуле, функции, классе или методе.


Как определить строку документации Python?

Строки документации Python заключены в пару тройных двойных кавычек («» »). Давайте посмотрим на несколько примеров определения строк документации.


1. Пример строки документации функции Python

def multiply (a, b):
    "" "Этот метод умножает указанные два числа.

    Входные аргументы: a, b должны быть числами.
    Результат: умножение a и b.
    "" "
    вернуть а * б
 

2. Пример строки документации класса Python

класс Сотрудник:
    "" "Класс Employee используется для хранения данных объекта сотрудника.Методы:
        __init __ (я, emp_id, emp_name)
        Распечатать()
    "" "

    def __init __ (self, emp_id, emp_name):
        "" "Конструктор класса сотрудников для инициализации объекта.

        Входные аргументы: emp_id должно быть int, emp_name должно быть str
        "" "
        self.id = emp_id
        self.name = emp_name

    def print (self):
        "" "Этот метод печатает информацию о сотрудниках в удобном для пользователя виде." ""
        print (f'Employee [{self.id}, {self.name}] ')
 

3.Пример строки документации модуля Python

Допустим, мы определили функцию и класс выше в файле docstrings.py . Каждый скрипт Python также является модулем. Мы можем определить эту строку документации модуля как:

"" "
В этом модуле показаны некоторые примеры строк документации Python.

Классы: Сотрудник
Функции: умножить (а, б)
"" "
 

Как получить доступ к строкам документации Python?

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


1. Доступ к строке документации функции Python

печать (умножить .__ doc__)
 

Выход:

Пример строки документации Python


2. Доступ к строкам документации классов и методов Python

print (Сотрудник .__ doc__)

print (Сотрудник .__ init __.__ doc__)

print (Employee.print .__ doc__)
 

Выход:

Пример строки документации по классам и методам Python


3. Доступ к строке документации модуля Python

Нам нужно будет импортировать модуль строк документации.Затем мы можем получить доступ к его значению Docstring с помощью атрибута __doc__. Мы прокомментировали вышеупомянутые операторы печати перед импортом модуля docstrings, чтобы избежать выполнения операторов print ().

$ python ls
docstrings.py
$ питон
$ python python3.7
Python 3.7.3 (v3.7.3: ef4ec6ed12, 25 марта 2019 г., 16:52:21)
[Clang 6.0 (clang-600.0.57)] на Дарвине
Для получения дополнительной информации введите «помощь», «авторские права», «кредиты» или «лицензия».
>>>
>>> импортировать строки документации
>>>
>>> Строки документации.__doc__
'\ nЭтот модуль показывает несколько примеров строк документации Python \ n \ nКлассы: Сотрудник \ nФункции: multiply (a, b) \ n'
>>>
>>> docstrings.Employee .__ doc__
'Класс Employee используется для хранения данных объекта сотрудника. \ N \ n Методы: \ n __init __ (self, emp_id, emp_name) \ n print () \ n'
>>>
>>>
>>> docstrings.multiply .__ doc__
'Этот метод умножает указанные два числа. \ N \ n Входные аргументы: a, b должны быть числами. \ N Возвращает: умножение a и b.\ п '
>>>
>>>
>>> docstrings.Employee.print .__ doc__
«Этот метод печатает информацию о сотрудниках в удобной для пользователя форме».
>>>
 

Строка документации модуля Python


Python Однострочная строка документации

  • Когда строка документации python определена в одну строку, она называется однострочным документом.
  • Котировки открытия и закрытия находятся в одной строке.
  • Нет пустой строки до или после значения строки документации.
  • Лучше всего заканчивать строку документации точкой.
  • Он лучше всего подходит для небольших служебных функций, когда нам не нужно много указывать.
  • Предоставьте содержательную строку документации для определения деталей функции и вывода. Например:
def reverse_str (s):
    "" "Переворачивает строку ввода и возвращает ее." ""
    проходят
 

Python Многострочная строка документации

  • Если значение строки документации состоит из нескольких строк, это называется многострочной строкой документации.
  • Лучшая практика для многострочной документации - начать со сводной строки, затем с пустой строки, за которой следует более подробное объяснение.
  • Итоговая строка может находиться в той же строке, что и котировки открытия, или в следующей строке.
  • Вся многострочная строка документа имеет такой же отступ, как и кавычки в первой строке.

Лучшие практики строки документации Python

  1. Строка документации скрипта Python должна указывать, как его использовать. Его следует распечатать, если сценарий выполняется с отсутствующими или неправильными параметрами.
  2. В строке документации модуля Python должны быть перечислены все классы, функции, исключения и зависимости от других модулей.
  3. Строка документации функции Python должна определять поведение, входные аргументы, возвращаемые типы и исключения. Если существуют определенные ограничения на возможность вызова функции, это следует указать в строке документации функции.
  4. В строке документации класса должны быть перечислены все методы и атрибуты. Если он наследуется от суперкласса, необходимо указать подробности.
  5. Если метод класса переопределяет метод суперкласса, он должен быть указан.
  6. Python чувствителен к регистру. Поэтому оставьте имена аргументов функции точно такими же, как в определении функции.

Почему вы должны следовать рекомендациям Python Docstring?

строки документации Python можно получить с помощью атрибута __doc__. Очень легко создать систему для анализа строки документации и создания документации по модулям, классам и функциям проекта. Вот почему вы должны следовать инструкциям по созданию документации, изложенным в PEP-257.


Можно ли использовать строку документа для многострочного комментария?

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

Как искать в строке в Python

  1. Программирование
  2. Python
  3. Как искать в строке в Python

Автор Джон Пол Мюллер

Бывают случаи с Python, когда вам нужно найти конкретную информацию в строка.Например, вы можете узнать, содержит ли строка слово Hello. Одна из основных целей создания и поддержки данных - иметь возможность искать в них позже, чтобы найти определенные биты информации.

Строки

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

  • count ( str , begin = 0, end = len ( string )): подсчитывает, сколько раз str встречается в строке.Вы можете ограничить поиск, указав начальный индекс, используя , начало , или конечный индекс, используя , конец .

  • заканчивается на ( суффикс , начальный = 0, конец = len ( строка )): возвращает True, если строка заканчивается символами, указанными суффиксом . Вы можете ограничить проверку, указав начальный индекс, используя , начало , или конечный индекс, используя , конец .

  • find ( str , begin = 0, end = len ( string )): определяет, встречается ли str в строке и выводит индекс местоположения.Вы можете ограничить поиск, указав начальный индекс, используя , начало или конечный индекс, используя , конец .

  • index ( str , begin = 0, end = len ( string )): обеспечивает те же функции, что и find (), но вызывает исключение, если str не найден.

  • replace ( старый , новый [, max ]): заменяет все вхождения последовательности символов, указанной в строке old , на последовательность символов, указанную в new .Вы можете ограничить количество замен, указав значение макс. .

  • rfind ( str , begin = 0, end = len ( string )): обеспечивает те же функции, что и find (), но выполняет поиск в обратном направлении от конца строки, а не от начала.

  • rindex ( str , begin = 0, end = len ( string )): обеспечивает ту же функциональность, что и index (), но выполняет поиск в обратном направлении от конца строки, а не от начала.

  • начинается с ( префикс , начальный = 0, конец = len (строка)): возвращает True, если строка начинается с символов, указанных префиксом . Вы можете ограничить проверку, указав начальный индекс, используя , начало , или конечный индекс, используя , конец .

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

  1. Откройте окно файла Python.

    Перед вами редактор, в котором вы можете ввести пример кода.

  2. Введите следующий код в окно - нажимая Enter после каждой строки:

     SearchMe = "Яблоко красное, а ягода синяя!"
    print (SearchMe.find ("есть"))
    print (SearchMe.rfind ("есть"))
    print (SearchMe.count ("есть"))
    print (SearchMe.startswith ("The"))
    print (SearchMe.endswith ("The"))
    print (SearchMe.replace ("яблоко", "машина")
      .replace («ягода», «тележка»)) 

    Пример начинается с создания SearchMe, строки с двумя экземплярами слова . Эти два экземпляра важны, потому что они демонстрируют, как поиск отличается в зависимости от того, где вы начинаете. При использовании find () пример начинается с начала строки. Напротив, rfind () начинается с конца строки.

    Конечно, вы не всегда знаете, сколько раз определенный набор символов встречается в строке. Функция count () позволяет вам определить это значение.

    В зависимости от типа данных, с которыми вы работаете, иногда данные сильно отформатированы, и вы можете использовать определенный шаблон в своих интересах.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *