Программа курса:
Разбор задачи: Реверсивные буквы
Предложенный нами код решения:
def reverseString(s):
"""
:type s: str
:rtype: str
"""
# Выбираем только английские буквы из строки
letters = [ch for ch in s if ch.isalpha()]
# Создаём новую строку, переворачивая только буквы
result = []
for ch in s:
if ch.isalpha():
result.append(letters.pop())
else:
result.append(ch)
return ''.join(result)Рассмотрим решение задачи шаг за шагом:
Извлечение английских букв
Первая строка кода с использованием спискового включения:letters = [ch for ch in s if ch.isalpha()]Здесь мы создаём список
letters, в который добавляем все символы строкиs, которые являются английскими буквами. Символы, которые не проходят проверку методом.isalpha(), игнорируются. В итоге, вlettersпопадают только буквы в их исходном порядке.Пример:
Для строки"a-bC-dEf-ghIj", списокlettersбудет:['a', 'b', 'C', 'd', 'E', 'f', 'g', 'h', 'I', 'j'].Создание результирующей строки
Далее, мы создаём пустой списокresult, который будет содержать символы результирующей строки:result = []После этого мы проходим по каждому символу исходной строки
sс помощью цикла:for ch in s: if ch.isalpha(): result.append(letters.pop()) else: result.append(ch)- Если символ
chявляется буквой (проверяется с помощью.isalpha()), из спискаlettersизвлекается последняя буква методом.pop(), и она добавляется вresult. Это позволяет инвертировать порядок букв. - Если символ не является буквой, он просто добавляется в
resultбез изменений.
Пример:
Для символов строки"a-bC-dEf-ghIj"шаги будут следующими:- Символ
'a'→ это буква, берём'j'изletters, добавляем вresult. - Символ
'-'→ не буква, добавляем'-'вresult. - Символ
'b'→ это буква, берём'I'изletters, добавляем вresult.
Итоговый список
result:['j', '-', 'I', 'h', 'g', 'f', '-', 'E', 'd', 'C', 'b', 'a'].- Если символ
Объединение символов в строку
После завершения обработки всех символов исходной строки, списокresultпреобразуется в строку с помощью метода''.join():return ''.join(result)Это возвращает строку, в которой все английские буквы перевёрнуты, а неалфавитные символы остались на своих местах.
Пример:
Список['j', '-', 'I', 'h', 'g', 'f', '-', 'E', 'd', 'C', 'b', 'a']преобразуется в строку"j-Ih-gfE-dCba".
xsnm
,# Напишите определение функции reverseString(s), которая принимает на вход строку s.
# Функция должна вернуть новую строку, в которой:
# Все символы, не являющиеся английскими буквами, остаются на своих местах.
# Все английские буквы (как прописные, так и строчные) располагаются в обратном порядке.
# Пример 1
# Входные данные:
# s = "ab-cdф."
# Выходные данные:
# "dc-baф." ///////=> фd-cba.
Ошибка: Для входных данных s = "ab-cdф." факт ///////=> фd-cba.