Приведение типов
Ранее, мы увидели что строки — это объекты, способные хранить символы, не только буквы но и числа. Но сложение (конкатенация) строк не имеет ничего общего с арифметическим сложением. Чтобы в этом убедится, попробуем запустить следующий пример:
1 2 3 4 | >>> mynum = "5" >>> print mynum + mynum 55 >>> |
Если вам требуется преобразовать строковую переменную в число, для этого существуют две функции: int() и float().
int() — это сокращение от integer, что переводится как целое. Функция конвертирует строку в целое число. float() — «floating-point», означает, число с плавающей точкой, то есть десятичную дробь. Попробуем применить их на практике:
1 2 3 4 5 6 | >>> my_number = "42" >>> print int(my_number) 42 >>> print float(my_number) 42.0 >>> |
В дробном числе, после преобразования была добавлена точка, отделяющая целую часть.
Преобразовать строку в число возможно не всегда. Строка не должна содержать лишних символов. Даже такой символ, как точка в строке при преобразовании в целое вызовет ошибку. Поэтому, используя эти функции, нужно быть особенно внимательным.
1 2 3 4 5 6 7 | >>> my_number = "12.0" >>> print int(my_number) Traceback (most recent call last): File "<pyshell#1>", line 1, in <module> print int(my_number) ValueError: invalid literal for int() with base 10: '12.0' >>> |
Для обратного преобразования, используется функция str(). Она не является настолько требовательной как две предыдущие и обрабатывает любое числовое значение.
Часто возникает необходимость объединения строки и числа для вывода на экран. Простая попытка выдаст такую ошибку:
1 2 3 4 5 6 | >>> print "7" + 3 Traceback (most recent call last): File "<pyshell#1>", line 1, in <module> print "7" + 3 TypeError: cannot concatenate 'str' and 'int' objects >>> |
Python не знает как применить операцию сложения к объектам различных типов, ему требуется уточнить то, что мы имели в виду. От того, хотим ли мы соединить две строки или суммировать два числа, сильно зависит результат:
1 2 3 4 5 | >>> print "7" + str(3) 73 >>> print int(7) + 3 10 >>> |
Форматирование
Допустим, у нас есть три объекта, которые нужно вывести на экран. Это объекты: name = “Michael”, apple = 4 и pear = 2. Вывести их нужно следующим образом: «Michael has 4 apples and 2 pears».
Мы уже можем сделать это двумя способами. Первый — через запятую перечислить объекты:
1 | print name, "has", str(apple), "apples and", str(pear),"pears" |
Другой способ — это конкатенация строк:
1 | print name + " has " + str(apple) + " apples and " + str(pear) + "pears" |
Оба способа являются рабочими, но у них есть недостатки. Из за множества кавычек и преобразований типов строки являются абсолютно не читабельными. Существует другой способ, упрощающий подобные операции. Это строковый метод — format().
Простейший способ его применения выглядит так:
1 | print "{} has {} apples and {} pears".format(name, apple, pear) |
Пара пустых фигурных скобок (между ними нет даже пробела) представляют собой места, в которые будут вставленные переменные. Переменные занимают места в порядке, в котором они переданы в функцию format(). Теперь мы не нуждаемся в преобразование типа каждой переменной, format() делает все это автоматически.
При необходимости, мы можем менять порядок следования переменных:
1 | print "{2} has {1} apples and {0} pears".format(pear, apple, name) |
Индексы в скобках указывают на порядок аргументов функции format().
Иногда требуется повторение одного элемента в строке многократно. Для этого достаточно продублировать его индекс:
1 2 | >>> print "{0} has {0} heads and {0} arms".format(name) Michael has Michael apples and Michael pears. |
Наконец, мы можем помечать места для вставки именами:
1 2 3 | print "{name} has {apple} apples and {pear} pears".format( name="Michael", apple=4, pear=2 ) |
Поиск подстроки в строке
Еще одним из часто используемых методов строк является find(). Он позволяет искать вхождение одной строки в другую. Этот метод принадлежит к классу строки и вызывается через точку, так же как и format().
1 2 3 4 | >>> mystr = "The quick brown fox jumps over the lazy dog" >>> print mystr.find("fox") 16 >>> |
Напечатанное число (16), показывает первое вхождение искомой нами строки. Другими словами, строка fox начинается в строке «The quick brown fox jumps over the lazy dog» с 16 го символа.
В случае если подстрока не будет найдена в строке find() вернет нам -1:
1 2 3 4 | >>> mystr = "The quick brown fox jumps over the lazy dog" >>> print mystr.find("cat") -1 >>> |
Так же, как и любой метод строки мы можем вызвать его без явного объявления строковой переменной:
1 2 3 | >>> print "The quick brown fox jumps over the lazy dog".find("fox") 5 >>> |
Следует не забывать, что строки сравниваются по регистру символов. Если мы будем искать в строке Fox вместо fox, то метод там вернет -1.
Если в строке несколько раз повторяется подстрока, то метод выдаст нам позицию первой подстроки:
1 2 3 | >>> "A twister of twists once twisted a twist.".find("twist") 2 >>> |
Замена подстроки в строке
Метод replace() используется, когда нужно заменить часть строки на другую.
1 2 3 4 | >>> story = "I'm telling you the truth; he spoke nothing but the truth!" >>> print story.replace("the truth", "lies") I'm telling you lies; he spoke nothing but lies! >>> |
Напомним, что сама строка my_story не меняется от этой операции. Если вы хотите изменить ее, то необходимо сделать следующее:
1 2 | >>> story = story.replace("the truth", "lies") >>> |
Перед вами основные операции, которые python позволяет делать со строками. Со строками на протяжение уроков мы будем встречаться часто и будем пополнять этот список. Впереди нас ждет описание такого важного элемента програмирования, как функции.