首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >函数不返回'for‘循环的所有结果

函数不返回'for‘循环的所有结果
EN

Stack Overflow用户
提问于 2013-04-19 19:06:43
回答 3查看 4.1K关注 0票数 4

我创建了一个简单的函数,根据您决定运行的数字打印出乘法表图表。由于我对该语言的基本理解,我遇到的问题是为什么它只返回第一个循环,而不返回其他循环。

代码语言:javascript
运行
复制
def timestables(number):
  for a in range(1, number+1):
    b = a*a
    c = a
    return (str(c) + " * " + str(c) + " = " + str(b))

print(timestables(5))

我得到了答案..

代码语言:javascript
运行
复制
1 * 1 = 1

我试图通过使用print而不是return来纠正这个问题,但最终也出现了None。

代码语言:javascript
运行
复制
def timestables(number):
  for a in range(1, number+1):
    b = a*a
    c = a
    print (str(c) + " * " + str(c) + " = " + str(b))

print(timestables(5))

我得到了答案..

代码语言:javascript
运行
复制
1 * 1 = 1
2 * 2 = 4
3 * 3 = 9
4 * 4 = 16
5 * 5 = 25
None

如何从for循环返回所有给定的结果,以避免出现None错误?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-19 19:08:35

你在for循环中执行return-函数一旦命中return语句就会立即停止执行。

要解决此问题,您可以使用列表来存储这些值,然后返回该列表。

代码语言:javascript
运行
复制
def timestables(number):
    lst = []
    for a in range(1, number+1):
        b = a*a
        c = a
        lst.append(str(c) + " * " + str(c) + " = " + str(b))
    return lst

顺便说一下,您应该使用来构建字符串,如下所示。

代码语言:javascript
运行
复制
lst.append('{a} * {a} = {b}'.format(a=a, b=a*a))

现在我们可以去掉所有这些中间变量(bc),而可以使用。

代码语言:javascript
运行
复制
def timestables(number):
    return ['{a} * {a} = {b}'.format(a=a, b=a*a) for a in range(1, number+1)]

如果您不希望该函数返回列表,而是返回多行字符串,则可以使用str.join

代码语言:javascript
运行
复制
def timestables(number):
    return '\n'.join('{a} * {a} = {b}'.format(a=a, b=a*a) for a in range(1, number+1))

现在我们可以测试函数了:

代码语言:javascript
运行
复制
>>> print(timestables(5))
1 * 1 = 1
2 * 2 = 4
3 * 3 = 9
4 * 4 = 16
5 * 5 = 25
票数 10
EN

Stack Overflow用户

发布于 2013-04-19 19:11:44

yield他们。

代码语言:javascript
运行
复制
def timestables(number):
  for a in range(1, number+1):
    yield '%s + %s = %s' % (a, a, a*a )

for x in timestables(5):
  print x

这会把你的函数变成一个生成器函数,你需要迭代结果,也就是说,结果不是一个列表,而是一个迭代器。

如果您需要一个列表,最简单的方法是显式创建一个:

代码语言:javascript
运行
复制
res = list(timestables(5))

但是,再说一次,如果你不这样做,你就不会。

我的天,这是最具蟒蛇气息的方式。

票数 15
EN

Stack Overflow用户

发布于 2013-04-19 19:10:43

您可以返回一个数组:

代码语言:javascript
运行
复制
def timestables(number):
    out = []
    for a in range(1, number+1):
        b = a*a
        c = a
        out.append( str(c) + " * " + str(c) + " = " + str(b))

    return out
print(timestables(5))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16103187

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档