2013-09-23 98 views
0

對於作業分配,我必須創建一個反轉字符串的遞歸函數。這是我目前的。最後三行代碼由指導者完成,我們不允許改變它們。當我運行該程序時,沒有任何返回。我認爲反轉字符串的代碼是正確的,但我試圖找出如何打印結果。遞歸地在Python中反轉字符串

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

你肯定你不能改變的最後一行?你的邏輯似乎是正確的,但你需要以某種方式打印「reverse」的結果。 – Ross

+0

作業的指示並不是要改變最後三行中的任何內容,但我想不出任何其他方式來做到這一點。我在最後的反轉(initial_input)之前添加了一個打印,它可以工作。 – user2805672

回答

3

您需要打印返回

所以reverse(initial_input)被分配給返回的值,但如果你想讓它打印您需要做的`打印反向(initial_input)

,因爲你不能改變的最後三個你應該打印而不是返回它的功能。您instuctor可能希望你這樣做是爲了顯示遞歸

這裏亞去試試這個它是一個更復雜一些,但它的功能反轉:

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

函數 – TerryA

+0

的第二行(第一行)上也有一個''''我也在我的答案中加上了 – Serial

+0

當我在這裏輸入我的代碼時,我遺漏了最後一個括號,所以這不會導致我一個問題。當我嘗試在我的函數中打印(用打印替換返回)時,出現此錯誤: – user2805672

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

聽起來像是你只需要打印函數中的反向字符串?你的教練提供了一個輸出結果的實際例子嗎?

也許你應該定義一個單獨的函數來做相反的操作,並且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) 
0

除了別人都已經說了,你可以做您的示例代碼相同的遞歸除了在反向。反向操作將允許您在每個角色穿過該功能時進行打印。

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) 

這絕對不是可讀性,但它允許您在不更改最後三行的情況下打印反向。

0

你總是可以用默認值添加第二個參數來表示,如果您需要打印結果或不:

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 
1

基於問題的提法,我會認爲你的老師不會從文件中運行該代碼,但是交互式外殼內。因此,請隨意在調試的最後一行代碼行(調用recursive函數)之前添加print運算符,並且不要忘記隨後刪除它。

您可以在交互式shell中測試自己的代碼,只需在控制檯中運行python即可。請注意,如果您要一次複製粘貼程序,raw_input()之後的空行將作爲initial_input的值。只需複製粘貼至raw_input並輸入您的字符串,然後致電reverse(initial_input)

更簡單的方法是致電python -i your_source.py,並致電reverse(initial_input)。只要在這裏考慮一下,reverse(initial_input)實際上會運行兩次(這不是問題)。

0

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

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