Similar presentations:
Программирование на языке Python
1. Программирование на языке Python
1Программирование
на языке Python
Лекция 6. Строки
Заманова С.К.
2. Программирование на языке Python
2Программирование
на языке Python
Символьные строки
3. Строки
3Строки
Строки в Python- упорядоченные последовательности
символов, используемые для хранения и представления
текстовой информации, поэтому с помощью строк можно
работать со всем, что м.б. представлено в текстовой форме.
Литералы строк:
Работа со строками в Python очень удобна. Существует несколько литералов строк, которые мы сейчас и рассмотрим.
Строки в апострофах и в кавычках
s = 'spam"s'
s = "spam's"
Строки в апострофах и в кавычках- одно и то же. Причина
наличия двух вариантов в том, чтобы позволить вставлять в
литералы строк символы кавычек или апострофов, не
используя экранирование.
4. Экранированные последовательности- служебные символы
4Экранированные последовательности- служебные символы
Экранированные последовательности позволяют вставить
символы, которые сложно ввести с клавиатуры
5. “Сырые”строки - подавляют экранирование
5“Сырые”строки - подавляют экранирование
Если перед открывающей кавычкой стоит символ ‘r’ (в любом
регистре), то механизм экранирования отключается.
s = r'C:\newt.txt'
Но, несмотря на назначение, “сырая” строка не может
заканчиваться символом обратного слэша. Пути решения:
s = r'\n\n\\'[:-1]
s = r'\n\n'+'\\'
s = '\\n\\n'
6. Строки в тройных апострофах или кавычках
6Строки в тройных апострофах или кавычках
Главное достоинство строк в тройных кавычках в том, что их
можно использовать для записи многострочных блоков
текста. Внутри такой строки возможно присутствие кавычек и
апострофов, главное, чтобы не было трех кавычек подряд.
>>> c = ‘ ‘ ‘ это очень большая
. . . строка, многострочный
. . . блок текста ‘ ‘ ‘
>>> c
'это очень большая\n строка, многострочный\n блок текста'
>>> print(c)
это очень большая строка, многострочный блок текста
7. Символьные строки
7Символьные строки
Начальное значение:
! Строка – это
s = "Привет!"
последовательность
символов!
Вывод на экран:
print ( s )
print ( s[5] )
print ( s[-2] )
0
1
2
3
4
5
6
П
р
и
в
е
т
!
s[0] s[1] s[2] s[3] s[4] s[5] s[6]
Длина строки:
n = len ( s )
s[len(s)-2]
8. Символьные строки
8Символьные строки
Ввод с клавиатуры:
s = input ( "Введите имя: " )
Изменение строки:
s[4] = "a"
! Строка – это неизменяемый объект!
... но можно составить новую строку:
s1 = s + "a"
9. Символьные строки
9Символьные строки
Задача: заменить в строке все буквы "а" на буквы "б".
s = input( "Введите строку:" )
s1 = ""
# строка-результат
for c in s:
перебрать все
символы в строке
if c == "а":
c = "б"
s1 = s1 + c
добавить символ к
print ( s1 )
строке-результату
10. Задачи
10Задачи
«A»: Ввести с клавиатуры символьную строку и заменить в
ней все буквы «а» на «б» и все буквы «б» на «а»
(заглавные на заглавные, строчные на строчные).
Пример:
Введите строку:
ааббААББссСС
Результат:
ббааББААссСС
11. Задачи
11Задачи
«B»: Ввести с клавиатуры символьную строку и определить,
сколько в ней слов. Словом считается
последовательности непробельных символов,
отделенная с двух сторон пробелами (или стоящая с
краю строки). Слова могут быть разделены несколькими
пробелами, в начале и в конце строки тоже могут быть
пробелы.
Пример:
Введите строку:
Вася пошел
гулять
Найдено слов: 3
12. Задачи
12Задачи
«C»: Ввести с клавиатуры символьную строку и найдите
самое длинное слово и его длину. Словом считается
последовательности непробельных символов,
отделенная с двух сторон пробелами (или стоящая с
краю строки). Слова могут быть разделены несколькими
пробелами, в начале и в конце строки тоже могут быть
пробелы.
Пример:
Введите строку:
Вася
пошел гулять
Самое длинное слово: гулять, длина 6
13. Операции со строками
13Операции со строками
Методы строк.
Формат: строка.метод(параметры)
Например:
S.find(str, [start],[end])
Поиск подстроки в строке. Возвращает номер
первого вхождения или -1
S.upper()
Преобразование строки к верхнему регистру
S.lower()
Преобразование строки к нижнему регистру
S.replace(str1, str2)
Замена строки str1 на строку str2
S.count(str, [start],[end])
Возвращает количество непересекающихся
повторений подстроки в диапазоне [начало,
конец]
S.index(str, [start],[end])
Поиск подстроки в строке. Возвращает номер
первого вхождения или вызывает ValueError
14. Операции со строками
14Операции со строками
Объединение (конкатенация) :
s1 = "Привет"
"Привет, Вася!"
s2 = "Вася"
s = s1 + ", " + s2 + "!"
"spamspamspam"
Дублирование строки:
print('spam' * 3)
Срезы:
Срез – это механизм гибкого управления строкой на основе индексации
s = "0123456789"
s1 = s[3:8]
разрезы
0
# "34567"
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9
15. Операции со строками
15Операции со строками
Срезы:
s = "0123456789"
s1 = s[:8]
# "01234567"
от начала строки
s = "0123456789"
s1 = s[3:]
# "3456789"
до конца строки
s1 = s[::-1]
реверс строки
# "9876543210"
16. Операции со строками
16Операции со строками
Срезы с отрицательными индексами:
s = "0123456789"
s1 = s[:-2]
# "01234567"
N-2
s = "0123456789"
s1 = s[-6:-2]
N-6
N-2
# "4567"
17. Операции со строками
17Операции со строками
Удаление:
s = "0123456789"
s1 = s[:3] + s[9:]
"012"
"9"
# "0129"
Вставка:
s = "0123456789"
s1 = s[:3] + "ABC" + s[3:]
"012ABC3456789"
18. Стандартные функции
18Стандартные функции
Верхний/нижний регистр:
s = "aAbBcC"
s1 = s.upper()
s2 = s.lower()
# "AABBCC"
# "aabbcc"
Проверка на цифры:
s = "abc"
print ( s.isdigit() )
s1 = "123"
print ( s1.isdigit() )
… и много других.
# False
# True
19. Поиск в строках
19Поиск в строках
s = "Здесь был Вася."
n = s.find ( "с" )
# n = 3
if n >= 0:
print ( "Номер символа", n )
else:
print ( "Символ не найден." )
! Находит первое слева вхождение
подстроки!
Поиск с конца строки:
s = "Здесь был Вася."
n = s.rfind ( "с" )
# n = 12
20. Пример обработки строк
20Пример обработки строк
Задача: Ввести имя, отчество и фамилию. Преобразовать их к
формату «фамилия-инициалы».
Пример:
Введите имя, отчество и фамилию:
Василий Алибабаевич Хрюндиков
Результат:
Хрюндиков В.А.
Алибабаевич Хрюндиков
Алгоритм:
• найти первый пробел и выделить имя
Хрюндиков
• удалить имя с пробелом из основной строки
• найти первый пробел и выделить отчество
• удалить отчество с пробелом из основной строки
• «сцепить» фамилию, первые буквы имени и фамилии,
точки, пробелы…
Хрюндиков В.А.
21. Пример обработки строк
21Пример обработки строк
print ( "Введите имя, отчество и фамилию:" )
s = input()
n = s.find ( " " )
name = s[:n]
# вырезать имя
s = s[n+1:]
n = s.find ( " " )
name2 = s[:n]
# вырезать отчество
s = s[n+1:]
# осталась фамилия
s = s + " " + name[0] + "." + name2[0] + "."
print ( s )
22. Пример обработки строк
22Пример обработки строк
Решение в стиле Python:
print ( "Введите имя, отчество и фамилию:" )
s = input()
fio = s.split()
s = fio[2] + " " + fio[0][0] + "." + fio[1][0] + "."
print ( s )
Василий Алибабаевич Хрюндиков
fio[0]
fio[1]
fio[2]
23. Задачи
23Задачи
«A»: Ввести с клавиатуры в одну строку фамилию, имя и
отчество, разделив их пробелом. Вывести фамилию и
инициалы.
Пример:
Введите фамилию, имя и отчество:
Иванов Петр Семёнович
П.С. Иванов
24. Задачи
24Задачи
«B»: Ввести адрес файла и «разобрать» его на части,
разделенные знаком "/". Каждую часть вывести в
отдельной строке.
Пример:
Введите адрес файла:
C:/Фото/2013/Поход/vasya.jpg
C:
Фото
2013
Поход
vasya.jpg
25. Задачи
25Задачи
«C»: Напишите программу, которая заменяет во всей строке
одну последовательность символов на другую.
Пример:
Введите строку:
(X > 0) and (Y < X) and (Z > Y) and (Z <> 5)
Что меняем: and
Чем заменить: &
Результат
(X > 0) & (Y < X) & (Z > Y) & (Z <> 5)
26. Преобразования «строка» – «число»
26Преобразования «строка» – «число»
Из строки в число:
s = "123"
N = int ( s )
s = "123.456"
X = float ( s )
# N = 123
# X = 123.456
Из числа в строку:
N = 123
s = str ( N )
s = "{:5d}".format(N)
# s = "123"
# s = " 123"
X = 123.456
s = str ( X )
# s = "123.456"
s = "{:7.2f}".format(X) # s = " 123.46"
s = "{:10.2e}".format(X) # s = " 1.23e+02"
27. Задачи
27Задачи
«A»: Напишите программу, которая вычисляет сумму трех
чисел, введенную в форме символьной строки. Все числа
целые.
Пример:
Введите выражение:
12+3+45
Ответ: 60
«B»: Напишите программу, которая вычисляет выражение,
состоящее из трех чисел и двух знаков (допускаются
только знаки «+» или «–»). Выражение вводится как
символьная строка, все числа целые.
Пример:
Введите выражение:
12-3+45
Ответ: 54
28. Задачи
28Задачи
«C»: Напишите программу, которая вычисляет выражение,
состоящее из трех чисел и двух знаков (допускаются
знаки «+», «–», «*» и «/»). Выражение вводится как
символьная строка, все числа целые. Операция «/»
выполняется как целочисленное деление.
Пример:
Введите выражение:
12*3+45
Ответ: 81
29. Задачи
29Задачи
«D»: Напишите программу, которая вычисляет выражение,
состоящее из трех чисел и двух знаков (допускаются
знаки «+», «–», «*» и «/») и круглых скобок. Выражение
вводится как символьная строка, все числа целые.
Операция «/» выполняется как целочисленное деление
(div).
Пример:
Введите выражение:
2*(3+45)+4
Ответ: 100
30. Строки в процедурах и функциях
30Строки в процедурах и функциях
Задача: построить процедуру, которая заменяет в строке
s все вхождения слова-образца wOld на слово-замену
wNew.
пока слово wOld есть в строке s
удалить слово wOld из строки
вставить на это место слово wNew
? Что плохо?
wOld: "12"
wNew: "A12B"
зацикливание
31. Замена всех экземпляров подстроки
31Замена всех экземпляров подстроки
wNew
wOld
а) res
s
s
б) res
wNew
в) res
s
г) res
s
32. Замена всех экземпляров подстроки
32Замена всех экземпляров подстроки
s = "12.12.12"
s = replaceAll ( s, "12", "A12B" )
print( s )
рабочая строка s
"12.12.12"
".12.12"
".12"
""
результат res
""
"A12B"
"A12B.A12B"
"A12B.A12B.A12B"
33. Замена всех экземпляров подстроки
33Замена всех экземпляров подстроки
def replaceAll ( s, wOld, wNew ):
lenOld = len(wOld)
res = ""
искать образец
while len(s) > 0:
p = s.find ( wOld )
if p < 0:
если не нашли
res = res + s
взять начало
return
перед образцом
if p > 0: res = res + s[:p]
res = res + wNew
добавить
слово-замену
if p+lenOld >= len(s):
s = ""
строка кончилась
else:
s = s[p+lenOld:]
взять «хвост»
return res
34. Замена всех экземпляров подстроки
34Замена всех экземпляров подстроки
Встроенная функция:
s = "12.12.12"
s = s.replace( "12", "A12B" )
print ( s )
35. Задачи
35Задачи
«A»: Напишите функцию, которая отсекает всю часть строки
после первого слова.
Пример:
Введите строку: Однажды в студёную зимнюю пору...
Первое слово: Однажды
36. Задачи
36Задачи
«B»: Напишите функцию, которая заменяет расширение
файла на заданное новое расширение.
Пример:
Введите имя файла: qq
Введите новое расширение: tmp
Результат: qq.tmp
Пример:
Введите имя файла: qq.exe
Введите новое расширение: tmp
Результат: qq.tmp
Пример:
Введите имя файла: qq.work.xml
Введите новое расширение: tmp
Результат: qq.work.tmp
37. Задачи
37Задачи
«C»: Напишите функцию, которая заменяет во всей строке все
римские числа на соответствующие десятичные числа.
Пример:
Введите строку:
В MMXIII году в школе CXXIII состоялся
очередной выпуск XI классов.
Результат:
В 2013 году в школе 123 состоялся очередной
выпуск 11 классов.
38. Рекурсивный перебор
38Рекурсивный перебор
Задача. В алфавите языка племени «тумба-юмба»
четыре буквы: «Ы», «Ш», «Ч» и «О». Нужно вывести
на экран все слова, состоящие из L букв, которые
можно построить из букв этого алфавита.
перебор L-1
символов
Ы
?
?
?
Ш
?
?
?
Ч
?
?
?
0
?
?
?
задача для слов длины
К сведена к задаче для
слов длины L-1!
39. Рекурсивный перебор
39Рекурсивный перебор
перебор L символов
w[0]="Ы"
# перебор последних L-1 символов
w[0]="Ш"
# перебор последних L-1 символов
w[0]="Ч"
# перебор последних L-1 символов
w[0]="О"
# перебор последних L-1 символов
40. Рекурсивный перебор
40Рекурсивный перебор
алфавит
слово
нужная
длина слова
def TumbaWords ( A, w, L ):
if len(w) == L:
слово полной длины
print ( w )
return
по всем символам
алфавита
for c in A:
TumbaWords ( A, w + c, L )
# основная программа
TumbaWords ( "ЫШЧО", "", 3 );
41. Задачи
41Задачи
«A»: В алфавите языке племени «тумба-юмба» четыре буквы:
«Ы», «Ш», «Ч» и «О». Нужно вывести на экран все
возможные слова, состоящие из K букв, в которых вторая
буква «Ы». Подсчитайте количество таких слов.
«B»: В алфавите языке племени «тумба-юмба» четыре буквы:
«Ы», «Ш», «Ч» и «О». Нужно вывести на экран все
возможные слова, состоящие из K букв, в которых есть по
крайней мере две одинаковые буквы, стоящие рядом.
Подсчитайте количество таких слов.
Программа не должна строить другие слова, не
соответствующие условию.
42. Задачи
42Задачи
«C»: В алфавите языке племени «тумба-юмба» четыре буквы:
«Ы», «Ш», «Ч» и «О». Нужно вывести на экран все
возможные слова, состоящие из K букв, в которых есть по
крайней мере две одинаковые буквы, не обязательно
стоящие рядом.
Программа не должна строить другие слова, не
соответствующие условию.
43. Сравнение строк
43Сравнение строк
Пар ? пар ? парк
Сравнение по кодам символов:
CP-1251
UNCODE
CP-1251
UNCODE
CP-1251
UNCODE
0
48
48
1
49
49
...
...
...
8
56
56
9
57
57
A
65
B
66
...
...
Y
89
Z
90
65
66
...
89
90
a
b
...
y
z
97
97
98
98
...
...
121
121
122
122
44. Сравнение строк
44Сравнение строк
А
Б
CP-1251 192 193
UNCODE 1040 1041
...
...
...
Ё
168
1025
...
...
...
Ю
Я
222 223
1070 1071
а
б
CP-1251 224 225
UNCODE 1072 1073
...
...
...
ё
184
1105
...
...
...
ю
я
254 255
1102 1103
5STEAM < STEAM < Steam < steam
steam < ПАР < Пар < пАр < пар < парк
45. Сортировка строк
45Сортировка строк
aS = []
# пустой список строк
print ( "Введите строки для сортировки:" )
while True:
s1 = input()
if s1 == "": break
aS.append ( s1 )
aS.sort()
print ( aS )
# добавить строку в список
# сортировка
46. Задачи
46Задачи
«A»: Вводится 5 строк, в которых сначала записан порядковый
номер строки с точкой, а затем – слово. Вывести слова в
алфавитном порядке.
Пример:
Введите 5 строк:
1. тепловоз
2. арбуз
3. бурундук
4. кефир
5. урядник
Список слов в алфавитном порядке:
арбуз, бурундук, кефир, тепловоз, урядник
47. Задачи
47Задачи
«B»: Вводится несколько строк (не более 20), в которых сначала
записан порядковый номер строки с точкой, а затем –
слово. Ввод заканчивается пустой строкой. Вывести
введённые слова в алфавитном порядке.
Пример:
Введите слова:
1. тепловоз
2. арбуз
Список слов в алфавитном порядке:
арбуз, тепловоз
48. Задачи
48Задачи
«C»: Вводится несколько строк (не более 20), в которых сначала
записаны инициалы и фамилии работников фирмы. Ввод
заканчивается пустой строкой. Отсортировать строки в
алфавитном порядке по фамилии.
Пример:
Введите ФИО:
А.Г. Урядников
Б.В. Тепловозов
В.Д. Арбузов
Список в алфавитном порядке:
В.Д. Арбузов
Б.В. Тепловозов
А.Г. Урядников
programming