Материал к урокам информатики и ИКТ «Изменение строки в Python – метод replace»
Изменение строки в Python – метод replace 12 задание
Слово replace имеет дословный перевод «заменять», так что название метода точно описывает его назначение. С помощью replace можно заменить часть строки или её всю на другую строку. Слово replace имеет дословный перевод «заменять», так что название метода точно описывает его назначение. С помощью replace можно заменить часть строки или её всю на другую строку.
Синтаксис метода выглядит так: str.replace(old_str, new_str[, count]) В качестве аргументов в метод передаются: old_str – часть исходной строки, которую необходимо заменить. new_str – строка, на которую заменяют исходную строку (old_str). count – определяет количество вхождений подстроки, которые необходимо заменить.
Здесь count – не обязательный параметр. Если его не указывать, то будут заменены все вхождения подстрок на новые.
Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки символов. 1. заменить (v, w) 2. нашлось (v) Первая команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Если цепочки v в строке нет, эта команда не изменяет строку. Вторая команда проверяет, встречается ли цепочка v в строке исполнителя Редактор. Дана программа для исполнителя Редактор: НАЧАЛО ПОКА нашлось (2222) ИЛИ нашлось (666) ЕСЛИ нашлось (2222) ТО заменить (2222, 6) ИНАЧЕ заменить (666, 2) КОНЕЦ ЕСЛИ КОНЕЦ ПОКА КОНЕЦ Какая строка получится в результате применения приведённой выше программы к строке, состоящей из 239 идущих подряд цифр 6? В ответе запишите полученную строку.
НАЧАЛО НАЧАЛО ПОКА нашлось (2222) ИЛИ нашлось (666) ЕСЛИ нашлось (2222) ТО заменить (2222, 6) ИНАЧЕ заменить (666, 2) КОНЕЦ ЕСЛИ КОНЕЦ ПОКА КОНЕЦ 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 Третий параметр в функции replace обозначает, что замену нужно производить один раз. Это в точности соответствует предложенной функции заменить.
Ответ: 2266
Задача 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 в получившейся строке.
Здесь сказали, что начальный порядок цифр в строке неизвестен. А просят написать конкретные данные на выходе. Отсюда делаем вывод, что любой порядок в начале приводит к одному и тому же результату.
НАЧАЛО НАЧАЛО ПОКА нашлось (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])
Чтобы обратится к конкретному символу в строке, используем конструкцию s[позиция символа]. Но нумерация начинается с нуля.
Ответ: 132
Задача 3 Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки символов. 1. заменить (v, w) 2. нашлось (v) Первая команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Если цепочки v в строке нет, эта команда не изменяет строку. Вторая команда проверяет, встречается ли цепочка v в строке исполнителя Редактор. Дана программа для исполнителя Редактор: НАЧАЛО ПОКА нашлось (111) заменить (111, 22) заменить (222, 11) КОНЕЦ ПОКА КОНЕЦ
Известно, что исходная строка содержала более 70 единиц и не содержала других цифр. Укажите минимально возможную длину исходной строки, при которой в результате работы этой программы получится строка, содержащая максимально возможное количество единиц.
исходная строка содержала более 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'))
. Ответ: 73
Задача 4 (Сумма цифр + непонятный символ) Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр. 1. заменить (v, w) 2. нашлось (v) Первая команда заменяет в строке первое слева вхождение цепочки v на цепочку w, вторая проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Дана программа для исполнителя Редактор:
НАЧАЛО НАЧАЛО ПОКА нашлось (>1) ИЛИ нашлось (>2) ИЛИ нашлось (>3) ЕСЛИ нашлось (>1) ТО заменить (>1, 22>) КОНЕЦ ЕСЛИ ЕСЛИ нашлось (>2) ТО заменить (>2, 2>1) КОНЕЦ ЕСЛИ ЕСЛИ нашлось (>3) ТО заменить (>3, 1>2) КОНЕЦ ЕСЛИ КОНЕЦ ПОКА КОНЕЦ
На вход приведённой ниже программе поступает строка, начинающаяся с символа «>», а затем содержащая 28 цифр 1, 18 цифр 2 и 35 цифр 3, расположенных в произвольном порядке. Определите сумму числовых значений цифр строки, получившейся в результате выполнения программы. Так, например, если результат работы программы представлял бы собой строку, состоящую из 50 цифр 4, то верным ответом было бы число 200. На вход приведённой ниже программе поступает строка, начинающаяся с символа «>», а затем содержащая 28 цифр 1, 18 цифр 2 и 35 цифр 3, расположенных в произвольном порядке. Определите сумму числовых значений цифр строки, получившейся в результате выполнения программы. Так, например, если результат работы программы представлял бы собой строку, состоящую из 50 цифр 4, то верным ответом было бы число 200.
На вход программе поступает строка, начинающаяся с символа «>», а затем содержащая 28 цифр 1, 18 цифр 2 и 35 цифр 3, расположенных в произвольном порядке. На вход программе поступает строка, начинающаяся с символа «>», а затем содержащая 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)
Чтобы найти сумму цифр, мы пробегаем по всей строке с помощью цикла range. Если символ не равен ">", то превращаем его в число с помощью функции int() и суммируем в переменную sm.
Ответ: 465
Задача (Трудно запрограммировать) Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр. 1. заменить (v, w) 2. нашлось (v) Первая команда заменяет в строке первое слева вхождение цепочки v на цепочку w, вторая проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь
НАЧАЛО НАЧАЛО НАЧАЛО ПОКА нашлось (11) ЕСЛИ нашлось(112) ТО заменить (112, 5) ИНАЧЕ заменить (11, 3) КОНЕЦ ПОКА КОНЕЦ Исходная строка содержит 23 единицы и 5 двоек, других цифр нет, точный порядок расположения цифр неизвестен. Какую наибольшую сумму цифр может иметь строка, которая получится после выполнения программы?
ЕСЛИ нашлось(112) ТО ЕСЛИ нашлось(112) ТО заменить (112, 5) 1+1+2=4 ->5 (+1) ИНАЧЕ заменить (11, 3) 1+1=2->3 (+1) Здесь не важно, по какой ветке будет идти программа, прирост в сумме цифр будет всегда равен 1.
Исходная строка содержит 23 единицы и 5 двоек: Исходная строка содержит 23 единицы и 5 двоек: заменить (11, 3) 1111111111111111111111122222 11 раз по 3 = 33 122222 = 11 Ответ: 44
Задача 5 Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр. 1. заменить (v, w) 2. нашлось (v) Первая команда заменяет в строке первое слева вхождение цепочки v на цепочку w, вторая проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Дана программа для исполнителя Редактор:
НАЧАЛО ПОКА нашлось (01) или нашлось (02) заменить (01, 2202) заменить (02, 10) КОНЕЦ ПОКА КОНЕЦ Известно, что начальная строка начиналась с нуля, а далее содержала только единицы и двойки. После выполнения данной программы получилась строка, содержащая 40 единиц и 64 двойки. Сколько двоек было в исходной строке ?
Известно, что начальная строка начиналась с нуля, а далее содержала только единицы и двойки. После выполнения данной программы получилась строка, содержащая 40 единиц и 64 двойки. Сколько двоек было в исходной строке ? заменить (01, 2202) заменить (02, 10) 1: 01 -> 2202 -> 2210 2: 02 -> 10 Т.е. в окончательном результате двойки могли возникнуть только из 1. Двоек получается в два раза больше, чем было изначально единиц.
Ответ: Получается, что изначальное количество единиц равно 64 / 2 = 32. Эти 32 единицы так же принесли 32 единицы. Всего 40 единиц стало. Значит, ещё 8 единиц получилось в результате преобразования 02 -> 10. Т.е. двоек будет 8.
Программный способ 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)