猿问

断开一个字符串并反转它的每个元素

我正在学习数据和算法,这是我遇到的问题


问题:编写一个简短的递归 Python 函数,它接受一个字符串 s 并输出它的反向。例如,pots&pans 的反面是 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)    

我在这里遇到错误


TypeError: 'str' object does not support item assignment

我最初的想法是 str 是不可变的。所以最好将它存储在一个列表中并进行操作。但是,当我尝试将 str 分配给列表时遇到了一些问题。有什么解决办法吗?


噜噜哒
浏览 88回答 3
3回答

繁花如伊

尝试这个:a="pots&pans"b=a.split("&")def reverse(word):&nbsp; &nbsp; if not word:&nbsp; &nbsp; &nbsp; &nbsp; return ""&nbsp; &nbsp; 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):&nbsp; &nbsp; if not lis:&nbsp; &nbsp; &nbsp; &nbsp; return ""&nbsp; &nbsp; if type(lis) == list and len(lis) == 1:&nbsp; &nbsp; &nbsp; &nbsp; return reverse(lis[0])&nbsp; &nbsp; if type(lis) == str:&nbsp; &nbsp; &nbsp; &nbsp; return reverse(lis[1:]) + lis[0]&nbsp; &nbsp; if type(lis) == list:&nbsp; &nbsp; &nbsp; &nbsp; return reverse(lis[1:]) + "&" + reverse(lis[0])print(reverse(b))

RISEBY

一种递归方法是将第一个字符附加到字符串其余部分的反面:def rev(s): return rev(s[1:])+s[0] if s else ""输出:rev("pots&pans")'snap&stop'您也可以在不使用参数解包索引的情况下执行此操作:def rev(first,*rest): return rev(*rest)+first if rest else firstrev(*"pots&pans")'snap&stop'

qq_笑_17

尝试这个:a="pots&pans"def reverse(a_string):&nbsp; &nbsp; `letter_list = list(a_string)`&nbsp; &nbsp; `letter_list.reverse()`&nbsp; &nbsp; `return(''.join(letter_list))`print(reverse(a))
随时随地看视频慕课网APP

相关分类

Python
我要回答