如何确保创建数字金字塔时间距一致(Python)

我正在尝试用 python 创建一个数字金字塔,这是我到目前为止的代码:


for i in range(1, height+1):

    for j in range(1, height-i+1):

        if j > 9:

            print(len(str(j)) * " ", end=" ")

        else:

            print(" ", end=" ")

    for j in range(i, 0, -1):

        print(j, end=" ")

    for j in range(2, i + 1):

        print(j, end=" ")

    print()

这是输出:


                                 1 

                              2 1 2 

                           3 2 1 2 3 

                        4 3 2 1 2 3 4 

                     5 4 3 2 1 2 3 4 5 

                  6 5 4 3 2 1 2 3 4 5 6 

                7 6 5 4 3 2 1 2 3 4 5 6 7 

              8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 

            9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 

          10 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 10 

        11 10 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 10 11 

      12 11 10 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 10 11 12 

    13 12 11 10 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 10 11 12 13 

  14 13 12 11 10 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 

据我所见,代码在高度 <= 9 时工作正常,但一旦输入两位数,对齐就会失败。我还需要确保每个数字之间的间距一致(每个数字之间有一个空格),但我研究过的解决方法涉及添加多个空格。


如果有什么需要澄清的地方,请告诉我,并提前感谢您的宝贵时间!


慕哥6287543
浏览 63回答 2
2回答

肥皂起泡泡

您可以使用字符串格式来定义字段的固定宽度,并用空格或零填充。field_len = len(str(height))for i in range(1, height+1):&nbsp; &nbsp; for j in range(1, height-i+1):&nbsp; &nbsp; &nbsp; &nbsp; print(" " * field_len, end=" ")&nbsp; &nbsp; for j in range(i, 0, -1):&nbsp; &nbsp; &nbsp; &nbsp; print(f"{j:{field_len}}", end=" ")&nbsp; &nbsp; for j in range(2, i + 1):&nbsp; &nbsp; &nbsp; &nbsp; print(f"{j:{field_len}}", end=" ")&nbsp; &nbsp; print()产生&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2&nbsp; 1&nbsp; 2&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;3&nbsp; 2&nbsp; 1&nbsp; 2&nbsp; 3&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 4&nbsp; 3&nbsp; 2&nbsp; 1&nbsp; 2&nbsp; 3&nbsp; 4&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;5&nbsp; 4&nbsp; 3&nbsp; 2&nbsp; 1&nbsp; 2&nbsp; 3&nbsp; 4&nbsp; 5&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 6&nbsp; 5&nbsp; 4&nbsp; 3&nbsp; 2&nbsp; 1&nbsp; 2&nbsp; 3&nbsp; 4&nbsp; 5&nbsp; 6&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;7&nbsp; 6&nbsp; 5&nbsp; 4&nbsp; 3&nbsp; 2&nbsp; 1&nbsp; 2&nbsp; 3&nbsp; 4&nbsp; 5&nbsp; 6&nbsp; 7&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 8&nbsp; 7&nbsp; 6&nbsp; 5&nbsp; 4&nbsp; 3&nbsp; 2&nbsp; 1&nbsp; 2&nbsp; 3&nbsp; 4&nbsp; 5&nbsp; 6&nbsp; 7&nbsp; 8&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;9&nbsp; 8&nbsp; 7&nbsp; 6&nbsp; 5&nbsp; 4&nbsp; 3&nbsp; 2&nbsp; 1&nbsp; 2&nbsp; 3&nbsp; 4&nbsp; 5&nbsp; 6&nbsp; 7&nbsp; 8&nbsp; 9&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;10&nbsp; 9&nbsp; 8&nbsp; 7&nbsp; 6&nbsp; 5&nbsp; 4&nbsp; 3&nbsp; 2&nbsp; 1&nbsp; 2&nbsp; 3&nbsp; 4&nbsp; 5&nbsp; 6&nbsp; 7&nbsp; 8&nbsp; 9 10&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 11 10&nbsp; 9&nbsp; 8&nbsp; 7&nbsp; 6&nbsp; 5&nbsp; 4&nbsp; 3&nbsp; 2&nbsp; 1&nbsp; 2&nbsp; 3&nbsp; 4&nbsp; 5&nbsp; 6&nbsp; 7&nbsp; 8&nbsp; 9 10 11&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;12 11 10&nbsp; 9&nbsp; 8&nbsp; 7&nbsp; 6&nbsp; 5&nbsp; 4&nbsp; 3&nbsp; 2&nbsp; 1&nbsp; 2&nbsp; 3&nbsp; 4&nbsp; 5&nbsp; 6&nbsp; 7&nbsp; 8&nbsp; 9 10 11 12&nbsp;&nbsp; &nbsp; &nbsp; 13 12 11 10&nbsp; 9&nbsp; 8&nbsp; 7&nbsp; 6&nbsp; 5&nbsp; 4&nbsp; 3&nbsp; 2&nbsp; 1&nbsp; 2&nbsp; 3&nbsp; 4&nbsp; 5&nbsp; 6&nbsp; 7&nbsp; 8&nbsp; 9 10 11 12 13&nbsp;&nbsp; &nbsp;14 13 12 11 10&nbsp; 9&nbsp; 8&nbsp; 7&nbsp; 6&nbsp; 5&nbsp; 4&nbsp; 3&nbsp; 2&nbsp; 1&nbsp; 2&nbsp; 3&nbsp; 4&nbsp; 5&nbsp; 6&nbsp; 7&nbsp; 8&nbsp; 9 10 11 12 13 14&nbsp;15 14 13 12 11 10&nbsp; 9&nbsp; 8&nbsp; 7&nbsp; 6&nbsp; 5&nbsp; 4&nbsp; 3&nbsp; 2&nbsp; 1&nbsp; 2&nbsp; 3&nbsp; 4&nbsp; 5&nbsp; 6&nbsp; 7&nbsp; 8&nbsp; 9 10 11 12 13 14 15&nbsp;并且会根据位数的变化自动调整间距。这使金字塔的斜率保持不变,尽管内部数字的对齐方式似乎变得更加稀疏,因为它们被填充到两个空间中。解决方案就是使用当前数字的宽度作为空格数 - 我们可以通过将参数更改为range()打印空格的位置来实现,以实际从高度倒数。for i in range(1, height+1):&nbsp; &nbsp; for j in range(i, height):&nbsp; &nbsp; &nbsp; &nbsp; print(" " * len(str(j + 1)), end=" ")&nbsp; &nbsp; for j in range(i, 0, -1):&nbsp; &nbsp; &nbsp; &nbsp; print(j, end=" ")&nbsp; &nbsp; for j in range(2, i + 1):&nbsp; &nbsp; &nbsp; &nbsp; print(j, end=" ")&nbsp; &nbsp; print()这会产生一个坡度不均匀但间距均匀的金字塔。&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2 1 2&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 3 2 1 2 3&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 4 3 2 1 2 3 4&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 5 4 3 2 1 2 3 4 5&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 6 5 4 3 2 1 2 3 4 5 6&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 7 6 5 4 3 2 1 2 3 4 5 6 7&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;10 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 10&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 11 10 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 10 11&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;12 11 10 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 10 11 12&nbsp;&nbsp; &nbsp; &nbsp; 13 12 11 10 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 10 11 12 13&nbsp;&nbsp; &nbsp;14 13 12 11 10 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 10 11 12 13 14&nbsp;15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15&nbsp;

MYYA

为了完整起见,我将提供解决此问题的另一种方法。主要思想是跟踪当前行的长度并使用rjust您想要的任何定界符进行填充(我选择了默认的空白)height = 16max_line_len = len(' '.join([str(i) for i in range(height,0,-1)] + [str(i) for i in range(2,height+1)]))half_max_line_len = int((max_line_len+1)/2)list_of_nums = [str(1)]print('creating pyramid...')for num in range(1, height+1):&nbsp; &nbsp; print(' '.join(list_of_nums).rjust(half_max_line_len))&nbsp; &nbsp; list_of_nums = [str(num+1)] + list_of_nums + [str(num+1)]&nbsp; &nbsp; half_max_line_len += len(str(num+1))+1输出:creating pyramid...&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2 1 2&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;3 2 1 2 3&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;4 3 2 1 2 3 4&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;5 4 3 2 1 2 3 4 5&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;6 5 4 3 2 1 2 3 4 5 6&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;7 6 5 4 3 2 1 2 3 4 5 6 7&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;8 7 6 5 4 3 2 1 2 3 4 5 6 7 8&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 10 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 10&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;11 10 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 10 11&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 12 11 10 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 10 11 12&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;13 12 11 10 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 10 11 12 13&nbsp; &nbsp; &nbsp; 14 13 12 11 10 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 10 11 12 13 14&nbsp; &nbsp;15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1516 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python