1

我必须编写一个递归函数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:\Users\akumaukpo\Documents\CISC 106\LAB05\lab05 _test.py", line 19, in <module>
    from lab05 import *
  File "C:\Users\akumaukpo\Documents\CISC 106\LAB05\lab05.py", line 22
    print i
        ^
4

3 回答 3

3

块中的每个语句必须从块的开头至少缩进一个空格。代码中的 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)
    *
   ***
  *****
 *******
于 2013-03-21T22:36:17.913 回答
2

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

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数和星数。

输出将是:

      *
     ***
    *****
   *******
  *********
于 2013-03-21T22:33:54.920 回答
0
for i in range(10):
print((' '*(10-i-1))+(('*')*((2*i)-1)))

输出如链接所示

于 2017-06-30T07:57:01.480 回答