Задачи, часть 3. Операции со строками и другими последовательностями
При решении следующих задач не пользуйтесь ничем, что мы еще не проходили. Например, мы еще не умеем еще полноценно пользоваться циклами, мы только можем перебирать натуральные числа. И старайтесь вообще не пользоваться циклами там, где они не нужны.
- Дана строка, проверьте, является ли она палиндромом. Т.е. верно ли, что если ее прочитать с конца в начало, то получится та же строка.
- Добавьте в функцию второй логический параметр strict, если он False, то при проверке нужно игнорировать регистр букв и пробелы.
- Дана строка, проверьте, верно ли, что в ней все символы идут парами одинаковых. Например, для строки
aaBBccDD55**нужно вернутьTrue, а для строкиaaBBcC**hFнужно вернутьFalse. - Дана строка, состоящая из букв (это можно не проверять в функции, вам это гарантируется). Проверьте, что регистр букв чередуется.
Например, подходит строка
aBsTjUиaBa, но не подходятaBBaиFFFFa. - Напишите функцию, которой дается строка. Она должна поменять местами все использования 0 на 1, а все использования 1 на 0. Например,
abc01xyz000111должно превратиться вabc10xyz111000.-
Чтобы решить задачу, воспользуйтесь методом
translate. Он заменяет в строке символы по указанному правилу. Например, мы хотим символ'a'заменить на'1', символbна'2', а символ'c'на'3'.Давайте на секунду предположим, что эти правила вместе хранятся в одной переменной
rules, чуть позже мы узнаем, как сделать такую переменную с правилами. Тогда можно будет написать"aabbcc".translate(rules), и получится результат"112233".Как же записать правила в переменную? Это делается с помощью вспомогательного метода
str.maketrans, ему надо передать строку из символов для замены и строку символов, которыми надо заменить:rules = str.maketrans("abc", "123"). Строки внутриstr.maketransдолжны быть одинаковой длины. Первый символ первой строки заменяется на первый символ второй и т.д.После этого переменной rules можно пользоваться для разных строк, например,
"abcabc".translate(rules)превратится в"123123", а"abcdefaa".tranlate(rules)превратится в"123def11".Внимание. Многие из вас уже пытались сдать мне задачу с
maketrans, но сделали это неправильно, написавs.maketransвместоstr.maketrans, кроме того, не сумев объяснить, что делает эта функция.strэто знакомый нам тип строк, и мы уже использовали его как функцию для превращения объектов в строки, например,str(1). Я прошу теперь сдавать мне эту задачу с комментарием рядом сmaketrans, который кратко, в одну строку объясняет, что делаетstr.maketrans. Если вы писалиs.maketrans, то допишите в комментарий еще, почему строкаsне нужна в этом месте. -
Добавьте в функцию два параметра: символы для замены. Т.е. заменять можно не только 0 на 1 и наоборот, а любой символ на любой. На самом деле, решить нужно эту задачу. А вариант с 0 и 1 нужен только для тренировки.
попробуйте разобраться в паре методов
translateиmaketrans.
-
- Кривая дракона. В функцию передается один аргумент, целое число \(n\ge0\). Если передан 0, нужно вернуть строку
R. Иначе нужно повторить \(n\) раз следующую операцию: допустим, на предыдущем шаге мы получили строку \(S\). Нужно к ней приписать буквуR, а потом приписать снова \(S\), но, во-первых, прочитанную с конца, а, во-вторых, в которой буквыRзаменены на буквыLи наоборот. Например, при \(n=1\) получаетсяRRLкакR+R+L, при \(n=2\) получаетсяRRLRRLL=RRL+R+RLLи т.д.- В качесте необязательного дополнения: подключите библиотеку
turtle, разберитесь в ней и заставьте черепаху двигаться по полученным в этой задаче правилам. Она идет на фиксированное расстояние, потом поворачивается направо или налево в зависимости от очередной буквы в строке, потом снова идет на такое же расстояние, и процесс продолжается.
- В качесте необязательного дополнения: подключите библиотеку
- Коды Грея, часть 1. Создайте функцию, в которую передается один аргумент, целое число \(n\ge0\). Если передан 0, нужно вернуть список
[0]. Иначе нужно повторить \(n\) раз следующую операцию: приписать список из предыдущего шага к самому себе, вставив в середине число с номером шага. На примере это выглядит так:n = 0 [0] n = 1 [0 1 0] n = 2 [0 1 0 2 0 1 0] n = 3 [0 1 0 2 0 1 0 3 0 1 0 2 0 1 0] ... - Коды Грея, часть 2. Создайте функцию, в которую передается один аргумент, целое число \(n\ge0\). Нужно вызвать функцию из прошлой задачи с аргументом \(n - 1\) и запомнить полученный список в переменную
positions. Дальше вы создаете списокgrayиз \(n\) нулей и начинаете перебирать элементыpositions. Каждый элементpositionsговорит, по какому индексу в спискеgrayнужно заменять 0 на 1 или 1 на 0. Все полученные спискиgrayнужно собрать в один большой список и вернуть его. Например, при \(n = 3\) должен получиться результат:[ [0, 0, 0], [1, 0, 0], [1, 1, 0], [0, 1, 0], [0, 1, 1], [1, 1, 1], [1, 0, 1], [0, 0, 1] ]
iposov@gmail.com