我必须编写一个递归函数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)))
输出如链接
所示