如何重建金字塔三角形



我必须编写一个递归函数asterisk_triangle,它取一个整数,然后返回一个由这么多行组成的星号三角形。

例如,这是一个4行星号三角形。

     *
    **
   ***
  ****

我试过这个功能:

def asterix_triangle(depth):
            rows = [ (depth-i)*' ' + i*2*'*' + '*'   for i in range(depth-1) ]
            for i in rows:
            print i

以及以下功能:

def asterisk_triangle(rows=n):
    pyramid_width = n * 2
    for asterisks in range(1, pyramid_width, 2):
        print("{0:^{1}}".format("*" * asterisks, pyramid_width))

两者都不起作用。我应该制作tests.py来测试功能,但我收到了错误,例如

Traceback (most recent call last):
  File "C:UsersakumaukpoDocumentsCISC 106LAB05lab05 _test.py", line 19, in <module>
    from lab05 import *
  File "C:UsersakumaukpoDocumentsCISC 106LAB05lab05.py", line 22
    print i
        ^

块中的每条语句必须从块的开头缩进至少一个空格。代码中的print语句相对于它所包含的for块没有缩进,这就是出现错误的原因。

试试这个:

def asterix_triangle(depth):
        rows = [ (depth-i)*' ' + i*'*' + '*'   for i in range(depth) ]
        for i in rows:
            print i

哪个收益率:

>>> asterix_triangle(4)
    *
   **
  ***
 ****

编辑:

我刚刚意识到你想要的输出是三角形的两半。如果是这样,只需在字符串的右侧添加相同的内容来镜像字符串:

def asterix_triangle(depth):
        rows = [ (depth-i)*' ' + i*'*' + '*' + i*'*'  for i in range(depth) ]
        for j in rows:
            print j

输出:

>>> asterix_triangle(4)
    *
   ***
  *****
 *******

如果你需要递归地做一个金字塔,你可能需要做这样的事情。

def asterix_triangle(i, t=0):
    if i == 0:
        return 0
    else:
        print ' ' * ( i + 1 ) + '*' * ( t * 2 + 1)
        return asterix_triangle(i-1, t + 1)
asterix_triangle(5)

这个想法是使用两个变量。一个是i,每次调用函数时减去一次,用于结束循环。另一个变量用于递增。然后使用i打印空格数,使用t打印星形数。

输出为:

      *
     ***
    *****
   *******
  *********
for i in range(10):
print((' '*(10-i-1))+(('*')*((2*i)-1)))

输出如链接

所示

最新更新