Слайды и текст этой онлайн презентации
Слайд 1
Изменение строки в Python – метод replace
12 задание
Слайд 2
Слово replace имеет дословный перевод «заменять», так что название метода точно описывает его назначение. С помощью replace можно заменить часть строки или её всю на другую строку.
Слайд 3
Синтаксис метода выглядит так:
str.replace(old_str, new_str[, count])
В качестве аргументов в метод передаются:
old_str – часть исходной строки, которую необходимо заменить.
new_str – строка, на которую заменяют исходную строку (old_str).
count – определяет количество вхождений подстроки, которые необходимо заменить.
Слайд 4
Здесь count – не обязательный параметр. Если его не указывать, то будут заменены все вхождения подстрок на новые.
Слайд 5
Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки символов.
1. заменить (v, w) 2. нашлось (v)
Первая команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Если цепочки v в строке нет, эта команда не изменяет строку. Вторая команда проверяет, встречается ли цепочка v в строке исполнителя Редактор. Дана программа для исполнителя Редактор:
НАЧАЛО
ПОКА нашлось (2222) ИЛИ нашлось (666)
ЕСЛИ нашлось (2222)
ТО заменить (2222, 6)
ИНАЧЕ заменить (666, 2)
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ
Какая строка получится в результате применения приведённой выше программы к строке, состоящей из 239 идущих подряд цифр 6? В ответе запишите полученную строку.
Слайд 6
s = '6'*239
while ('2222' in s) or ('666' in s):
if '2222' in s:
s = s.replace('2222', '6', 1)
else: s = s.replace('666', '2', 1)
print(s)
239 идущих подряд цифр 6
НАЧАЛО
ПОКА нашлось (2222) ИЛИ нашлось (666)
ЕСЛИ нашлось (2222)
ТО заменить (2222, 6)
ИНАЧЕ заменить (666, 2)
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ
Третий параметр в функции replace обозначает, что замену нужно производить один раз. Это в точности соответствует предложенной функции заменить.
Слайд 8
Задача 2
Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр. 1. заменить (v, w) 2. нашлось (v)
Первая команда заменяет в строке первое слева вхождение цепочки v на цепочку w, вторая проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Дана программа для исполнителя Редактор:
НАЧАЛО
ПОКА нашлось (21) ИЛИ нашлось (31) ИЛИ нашлось (23)
ЕСЛИ нашлось (21)
ТО заменить (21, 12)
КОНЕЦ ЕСЛИ
ЕСЛИ нашлось (31)
ТО заменить (31, 13)
КОНЕЦ ЕСЛИ
ЕСЛИ нашлось (23)
ТО заменить (23, 32)
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ
На вход приведённой ниже программе поступает строка, содержащая 50 цифр 1, 50 цифр 2 и 50 цифр 3, расположенных в произвольном порядке. Запишите без разделителей символы, которые имеют порядковые номера 10, 90 и 130 в получившейся строке.
Слайд 9
Здесь сказали, что начальный порядок цифр в строке неизвестен. А просят написать конкретные данные на выходе. Отсюда делаем вывод, что любой порядок в начале приводит к одному и тому же результату.
Слайд 10
НАЧАЛО
ПОКА нашлось (21) ИЛИ нашлось (31) ИЛИ нашлось (23)
ЕСЛИ нашлось (21)
ТО заменить (21, 12)
КОНЕЦ ЕСЛИ
ЕСЛИ нашлось (31)
ТО заменить (31, 13)
КОНЕЦ ЕСЛИ
ЕСЛИ нашлось (23)
ТО заменить (23, 32)
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ
Запишите без разделителей символы, которые имеют порядковые номера 10, 90 и 130 в получившейся строке.
s = '1'*50 + '2'*50 + '3'*50
while ('21' in s) or ('31' in s) or ('23' in s):
if '21' in s:
s = s.replace('21', '12', 1)
if '31' in s: s = s.replace('31', '13', 1)
if '23' in s: s = s.replace('23', '32', 1)
print(s[9] + s[89] + s[129])
Слайд 11
Чтобы обратится к конкретному символу в строке, используем конструкцию s[позиция символа]. Но нумерация начинается с нуля.
Слайд 13
Задача 3
Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки символов.
1. заменить (v, w) 2. нашлось (v)
Первая команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Если цепочки v в строке нет, эта команда не изменяет строку. Вторая команда проверяет, встречается ли цепочка v в строке исполнителя Редактор. Дана программа для исполнителя Редактор:
НАЧАЛО
ПОКА нашлось (111)
заменить (111, 22)
заменить (222, 11)
КОНЕЦ ПОКА
КОНЕЦ
Слайд 14
Известно, что исходная строка содержала более 70 единиц и не содержала других цифр. Укажите минимально возможную длину исходной строки, при которой в результате работы этой программы получится строка, содержащая максимально возможное количество единиц.
Слайд 15
исходная строка содержала более 70
единиц и не содержала других цифр
НАЧАЛО
ПОКА нашлось (111)
заменить (111, 22)
заменить (222, 11)
КОНЕЦ ПОКА
КОНЕЦ
for i in range(71, 1000):
s = '1'*i
while '111' in s:
s = s.replace('111', '22', 1)
s = s.replace('222', '11', 1)
print(i, s.count('1'))
Слайд 17
Задача 4 (Сумма цифр + непонятный символ)
Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр. 1. заменить (v, w) 2. нашлось (v) Первая команда заменяет в строке первое слева вхождение цепочки v на цепочку w, вторая проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Дана программа для исполнителя Редактор:
Слайд 18
НАЧАЛО
ПОКА
нашлось (>1) ИЛИ нашлось (>2) ИЛИ нашлось (>3)
ЕСЛИ нашлось (>1)
ТО заменить (>1, 22>)
КОНЕЦ ЕСЛИ
ЕСЛИ нашлось (>2)
ТО заменить (>2, 2>1)
КОНЕЦ ЕСЛИ
ЕСЛИ нашлось (>3)
ТО заменить (>3, 1>2)
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ
Слайд 19
На вход приведённой ниже программе поступает строка, начинающаяся с символа «>», а затем содержащая 28 цифр 1, 18 цифр 2 и 35 цифр 3, расположенных в произвольном порядке. Определите сумму числовых значений цифр строки, получившейся в результате выполнения программы. Так, например, если результат работы программы представлял бы собой строку, состоящую из 50 цифр 4, то верным ответом было бы число 200.
Слайд 20
На вход программе поступает строка, начинающаяся с символа «>», а затем содержащая 28 цифр 1, 18 цифр 2 и 35 цифр 3, расположенных в произвольном порядке.
НАЧАЛО
НАЧАЛО ПОКА
нашлось (>1) ИЛИ нашлось (>2) ИЛИ нашлось (>3)
ЕСЛИ нашлось (>1)
ТО заменить (>1, 22>)
КОНЕЦ ЕСЛИ
ЕСЛИ нашлось (>2)
ТО заменить (>2, 2>1)
КОНЕЦ ЕСЛИ
ЕСЛИ нашлось (>3)
ТО заменить (>3, 1>2)
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ
Определите сумму числовых значений цифр строки, получившейся в результате выполнения программы.
s = '>' + '1'*28 + '2'*18 + '3'*35
while ('>1' in s) or ('>2' in s) or ('>3' in s):
if '>1' in s:
s = s.replace('>1', '22>', 1)
if '>2' in s:
s = s.replace('>2', '2>1', 1)
if '>3' in s:
s = s.replace('>3', '1>2', 1)
# Находим сумму цифр в строке
sm=0
for i in range(0, len(s)):
if s[i]!='>':
sm = sm + int(s[i])
print(sm)
Слайд 21
Чтобы найти сумму цифр, мы пробегаем по всей строке с помощью цикла range. Если символ не равен ">", то превращаем его в число с помощью функции int() и суммируем в переменную sm.
Слайд 23
Задача (Трудно запрограммировать)
Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр.
1. заменить (v, w) 2. нашлось (v) Первая команда заменяет в строке первое слева вхождение цепочки v на цепочку w, вторая проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь
Слайд 24
НАЧАЛО
НАЧАЛО ПОКА нашлось (11)
ЕСЛИ нашлось(112) ТО
заменить (112, 5)
ИНАЧЕ заменить (11, 3)
КОНЕЦ ПОКА
КОНЕЦ
Исходная строка содержит 23 единицы и 5 двоек, других цифр нет, точный порядок расположения цифр неизвестен. Какую наибольшую сумму цифр может иметь строка, которая получится после выполнения программы?
Слайд 25
ЕСЛИ нашлось(112) ТО
заменить (112, 5) 1+1+2=4 ->5 (+1)
ИНАЧЕ заменить (11, 3) 1+1=2->3 (+1)
Здесь не важно, по какой ветке будет идти программа, прирост в сумме цифр будет всегда равен 1.
Слайд 26
Исходная строка содержит 23 единицы и 5 двоек:
заменить (11, 3) 1111111111111111111111122222
11 раз по 3 = 33
122222 = 11
Ответ: 44
Слайд 27
Задача 5
Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр.
1. заменить (v, w) 2. нашлось (v) Первая команда заменяет в строке первое слева вхождение цепочки v на цепочку w, вторая проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Дана программа для исполнителя Редактор:
Слайд 28
НАЧАЛО
ПОКА нашлось (01) или нашлось (02)
заменить (01, 2202)
заменить (02, 10)
КОНЕЦ ПОКА
КОНЕЦ
Известно, что начальная строка начиналась с нуля, а далее содержала только единицы и двойки. После выполнения данной программы получилась строка, содержащая 40 единиц и 64 двойки. Сколько двоек было в исходной строке ?
Слайд 29
Известно, что начальная строка начиналась с нуля, а далее содержала только единицы и двойки. После выполнения данной программы получилась строка, содержащая 40 единиц и 64 двойки. Сколько двоек было в исходной строке ?
заменить (01, 2202)
заменить (02, 10)
1: 01 -> 2202 -> 2210
2:
02 -> 10
Т.е. в окончательном результате двойки могли возникнуть только из 1. Двоек получается в два раза больше, чем было изначально единиц.
Слайд 30
Ответ:
Получается, что изначальное количество единиц равно 64 / 2 = 32. Эти 32 единицы так же принесли 32 единицы. Всего 40 единиц стало. Значит, ещё 8 единиц получилось в результате преобразования 02 -> 10. Т.е. двоек будет 8.
Слайд 31
Программный способ
for i in range(1, 100):
for j in range(1, 100):
s = '0' + '1'*i + '2'*j
while ('01' in s) or ('02' in s):
s = s.replace('01', '2202', 1)
s = s.replace('02', '10', 1)
if s.count('1')==40 and s.count('2')==64:
print(j)
Слайд 32
Источник информации:
https://code-enjoy.ru/ege_po_informatike_2022_zadanie_12_vpered_k_pobede/