我的功能不会返回整个句子

时间:2012-09-28 03:06:40

标签: python function

所以我想更好地学习python并且我一直在使用这个网站http://www.learnpython.org/

我现在正在接受功能,继承代码

#Add your functions here (before the existing functions) 

def list_benefits():
    myList = ['More organized code','More readable code','Easier code reuse','Allowing     programmers to share and connect code together']
    return myList

def build_sentence(info):
    addMe = " is a benefit of functions!"
    for i in info:
        meInfo = i + addMe
    return meInfo


def name_the_benefits_of_functions():
    list_of_benefits = list_benefits()
    for benefit in list_of_benefits:
        print build_sentence(benefit)

name_the_benefits_of_functions()

输出

  

e是功能的好处!

     

e是功能的好处!

     

e是功能的好处!

     

r是功能的好处!

我缺少什么才能归还整个场景

5 个答案:

答案 0 :(得分:5)

内部def build_sentence(info):

无需循环遍历info,因为您将逐个字符地填充。

def build_sentence(info):
    addMe = " is a benefit of functions!"
    return info + addMe

另外 在这部分:

for i in info:
        meInfo = i + addMe
    return meInfo

每次在循环中不断更改该值时,您都在设置meInfo。 最后,您只需返回循环中的最后一个值

答案 1 :(得分:2)

您的build_sentence()函数会迭代传递给它的字符串,并将每个字母和另一个字符串依次绑定到meInfo。在完成最后一个字母后,它返回值。修复是停止迭代字符串,而只是添加整个东西并返回。

答案 2 :(得分:0)

当你写:

def name_the_benefits_of_functions():
    list_of_benefits = list_benefits()
    for benefit in list_of_benefits:
        print build_sentence(benefit)

使用字符串参数调用build_sentence()。 build_sentence然后迭代字符串中的字符,具有你看到的效果。

相反,调用build_sentence传递整个列表。这将迭代列表,将额外的文本附加到列表中的每个项目(而不是字符串中的每个字符)。

def name_the_benefits_of_functions():
    list_of_benefits = list_benefits()
    print build_sentence(list_of_benefits)

此外,在build_sentence中,您创建然后丢弃从每个列表项创建的文本,仅返回最后一项和额外文本。如果你想打印每一个,你可以移动print语句里面 build_sentence()函数(并可能将它重命名为print_sentence(),或者你可以在该函数中创建一个列表,返回列表:

def build_sentence(info):
    addMe = " is a benefit of functions!"
    result = []
    for i in info:
        result.append(i + addMe)
    return result

答案 3 :(得分:0)

你遇到的问题是你的build_sentence()正在接受一个参数(每个调用只有一个字符串)但迭代它并且只返回最后一个结果(因此它返回一个包含带有静态定义句子其余部分的字符串的最后一个字符。)

如果你遍历一个字符串,那么你将处理字符串的每个字符。

类似的东西:

def build_sentence(benefit):
    '''Returns a sentence from a template filling in benefit as the subject'''
    return "%s is a benefit of functions!' % benefit

...将与您的其余代码一起使用。

或者,您可以拥有build_sentences()功能,例如:

def build_sentences(*benefits):
    '''Returns a list of sentences from a template touting each benefit'''
    results = list()
    for each in benefits:
        results.append("%s is a benefit if functions!" % each)
    return results

...然后简化调用该函数,其中包含以下好处列表:

build_sentences('More organized code','More readable code','Easier code reuse','Allowing programmers to share and connect code together')

......或

build_sentences(*myList)

这个特殊的形式(使用*benefits作为函数定义的参数,要么为函数调用提供可变数量的参数,要么使用*myList表单来扩展列表的内容将该列表应用到“varargs”参数列表中要先进一步。(对于这种情况,这也不是绝对必要的,您可以从函数的参数定义和函数的调用参数中删除*前缀。在使用文字列表的好处调用函数时,您需要将文字字符串参数包装在[...]中以使它们成为文字字符串:

def tout_benefits(benefits):
    '''Given a list of benefits tout them using a template'''
    return [ "%s is a benefit of functions!" % x for x in benefits ]

tout_benefits(['More organized code','More readable code','Easier code reuse','Allowing programmers to share and connect code together'])
# Notice called with `[ ..., ..., ... ]`

另请注意,在最后一种形式中,我将for ...循环缩减为更紧凑的“列表理解”...并且表达式返回一个列表。我也可以在前面的例子中使用过这种形式;但是想要单独介绍它与关于varargs(变量参数/参数)处理的观点。

另请注意,对于所有这些示例,您可以使用+表达式代替"%s ..." %。但是,“字符串格式化”运算符使您可以更准确地控制值如何插入到模板/字符串中,并允许多个值,类型,数字精度和许多其他功能,而不仅仅是简单的字符串连接(使用{{ 1}})。

答案 4 :(得分:0)

修改此函数以返回上面定义的字符串列表:

def list_benefits():
    return "More organized code", "More readable code", "Easier code reuse", "Allowing programmers to share and connect code together"

def build_sentence(info):
    return "%s is a benefit of functions!"% (info)

修改此函数以连接到每个好处 - “是函数的好处!”:

def name_the_benefits_of_functions():
    list_of_benefits = list_benefits()
    for benefit in list_of_benefits:
        print build_sentence(benefit)

name_the_benefits_of_functions()