AlexWithYou
AlexWithYou

Reputation: 429

Break a string and reverse each element of it

I'm learning data and algorithm, here is the question I met

Question:Write a short recursive Python function that takes a character string s and outputs its reverse. For example, the reverse of pots&pans would be snap&stop .

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)    

I got an error here

TypeError: 'str' object does not support item assignment

My initial thought is that str is immutable. So it is better to store it in an list and do the operations. However, it met some problem when I trying to assign str to a list. Any solution to this?

Upvotes: 0

Views: 251

Answers (3)

Alain T.
Alain T.

Reputation: 42133

One recursive approach would be to append the first character to the reverse of the rest of the string:

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

output:

rev("pots&pans")

'snap&stop'

You could also do this without indexing using parameter unpacking:

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

rev(*"pots&pans")

'snap&stop'

Upvotes: 1

Ivy Zhang
Ivy Zhang

Reputation: 1

Try this:

a="pots&pans"

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

print(reverse(a))

Upvotes: -1

Frank
Frank

Reputation: 1285

Try this:

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)

If you want one recursion to also reverse all the words position:

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))

Upvotes: 1

Related Questions