我已经制作了一个简单的功能,根据您决定使用的数字打印出时间表图表。由于我对该语言的基本理解,我遇到的问题是为什么它只返回第一个循环而没有别的。
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))
我得到答案..
1 * 1 = 1
我试图通过使用print而不是return来纠正这个问题,但这最终会导致出现无效。
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))
我得到答案..
1 * 1 = 1
2 * 2 = 4
3 * 3 = 9
4 * 4 = 16
5 * 5 = 25
None
如何从for循环中返回所有给定的结果以避免出现None错误?
答案 0 :(得分:15)
yield
他们。
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
这会将您的函数转换为生成函数,您需要迭代结果,即结果不是列表,而是可迭代的。
如果您需要列表,最简单的方法是明确创建一个:
res = list(timestables(5))
但是,如果你不这样做,你就不会。
恕我直言,这是最蟒蛇的方式。答案 1 :(得分:9)
你在return
循环内for
- 函数在点击return
语句后立即停止执行。
要解决此问题,您可以使用列表来存储这些值,然后返回该列表。
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
作为旁注,您应该使用string formatting来构建字符串,就像这样。
lst.append('{a} * {a} = {b}'.format(a=a, b=a*a))
现在我们可以摆脱所有这些中间变量(b
和c
),我们可以使用list comprehension代替。
def timestables(number):
return ['{a} * {a} = {b}'.format(a=a, b=a*a) for a in range(1, number+1)]
如果您不希望函数返回列表,而是多行字符串,则可以使用str.join
:
def timestables(number):
return '\n'.join('{a} * {a} = {b}'.format(a=a, b=a*a) for a in range(1, number+1))
现在我们可以测试一下这个功能:
>>> print(timestables(5))
1 * 1 = 1
2 * 2 = 4
3 * 3 = 9
4 * 4 = 16
5 * 5 = 25
答案 2 :(得分:0)
您可以返回一个数组:
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))