from itertools import product # 导入笛卡尔积方法
e = range(1,201,1) # e取1-200的整数
l_tri_v = list(product(e,e,e)) # 做笛卡尔积
def fun(tri_v: tuple[int, int, int]) -> bool: # 判断是否满足勾股数条件,满足返回True,不满足返回False
if tri_v[0] + tri_v[1] > tri_v[2] and \
tri_v[0] + tri_v[2] > tri_v[1] and \
tri_v[1] + tri_v[2] > tri_v[0] and \
tri_v[0] < tri_v[1] and \
tri_v[0]**2 + tri_v[1]**2 == tri_v[2]**2:
# 任意两边之和大于第三边,第一边小于第二边(避免重复3,4,5;4,3,5这种情况)
# a+b>c且a+c>b且b+c>a
# a^2+b^2 == c^2
return True # 满足条件返回True
else:
False # 不满足条件返回False
print(list(filter(fun, l_tri_v))) # 过滤掉笛卡尔积后所有不满足条件的3维元组
# 终端返回
[(3, 4, 5), (5, 12, 13), (6, 8, 10), (7, 24, 25), (8, 15, 17), (9, 12, 15), (9, 40, 41), (10, 24, 26), (11, 60, 61), (12, 16, 20), (12, 35, 37), (13, 84, 85), (14, 48, 50), (15, 20, 25), (15, 36, 39), (15, 112, 113), (16, 30, 34), (16, 63, 65), (17, 144, 145), (18, 24, 30), (18, 80, 82), (19, 180, 181), (20, 21, 29), (20, 48, 52), (20, 99, 101), (21, 28, 35), (21, 72, 75), (22, 120, 122), (24, 32, 40), (24, 45, 51), (24, 70, 74), (24, 143, 145), (25, 60, 65), (26, 168, 170), (27, 36, 45), (27, 120, 123), (28, 45, 53), (28, 96, 100), (28, 195, 197), (30, 40, 50), (30, 72, 78), (32, 60, 68), (32, 126, 130), (33, 44, 55), (33, 56, 65), (33, 180, 183), (35, 84, 91), (35, 120, 125), (36, 48, 60), (36, 77, 85), (36, 105, 111), (36, 160, 164), (39, 52, 65), (39, 80, 89), (40, 42, 58), (40, 75, 85), (40, 96, 104), (42, 56, 70), (42, 144, 150), (44, 117, 125), (45, 60, 75), (45, 108, 117), (48, 55, 73), (48, 64, 80), (48, 90, 102), (48, 140, 148), (48, 189, 195), (49, 168, 175), (50, 120, 130), (51, 68, 85), (51, 140, 149), (52, 165, 173), (54, 72, 90), (55, 132, 143), (56, 90, 106), (56, 105, 119), (56, 192, 200), (57, 76, 95), (57, 176, 185), (60, 63, 87), (60, 80, 100), (60, 91, 109), (60, 144, 156), (60, 175, 185), (63, 84, 105), (64, 120, 136), (65, 72, 97), (65, 156, 169), (66, 88, 110), (66, 112, 130), (69, 92, 115), (70, 168, 182), (72, 96, 120), (72, 135, 153), (72, 154, 170), (75, 100, 125), (75, 180, 195), (78, 104, 130), (78, 160, 178), (80, 84, 116), (80, 150, 170), (81, 108, 135), (84, 112, 140), (84, 135, 159), (85, 132, 157), (87, 116, 145), (88, 105, 137), (88, 165, 187), (90, 120, 150), (93, 124, 155), (95, 168, 193), (96, 110, 146), (96, 128, 160), (99, 132, 165), (99, 168, 195), (100, 105, 145), (102, 136, 170), (104, 153, 185), (105, 140, 175), (108, 144, 180), (111, 148, 185), (114, 152, 190), (117, 156, 195), (119, 120, 169), (120, 126, 174), (120, 160, 200), (130, 144, 194)]