想学py的小白 发表于 2023-4-11 20:24:21

编写一个推导式,生成包含 100 以内所有勾股数(i,j,k)的列表。


for i in range(100):
    for j in range(100):
      for k in range(100):
            if (i**2+j**2 == k**2) and (i<j<k):
                print(i,j,k)

请问输出时如何变成一个列表, 并且能换行让他排版好看一点呢?

isdkz 发表于 2023-4-11 20:26:41

要将输出变成一个列表,并在输出时换行使排版更整洁,你可以使用以下代码:

pythagorean_triples = []

for i in range(1, 100):
    for j in range(i, 100):
      for k in range(j, 100):
            if i**2 + j**2 == k**2:
                pythagorean_triples.append((i, j, k))

for index, triple in enumerate(pythagorean_triples):
    print(triple)
    if (index + 1) % 5 == 0:# 每5个元组换一行
      print()

这段代码首先创建一个名为 pythagorean_triples 的空列表。然后,我们将满足条件的勾股数添加到列表中。

最后,我们遍历列表并打印每个元组。为了使输出更易于阅读,我们在每5个元组后换一行。

sfqxx 发表于 2023-4-11 20:32:54

您可以用以下代码将输出转换为列表,并添加换行符以改善排版:

```
output = []
for i in range(100):
    for j in range(100):
      for k in range(100):
            if (i**2+j**2 == k**2) and (i<j<k):
                output.append()
               
for row in output:
    print(row)
```

或者,您可以使用字符串格式化来使输出更好地排版。例如,以下代码将使用制表符和换行符来排列输出:

```
output_str = ""
for i in range(100):
    for j in range(100):
      for k in range(100):
            if (i**2+j**2 == k**2) and (i<j<k):
                output_str += f"{i}\t{j}\t{k}\n"
print(output_str)
```

请注意,如果您想要将输出写入文件而不是在屏幕上打印,请使用 `write` 函数将结果写入文件。

想学py的小白 发表于 2023-4-11 20:35:00

isdkz 发表于 2023-4-11 20:26
要将输出变成一个列表,并在输出时换行使排版更整洁,你可以使用以下代码:




我刚刚试了一下,发现还是一行一行的,只是每五行之间有个一行空行。请问这该怎么解决?类似这样子
(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)

wangxiangtan2 发表于 2023-4-12 11:46:48

又是ChatGPT的答案吧,按C語言的思維去構思的答案。
打印后不换行,用end参数来设置你想要的结束符号:
print("谋事在人",end =" ")
print("成事在天", end ="|")
print("有生命便有希望", end =" ")
輸出:
谋事在人 成事在天|有生命便有希望
页: [1]
查看完整版本: 编写一个推导式,生成包含 100 以内所有勾股数(i,j,k)的列表。