Python 毕达哥拉斯三胞胎打印所有数字

Python 毕达哥拉斯三胞胎打印所有数字,python,Python,我不明白为什么毕达哥拉斯的三重密码会打印所有的数字,而不仅仅是其中的3 import math def pythagorean_triplet(n): if 1 <= n <= 90000: for b in range(n): for a in range(1, b): c = math.sqrt(a * a + b * b) if c % 1 == 0:

我不明白为什么毕达哥拉斯的三重密码会打印所有的数字,而不仅仅是其中的3

import math

def pythagorean_triplet(n):
    if 1 <= n <= 90000:
        for b in range(n):
            for a in range(1, b):
                c = math.sqrt(a * a + b * b)
                if c % 1 == 0:
                    print(a, b, int(c))



x = int(input())

pythagorean_triplet(x)
导入数学
def毕达哥拉斯三重态(n):

如果1我不确定你的问题,但是如果输出应该是最后一个三元组,为什么不从后面开始,在找到数字的时候结束循环呢?下面的代码给了我:
121620

import math


def pythagorean_triplet(n):
    if 1 <= n <= 90000:
        for b in range(n - 1, 0, -1):
            for a in range(b - 1, 0, -1):
                c = math.sqrt(a * a + b * b)
                if c % 1 == 0:
                    print(a, b, int(c))
                    return


x = int(input())

pythagorean_triplet(x)
这是你要求的,但我不应该这样做,因为这是不必要的复杂

import math


def pythagorean_triplet(n):
    if 1 <= n <= 90000:
        for b in range(n):
            for a in range(1, b):
                c = math.sqrt(a * a + b * b)
                if c % 1 == 0:
                    print(a, b, int(c))
                    return


x = int(input())

pythagorean_triplet(x)
导入数学
def毕达哥拉斯三重态(n):

如果是这样的话,我想我不明白别人给我的问题。结果只有3个数字。所以我很困惑!在我问过之后,我发现3个数字的总和应该等于输入值:

    import math

y = []
x = int(input())
if 1 <= x <= 90000:
    for b in range(x):
        for a in range(1, b):
            c = math.sqrt(a * a + b * b)
            u = a + b + c
            if c > x:
                break
            elif c % 1 == 0:
                if u == x:
                    k = (a, b, int(c))
                    y.append(k)

if len(y) != 0:
    for a_tuple in y:  # iterates through each tuple
        for item in a_tuple:  # iterates through each tuple items
            print(item, end=" ")
else:
    print("Impossible")
导入数学
y=[]
x=int(输入())

如果1,你说“不只是那里”是什么意思?不能复制。它只为我打印毕达哥拉斯三胞胎<代码>毕达哥拉斯三元组(20)->3 4 5,6 8 10,5 12 13,9 12 15,8 15 17,12 16 20
@BlayerBond我想可能OP只想打印最后三个数字,而不是每次迭代打印三个?所以
毕达哥拉斯三元组(20)
应该给出
12 16 20
?@BlayerBond这是我最好的猜测。沙尔扎达尔,你能确认一下你的要求吗?谢谢。我只是在学习python,所以每次我想打破循环时,我必须放“return”?我理解对了吗?
返回
使您离开一个函数。如果这不是在函数中编写的,我将不得不编写两次
break
,并保留一个布尔值,以检查嵌套的
break
是否被命中。
break
只会打断它所在的循环,所以请记住这一点!现在,你已经回答了,我将编辑我的帖子,因为你想要的代码。我建议你先做一些简单的练习(必须有一些在线练习):从
if
-语句开始练习,然后将它们与
for
-循环结合起来,然后从函数(
def
)开始练习。注意,你总是会得到相同的结果,因为你总是希望打印第一个,因为这与12、20等的情况相同。或者我还是没听清你的问题:/很抱歉,我只是问了我们老师的问题,他想让3个数字的总和等于输入值。如果你输入30,你会得到:51213。非常感谢您,现在我了解了返回函数。请参阅您帖子下方的我的评论;)或者你现在找到解决办法了吗?现在更让人困惑了。这和毕达哥拉斯三胞胎有什么关系?我会让你自己解决这个问题。这是你要做的<代码>n
=
a
+
b
+
c
。对于每个
a
,您查找每个
b
,对于每个
c
,无论三者相加是否为
sum
。含义:您必须为
-循环编写三重嵌套的
,以迭代每个
a
的每个
b
。如果你仍然不能让它工作,请告诉我。我也很困惑。但就我所知,老师是这么问的。谢谢,我还在努力。是的,我使用了n=a+b+c,到目前为止答案看起来还可以,但结果是一个元组(3,4,5)。当我完成后,我会更新我的答案。当你想发布你的答案时,请编辑此帖子,否则此帖子将变得一团糟。祝你好运!是的,我得到了老师想要的结果:D非常感谢你帮助我。不客气。如果您使用解决方案编辑自己的帖子,并将自己的帖子标记为答案,则可以关闭此线程;)
    import math

y = []
x = int(input())
if 1 <= x <= 90000:
    for b in range(x):
        for a in range(1, b):
            c = math.sqrt(a * a + b * b)
            u = a + b + c
            if c > x:
                break
            elif c % 1 == 0:
                if u == x:
                    k = (a, b, int(c))
                    y.append(k)

if len(y) != 0:
    for a_tuple in y:  # iterates through each tuple
        for item in a_tuple:  # iterates through each tuple items
            print(item, end=" ")
else:
    print("Impossible")