2015-04-14 57 views
2

2-3小時前我參加了考試。我們的老師要求我們:用遞歸刪除字符串中的空格

1)從用戶處取一個字符串。

2)將字符串發送給函數。

3)我們的任務是刪除空格,但我們不能使用字符串函數,我們必須使用遞歸。

怎麼了?

def deletespace(name): 
    if(len(name)==0): 
     return "" 
    else: 
     str="" 
     if(ord[name[0]])>chr(65) and ord(name[0])<chr(122): 
      return str+deletespace(name[1:]) 

name=input("Please enter the name..") 
deletespace(name) 

回答

2

你的第二個ifelse子句是丟失。你在這種情況下返回什麼?

0

測試可能已經過去,但你仍然可以學習從下面的例子東西:

>>> def del_char(text, char=' '): 
    head, *tail = text 
    return ('' if head == char else head) + \ 
      (del_char(tail, char) if tail else '') 

>>> def main(): 
    name = input('Please enter your name: ') 
    spaceless = del_char(name) 
    print(spaceless) 


>>> main() 
Please enter your name: Arda Zaman 
ArdaZaman 
>>> 

如果你想要一個更強大的版本del_char功能,試試這個str_replace功能,而不是其可以做同樣的事情,第一,但已擴展能力:

def str_replace(string, old=' ', new='', count=0): 
    head, tail = string[0], string[1:] 
    if head == old: 
     head, count = new, count - 1 
     if not count: 
      return head + tail 
    return head + str_replace(tail, old, new, count) if tail else head 
0

有兩個問題,我看到:

1)。在第6行中,您嘗試訪問ord的索引if(ord[name[0]])>chr(65) and ord(name[0])<chr(122):,這會引發語法錯誤。你可能意指的是if ord(name[0])>chr(65) and ord(name[0])<chr(122):

2)。第二個ifelse案件丟失。

0

1)您每次都通過遞歸重新初始化變量。

2)你永遠不會增加你的回報價值。

嘗試更多的東西一樣:

def removespace(str): 
    if len(str) == 0 : return "" 
    if str[0] == " ": 
     return removespace(str[1:]) 
    else : 
     return str[0] + removespace(str[1:]) 

這應該反過來每個字符添加到返回值,跳過任意空格字符,它發現。

0
def removewhite(string): 

    if len(string) == 0: 
     return "" 
    if string[0] in " :/": 
     return removewhite(string[1:]) 
    else: 
     return string[0] + removewhite(string[1:]) 
string = "abcd , : def" 
+0

這也將刪除「:」和「/」,並添加任何你想要的東西 –