Строка в 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]# Ps[1]# ys[2]# ts[3]# hs[4]# os[5]# n s[6]# ошибка: IndexError: string index out of range
Строки — неизменяемые последовательности. Это значит, что мы не можем изменить значение элемента строки, а можем только создать новую строку
a ="Уха"a[1]='р'~# TypeError: 'str' object does not support item assignmentb = a[0]+'p'+ a[2]
Срезы — используем часть последовательности
Строка[start:stop:step]
day ='morning, afternoon, evening'day[0:7]~# morningday[9:18]~# afternoonday[9:]~# afternoon, eveningday[:7]~# morningday[-7:]~# eveningday[9:-9]~# afternoonday[::9]# выбираем шаг среза~# ma,~# Результат такой т.к. по умолчанию начало среза 0, а конец len(day)
Практика:
Пользователь вводит с клавиатуры строку.
Произведите поворот строки и полученный результат выведите на экран.
Оператор 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 =0for char in test_word:if char =="a": count_a +=1print(count_a)
# Напишите программу, которая считает гласные буквы в словеword ="Python"vowels ="aeiouy"count =0for char in word:if char in vowels: count +=1print(count)
city ='Москва'index =0while 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 inrange(len(password))print(password[i])
upper()# преобразует все малые буквы в заглавные. исходная строка не меняетсяlower()# преобразует все заглавные буквы в малые. исходная строка не меняетсяcount()# считает количество включений аргумента в объекте,# вторым аргументом стартовый индекс, третьим конечный индекс (необязательные)msg ="abracadabra"msg.count("ra")# 2msg.count("ra", 4, 11)# 1msg.find("br")# 1 - возвращает индекс первого вхождения,# если подстрока не находится возвращает -1msg.find("br", 2)# 8 - ищет со второго индекса и далееmsg.rfind()# ищет справа налевоmsg.index()# работает, как find(), но возвращает ошибку, вместо -1msg.replace("a", "o")# obrokodobro - заменяет одно на другое, можно# использовать с ''. Имеет третий необязательный аргумент - количество заменisalpha()# возвращает True, если строка целиком состоит из буквенных# символов (пробел - не буква)isdigit()# возвращает True, если строка целиком состоит из цифровых символовd ="abc"d.rjust(5)# ' abc' - добавляет символы-заполнители до нужного кол-ва символовd.rjust(4, '0')# 0abc - причем символ во втором аргументе только один! иначе tracebackljust()# то же самое что и 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г.