【问题标题】:How can I create a decremented numberPyramid(num) in Python?如何在 Python 中创建递减的数字 Pyramid(number)?
【发布时间】:2015-12-02 08:41:13
【问题描述】:

我正在尝试创建一个如下图所示的金字塔(numberPyramid(6)),其中金字塔不是由数字组成,而是实际上是一个带有数字的黑色空间。该函数接受一个名为“num”的参数,它是金字塔中的行数。我该怎么做呢?我需要使用 for 循环,但我不确定如何实现它。谢谢!

                                 666666666666
                                 55555  55555
                                 4444    4444
                                 333      333
                                 22        22
                                 1          1

【问题讨论】:

  • 能否在您的问题中提供一些代码示例?这将使您的问题更有可能吸引好的答案,而不是投反对票

标签: python for-loop


【解决方案1】:
def pyramid(num_rows, block=' ', left='', right=''):
    for idx in range(num_rows):
        print '{py_layer:{num_fill}{align}{width}}'.format(
            py_layer='{left}{blocks}{right}'.format(
                left=left,
                blocks=block * (idx*2),
                right=right),
            num_fill=format((num_rows - idx) % 16, 'x'),
            align='^',
            width=num_rows * 2)

这通过使用python's string format method 以一种有趣的方式工作。空格是要打印的字符串,数字用作填充行其余部分的字符。

使用十六进制字符串中的内置format() function to chop off the leading 0x 可以构建最多15 个金字塔。

示例:

In [45]: pyramid(9)
999999999999999999
88888888  88888888
7777777    7777777
666666      666666
55555        55555
4444          4444
333            333
22              22
1                1

其他金字塔“块”可能很有趣:

In [52]: pyramid(9, '_')
999999999999999999
88888888__88888888
7777777____7777777
666666______666666
55555________55555
4444__________4444
333____________333
22______________22
1________________1

添加了左右选项并显示十六进制支持:

In [57]: pyramid(15, '_', '/', '\\')
ffffffffffffff/\ffffffffffffff
eeeeeeeeeeeee/__\eeeeeeeeeeeee
dddddddddddd/____\dddddddddddd
ccccccccccc/______\ccccccccccc
bbbbbbbbbb/________\bbbbbbbbbb
aaaaaaaaa/__________\aaaaaaaaa
99999999/____________\99999999
8888888/______________\8888888
777777/________________\777777
66666/__________________\66666
5555/____________________\5555
444/______________________\444
33/________________________\33
2/__________________________\2
/____________________________\

【讨论】:

  • 感谢您的回答!我想知道您能否解释一下打印语句中的格式化方法?而且,是否可以只在参数中使用 num 而不是 block = ' ',left = ' '...等。并且仍然使代码工作?
  • @swimdawg12 谷歌“python 字符串格式”。此外,您可以在没有其他参数的情况下使用它,但它们在那里没有害处,您可以在没有它们的情况下使用该功能。您应该研究函数和字符串格式,直到您了解如何自己删除它们。
【解决方案2】:

首先是代码:

max_depth = int(raw_input("Enter max depth of pyramid (2 - 9): "))
for i in range(max_depth, 0, -1):
    print str(i)*i + " "*((max_depth-i)*2) + str(i)*i

输出:

(numpyramid)macbook:numpyramid joeyoung$ python numpyramid.py
Enter max depth of pyramid (2 - 9): 6
666666666666
55555  55555
4444    4444
333      333
22        22
1          1

这是如何工作的:

Python 有一个名为 range() 的内置函数,它可以帮助您为 for-loop 构建迭代器。您可以通过传入-1 作为第三个参数来使其递减而不是递增。

我们的 for 循环将从用户提供的 max_depth(我们的示例中为 6)开始,i 将在循环的每次迭代中减 1。

现在输出行应该执行以下操作:

  • 打印出当前迭代器编号 (i) 并重复它itimes。
  • 算出中间要添加多少空白。
    • 这将是 max_depth 减去当前迭代器编号,然后将该结果乘以 2,因为每次迭代都需要将空格加倍
  • 将空格附加到第一组重复数字。
  • 附加第二组重复数字:当前迭代器号(i)重复itimes

当您的打印字符时,可以通过在字符后面加上星号* 以及您希望字符重复的次数来重复它们。 例如:

>>> # Repeats the character 'A' 5 times
... print "A"*5
AAAAA

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-22
    • 1970-01-01
    • 2015-08-26
    • 2023-02-10
    • 2016-10-27
    • 2015-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多