2

所以我正在尝试更好地学习 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 是函数的好处!

我缺少什么来返回整个香味

4

5 回答 5

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,不断更改该值。最后,您只是返回从循环中获得的最后一个值

于 2012-09-28T03:13:23.743 回答
2

您的build_sentence()函数遍历传递给它的字符串,并将每个字母加上另一个字符串依次绑定到meInfo. 在它完成最后一个字母后,它返回值。解决方法是停止迭代字符串,而只是添加整个内容并返回。

于 2012-09-28T03:10:15.060 回答
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 传递整个列表。这将遍历list,将额外的文本附加到列表中的每个项目(而不是字符串中的每个字符)。

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

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

def build_sentence(info):
    addMe = " is a benefit of functions!"
    result = []
    for i in info:
        result.append(i + addMe)
    return result
于 2012-09-28T03:13:40.500 回答
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 ..." %所有这些示例。但是,“字符串格式化”运算符让您可以更好地控制值如何插入到模板/字符串中,并允许多个值、类型、数字精度和许多其他功能,这些功能远远超出了简单的字符串连接(使用+)。

于 2012-09-28T03:35:38.090 回答
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()
于 2013-09-09T19:51:23.657 回答