Drinks" 发送到函数。在该函数中,我应该使用 raw_input() 添加新值,直到输入空字符串。 这些输入中的每一个都应添加到初始字符串中。如果是空-6ren">
gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 17:43:24 24 4
gpt4 key购买 nike

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

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

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

请解释我做错了什么以及最Pythonic的方法是什么。

代码如下:

#!/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)

最佳答案

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

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

或者使用 while 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

关于python - 调用自身的函数仅返回其调用的第一个结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30149971/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com