Строка в 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.
Запустите программу. Какие ошибки могут возникнуть?
Практика:
Напишите программу, которая запрашивает у пользователя
возраст, имя и фамилию.
Результат - строка приветствие, например:
"Меня зовут Владимир Петров, мне 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г.