Строки


Базовые операции Методы строк Практика


  • Строка в Python — упорядоченная последовательность символов

  • Символ — базовые элемент строки: строка из одного элемента

s = "Hello, World!"
print(type(s))
~# <class 'str'>
print("I'm a man") # одинарные и двойные кавычки
print("Hello,\nWorld!") # экранированный символ перевода на новую строку
print('''Hello,
World!''')
# тройные кавычки применяется для документирования самописных функций
# и вывода многострочных блоков текста
'''
\ - обратный слеш - применяется для экранирования
\n - один символ, а не два
\\ - символ обратного слеша
\' - символ апострофа
\" - символ двойной кавычки
\t - горизонтальная табуляция
r"string\n\1212" - raw-строки, "сырые" строки - мы игнорируем спецсимволы полностью
'''
  • Преобразование типов

Практика:
Запросите у пользователя ввод данных.
Преобразуйте результат во float, int, bool.
Запустите программу. Какие ошибки могут возникнуть?
  • f-строки — способ форматирования строк

name = "Sergey"
say_hi = "Hi, "
print(f"{say_hi}{name}")
print(f"{say_hi + name}")
print(f"{'Hi, ' + name}")
~# Hi, Sergey
~# Hi, Sergey
~# Hi, Sergey
Практика:
Напишите программу, которая запрашивает у пользователя
возраст, имя и фамилию.
Результат - строка приветствие, например:
"Меня зовут Владимир Петров, мне 17 лет. Мне нравится изучать Python"
  • Кодировки — способ сообщить компьютеру любой символ

    • ASCII — 255 символов: латиница + основные символы

    • Юникод — 1 112 064 символа: символы других языков, графические символы и т.д.

    • UTF-8, UTF-16, UTF-32 — разные форматы преобразования Юникода

  • Каждому символу соответствует код

  • При сравнении строк сравниваются коды символов

  • Функции ord() и chr()

# каждый символ имеет свой код
print(ord("a")) # 97 - возвращает код символа
print(chr(97)) # a - возвращает символ по его коду
Практика:
Сравните две строки, введенные пользователем. Выведите сообщение
о том, являются ли строки одинаковыми или разными.
Дополнительно*: решите при помощи тернарного оператора

Базовые операции

  • Конкатенация строк

a = "H"
b = "i"
print(a + b)
print(a * 3)
print((a + b) * 3)
print(a * 3 + b * 3)
  • len() — возвращает длину последовательности

len("Hello") # 5
  • Доступ по индексу

s = "Python"
s[0] # P
s[1] # y
s[2] # t
s[3] # h
s[4] # o
s[5] # n 
s[6] # ошибка: IndexError: string index out of range
  • Строки — неизменяемые последовательности. Это значит, что мы не можем изменить значение элемента строки, а можем только создать новую строку

a = "Уха"
a[1] = 'р' 
~# TypeError: 'str' object does not support item assignment
b = a[0] + 'p' + a[2]
  • Срезы — используем часть последовательности

  • Строка[start:stop:step]

day = 'morning, afternoon, evening'
day[0:7] 
~# morning
day[9:18]
~# afternoon
day[9:]
~# afternoon, evening
day[:7]
~# morning
day[-7:]
~# evening
day[9:-9]
~# afternoon
day[::9] # выбираем шаг среза
~# ma,
~# Результат такой т.к. по умолчанию начало среза 0, а конец len(day)
Интерактив:
Что покажет код?
s = 'abcdefg'
print(s[2:5])
print(s[3:])
print(s[:3])
print(s[:])
Практика:
Пользователь вводит с клавиатуры строку.
Произведите поворот строки и полученный результат выведите на экран.
  • Оператор in — принадлежит ли подстрока строке

s = 'Python'
sub_s = 'y'
print(sub_s in s)
sub_s = 'yd'
print(sub_s in s)
~# True
~# False
Практика:
Запросите у пользователя ввод строки и подстроки. Проверьте,
содержит ли введенная строка указанную подстроку, и выведите
соответствующее сообщение.
Дополнительно*: реализуйте при помощи тернарного оператора
  • min() max() — возвращают минимальный/максимальный символ

s = "Python"
print(min(s))
print(max(s))
~# P
~# y
Практика:
Напишите программу, которая принимает на ввод три строки.
Задача - определить минимальный из всех трёх и максимальный из всех
трех символ. Вывести на экран.
  • Обход строки в цикле

test_word = "abracadabra"
count_a = 0
for char in test_word:
	if char == "a":
		count_a += 1
print(count_a)
# Напишите программу, которая считает гласные буквы в слове
word = "Python"
vowels = "aeiouy"
count = 0
for char in word:
	if char in vowels:
		count += 1
print(count)
city = 'Москва'
index = 0
while index < 7:
	print(city[index])
	index += 1
# М
# о
# с
# к
# в
# а
# IndexError: string index out of range
name = "Julia"
for char in name:
	ch = 'X'
print(name)
~# Julia
password = "qwerty123"
for i in range(len(password))
	print(password[i])

Методы строк

upper() # преобразует все малые буквы в заглавные. исходная строка не меняется
lower() # преобразует все заглавные буквы в малые. исходная строка не меняется
count() # считает количество включений аргумента в объекте,
# вторым аргументом стартовый индекс, третьим конечный индекс (необязательные)
msg = "abracadabra"
msg.count("ra") # 2
msg.count("ra", 4, 11) # 1
msg.find("br") # 1 - возвращает индекс первого вхождения,
# если подстрока не находится возвращает -1
msg.find("br", 2) # 8 - ищет со второго индекса и далее
msg.rfind() # ищет справа налево
msg.index() # работает, как find(), но возвращает ошибку, вместо -1
msg.replace("a", "o") # obrokodobro - заменяет одно на другое, можно
# использовать с ''. Имеет третий необязательный аргумент - количество замен
isalpha() # возвращает True, если строка целиком состоит из буквенных
# символов (пробел - не буква)
isdigit() # возвращает True, если строка целиком состоит из цифровых символов
d = "abc"
d.rjust(5) # '  abc' - добавляет символы-заполнители до нужного кол-ва символов
d.rjust(4, '0') # 0abc - причем символ во втором аргументе только один! иначе traceback
ljust() # то же самое что и rjust, только добавляет справа
split() # разделитель в качестве аргумента, возвращает список
String.strip() # удалит все пробелы по краям и переносы строк
rstrip() # удаляет справа, аргумент - то, что удаляем
lstrip()
  • Модуль — отдельный файл с кодом, позволяющий использовать свои функции и переменные в другом файле с кодом

  • Модуль string — строковые константы

import string
# позволяет использовать функции и переменные модуля string в нашей программе
# для этого нужно обратиться к модулю, затем через точку к объекту этого модуля
a = string.ascii_letters
# abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ

Практика

1. Пользователь вводит с клавиатуры строку и слово для поиска.
Посчитайте, сколько раз в строке встречается искомое слово.
Регистром пренебречь (то есть считать Love и love одинаковыми словами).
Полученное число выведите на экран.

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

Пример входных данных:
Петров Иван Николавич
Пример выходных данных:
П.И.Н.

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

Пример входных данных:
петров иван николаевич
Пример выходных данных:
П.И.Н.
4. Напишите программу, которая меняет исходную строку, заменяя пробелы
на дефисы и делая все символы строчными.
Пример:
Дана строка "I love Python so much". Результатом будет строка
"i-love-python-so-much"
5. Пользователь вводит слово. Проверьте, является ли оно палиндромом.
Регистр не учитывайте.
6. Вы сотрудник лаборатории по изучению Марса, которому поручили
вывести на экран концентрацию неизученных пород в образцах грунта. 
Образцы записаны в формате:

"<кодовое обозначение>:<концентрация>"

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

Например:
Дан образец "X-DSPAM-Confidence:0.8475" тогда результат должен быть 0.85
"H-UUIISD-tOOOddss:3.889911" - результат 3.89
"Hekko-88jk_42:6.88112" - результат 6.88

Дополнительно*: Образцы вводятся с клавиатуры, причем
вам неизвестно, сколько образцов будет введено. Ввод заканчивается
словом "exit". Программа должна посчитать суммарную концентрацию всех образцов.
Дополнительно**: Реализуйте валидацию данных в соответствии с
требованиями к кодовому обозначению (любые цифры, буквы и символы, кроме ":")
и к концентрации (цифры и символ ".")
7. Форматирование дат.
Напишите программу, которая считывает от пользователя строковое
значение, содержащее дату в формате дд/мм/гггг. Она должна напечатать
дату в формате 12 марта 2018г.

Last updated