gpt4 book ai didi

python - 毕达哥拉斯三元组的列表理解

转载 作者:太空宇宙 更新时间:2023-11-03 15:09:26 26 4
gpt4 key购买 nike

我是 Python 新手,想学习如何使用列表理解。

我有这段代码,可以打印小于用户输入值n的毕达哥拉斯三元组列表:

n = int(input("Enter the value of n:"))

a = 0
b = 0
c = 0
m = 2
triples = []

while c < n:
for i in range(1, m, 1):
a = m*m - i*i
b = 2*m*i
c = m*m + i*i
if c > n:
break
triples.append((a, b, c))
m += 1

print(triples)

它有点工作,但我想在 Python 中使用列表理解来做同样的事情,我们该怎么做?

例如,如果我输入 17,则输出应为 [(3,4,5), (8,6,10),(5,12,13)​​, (15,8,17), ( 9,12,15)] 但是我没有得到 (9,12,15)

最佳答案

看看official python documentation for list comprehensions它解释了它们如何很好地工作。

对于您的实际问题,以下应该是打印 Pythagorean triples 的等效列表理解。直到n:

n = int(input('Enter the value of n: '))
print([(a, b, c) for a in range(1, n + 1) for b in range(a, n + 1)
for c in range(b, n + 1) if a**2 + b**2 == c**2])

希望您清楚当前代码中的问题是什么:)

用法示例:

Enter the value of n: 17
[(3, 4, 5), (5, 12, 13), (6, 8, 10), (8, 15, 17), (9, 12, 15)]
<小时/>

编辑:利用 Python 3.8's walrus operator 的更高效版本:

import math

n = int(input('Enter the value of n: '))
print([(a, b, int(c)) for a in range(1, n + 1) for b in range(a, n + 1)
if (c := math.sqrt(a**2 + b**2)) % 1 == 0 and c <= n])

关于python - 毕达哥拉斯三元组的列表理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44351400/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com