Разбейте строку и переверните каждый ее элемент - PullRequest
0 голосов
/ 21 апреля 2020

Я изучаю данные и алгоритм, вот вопрос, который я встретил

Вопрос: Напишите короткую рекурсивную функцию Python, которая принимает строку символов s и выводит ее в обратном порядке. Например, обратная сторона кастрюль и сковородок была бы привязана и остановлена.

a="pots&pans"
b=a.split("&")
c=[]
c=list(b)
def reverse(data,leng,leng2,index,count):
    rev=(leng-1)-count
    if count<leng/2:
        temp=data[index][count]
        data[index][count]=data[index][rev]
        data[index][rev]=temp
    if index==leng2:
        print(data[index-1]+"&"+data[index])
    return reverse(data,leng,leng2,index+1,count)
reverse(c,4,2,0,0)    

Я получил ошибку здесь

TypeError: 'str' object does not support item assignment

Моя первоначальная мысль заключается в том, что str является неизменным. Так что лучше хранить его в списке и выполнять операции. Тем не менее, он столкнулся с некоторой проблемой, когда я пытался назначить str в список. Любое решение этого?

Ответы [ 3 ]

1 голос
/ 25 апреля 2020

Одним из рекурсивных подходов было бы добавить первый символ к обратной стороне остальной части строки:

def rev(s): return rev(s[1:])+s[0] if s else ""

output:

rev("pots&pans")

'snap&stop'

Вы также можете сделать это без индексации с использованием распаковки параметров:

def rev(first,*rest): return rev(*rest)+first if rest else first

rev(*"pots&pans")

'snap&stop'
1 голос
/ 21 апреля 2020

Попробуйте это:

a="pots&pans"
b=a.split("&")

def reverse(word):

    if not word:
        return ""

    return reverse(word[1:]) + word[0]

result = reverse(b[1]) + "&" + reverse(b[0])

print(result)

Если вы хотите, чтобы одна рекурсия также полностью изменила положение всех слов:

a="pots&pans&hello&hi"
b=a.split("&")

def reverse(lis):

    if not lis:
        return ""

    if type(lis) == list and len(lis) == 1:
        return reverse(lis[0])

    if type(lis) == str:
        return reverse(lis[1:]) + lis[0]

    if type(lis) == list:
        return reverse(lis[1:]) + "&" + reverse(lis[0])

print(reverse(b))
0 голосов
/ 21 апреля 2020

Попробуйте это:

a="pots&pans"

def reverse(a_string):
    `letter_list = list(a_string)`
    `letter_list.reverse()`
    `return(''.join(letter_list))`

print(reverse(a))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...