使用递归删除字符串中的空格

时间:2015-04-14 17:09:58

标签: python function recursion

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

5 个答案:

答案 0 :(得分:2)

您的第二个else的{​​{1}}条款丢失了。在这种情况下,你会回报什么?

答案 1 :(得分: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

答案 2 :(得分: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)。第二个else的{​​{1}}案例丢失了。

答案 3 :(得分: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:])

这应该依次将每个字符添加到返回值,跳过它找到的任何空格字符。

答案 4 :(得分: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"