调用自身的函数仅返回其调用的第一个结果

时间:2015-05-10 09:51:09

标签: python return call

我有一个发送到函数的字符串s="expences > drinks"。在该函数内部,我应该使用raw_input()添加新值,直到我输入一个空字符串。

应将这些输入中的每一个添加到初始字符串中。对于空字符串,该函数必须返回包含所有先前添加的单词的字符串。

我尝试通过从自身调用函数并将其传递给已更改的字符串来实现它,但它只返回第一个添加的单词。我也试过避免使用while True:从自身调用函数,如果是空字符串然后打破循环并返回值。但这些变体都不能正常工作。

请解释我做错了什么,以及最狡猾的做法是什么。

以下是代码:

#!/usr/bin/env python -tt
# -*- coding: utf-8 -*-

def create_sub_cat(parent):     
    print "creating subcat\n %s > " %(parent)
    conf=raw_input("type new subcat or press \"ENTER\" to save changes\n")
    if conf!="":
        parent+=" > "+conf
        create_sub_cat(parent)
    return parent

s="expences  > drinks"
print create_sub_cat(s)

1 个答案:

答案 0 :(得分:1)

你可以将iter与for循环一起使用,你不需要继续调用该函数,iter需要一个sentinel值作为它的最后一个arg,它将一直循环直到输入sentinel值:

def create_sub_cat(parent):
    print "creating subcat\n {} > ".format(parent)
    for conf in iter(lambda: raw_input("type new subcat or"
                                       " press \"ENTER\" to save changes\n"),""): # empty string for sentinel value
        parent += " > " + conf
    return parent

或使用一段时间True:

def create_sub_cat(parent):
    print "creating subcat\n {} > ".format(parent)
    while True:
        conf = raw_input("type new subcat or"
                                       " press \"ENTER\" to save changes\n")
        if not conf: # if user enters empty string break
            break
        parent +=" > " + conf # else keep concatenating
    return parent

为什么你的代码不起作用是因为你没有返回递归调用所以你只得到第一个值:

def create_sub_cat(parent):
    print "creating subcat\n %s > " %(parent)
    conf=raw_input("type new subcat or press \"ENTER\" to save changes\n")
    if conf!="":
        parent+=" > "+conf
        return create_sub_cat(parent) # return 
    return parent