簡體   English   中英

遞歸地反轉Python中的字符串

[英]Reversing a String in Python Recursively

對於家庭作業,我必須創建一個遞歸函數以反轉字符串。 這是我目前所擁有的。 最后三行代碼是由講師編寫的,我們不允許對其進行更改。 當我運行該程序時,什么也不返回。 我認為反轉字符串的代碼是正確的,但是我試圖弄清楚如何打印結果。

def reverse(input_string):
    if len(input_string) == 0:
         return input_string
    else:
         return reverse(input_string[1:]) + input_string[0]

print "Please enter the string you want to reverse: "
initial_input = raw_input()

reverse(initial_input)

您需要打印退貨

因此將reverse(initial_input)分配給了返回值,但是如果您希望將其打印出來,則需要執行`print reverse(initial_input)

因為您不能更改最后三個,所以應該隨函數一起打印而不是返回它。 您的講師可能希望您這樣做以顯示遞歸

在這里,您可以嘗試一下,它稍微復雜一些,但功能相反:

def reverse(text):
    lst = []
    for i in range(0,len(text)):

        lst.append(text[len(text)-(i+1)])

    lst = ''.join(lst)
    print lst

print "Please enter the string you want to reverse: "
initial_input = raw_input()

reverse(initial_input) 

聽起來您只需要在函數中打印反向字符串? 您的講師是否提供輸出看起來像的實際示例?

也許您應該定義一個單獨的函數來執行反向操作,然后讓reverse函數簡單地調用此新函數並打印結果。

def actual_reverse(input_string):
    if len(input_string) == 0:
         return input_string
    else:
         return actual_reverse(input_string[1:]) + input_string[0]

def reverse(input_string):
    print actual_reverse(input_string)

print "Please enter the string you want to reverse: "
initial_input = raw_input()

reverse(initial_input)

基於問題的表述,我假設您的講師不是在文件中而是在交互式外殼中運行此代碼。 因此,為了進行調試,可以隨時在最后一個代碼行( recursive函數的recursive )之前添加print操作符,並且不要忘了之后將其刪除。

您可以自己在交互式外殼中測試代碼,而只需在控制台中運行python 請注意,如果您要一次復制粘貼程序,則raw_input()之后的空行將作為initial_input值。 只需將其復制粘貼到raw_input並包含其一行,輸入您的字符串,然后調用reverse(initial_input)

更簡單的方法是調用python -i your_source.py ,然后調用reverse(initial_input) 只需在這里考慮一下, reverse(initial_input)實際上會運行兩次(在這里這不是問題)。

def reverse(input_string):
    if len(input_string) == 0:
        return input_string
    else:
        return reverse(input_string[1:]) + input_string[0]

print ("Please enter the string you want to reverse: ")
initial_input = input()
print(reverse(initial_input))

除了其他人都說過的以外,您可以從示例代碼中進行相同的遞歸,除非相反。 反向執行此操作將允許您在每個字符通過功能時進行打印。

def reverse(input_string):
    if len(input_string) == 1:
        print input_string[len(input_string) - 1]
        return input_string
    else:
        print input_string[len(input_string) - 1]
        return input_string[len(input_string) - 1] + reverse(input_string[:len(input_string) - 1])

print "Please enter the string you want to reverse: "
initial_input = raw_input()

reverse(initial_input)

它絕對不那么可讀,但是它允許您在不更改最后三行的情況下打印出相反的內容。

您始終可以添加帶有默認值的第二個參數,以指示是否需要打印結果:

def reverse(input_string, p=True):
    if len(input_string) == 0:
        return input_string
    r = reverse(input_string[1:], False) + input_string[0]
    if p == True:
        print(r)
    return r

或者假設您不需要打印換行符,則可以一次打印一個字符:

def reverse(input_string):
    if len(input_string) == 0:
        return input_string
    r = reverse(input_string[1:]) + input_string[0]
    print(input_string[0], end='')  # version 3 print 'print input_string[0],' in version 2.X
    return r

這是另一個遞歸解決方案:

def reverString(data, i):
  if (len(data) + i) == 0:
    return data[0]
  else:
    return data[i] + reverString(data, i-1)

data = 'I am doing great'

print(reverString(data, -1))

控制台輸出: taerg gniod ma I

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM