def pyg(n):
n=int(n)
for i in range(1,n):
a=(2*i)+1
b=(2*i)*(i+1)
c=(2*i)*(i+1)+1
return(a,b,c)
当我尝试使用pyg(100)
在Shell上运行它时,我只获得输出(3,4,5)。
可能是所有三胞胎都没有产生的问题。
答案 0 :(得分:0)
return
句。将其更改为yield
。如果你想测试它,你可以:
>>> pygs = pyg(100)
>>> next(pygs)
(3, 4, 5)
>>> next(pygs)
.
.
.
答案 1 :(得分:0)
您的函数只生成一对,因为return
会中断函数执行。您可以按照yield
或@jgomo3函数的建议使用map
关键字:
def generate_triplet(n):
a=(2*n)+1
b=(2*n)*(n+1)
c=(2*n)*(n+1)+1
return(a,b,c)
def pyg(n):
return map(generate_triplet, range(1, int(n))
答案 2 :(得分:0)
正如许多其他人所指出的那样,当return语句执行时,你的函数将完成,并且不会继续循环。但是,您可以选择从单个函数返回多个值。例如,在列表中聚合您的值并返回该值,或使用yield
关键字而不是return
。 yield
关键字将使您的函数成为生成器函数,它将返回带有所有预期元素的可迭代生成器对象。
我建议您将代码拆分为单独的函数,这样您就可以将原始公式作为i 的函数,以及生成函数,它将返回1 <= i < n
的元素。请注意,您可以将生成器的元素提供给列表,方法是将其提供给list
构造函数。
def pyg(i):
a = (2*i) + 1
b = (2*i) * (i+1)
c = (2*i) * (i+1) + 1
return (a,b,c)
def pygs(n):
for i in range(1, n):
yield pyg(i)
print(list(pygs(10))) # prints the first 9 Pythagorean triplet as a list of tuples