LAB:画一个直角向上的三角形
写一个递归函数draw_triangle(),输出
*
的直线形成一个直角向上的等腰三角形。函数draw_triangle()
有一个参数,一个表示三角形底边长度的整数。假设底边长度总是奇数且小于20。在第一行的第一个*
前输出9个空格,以便正确格式化。提示:每画一条线,
*
的数量增加2。示例:如果程序的输入是:
3
函数draw_triangle()输出:
* ***
示例:如果程序的输入是:
19
函数draw_triangle()输出:
* *** ***** ******* ********* *********** ************* *************** ***************** *******************
注意:当基数长度为19时,最后一行第一个
*
前不输出空格
我已经能够弄清楚递归部分,但我不知道如何在三角形的左侧获得正确的空白
如果我没理解错的话,你应该看到"top"三角形中总是有一个*。如果三角形的底为n,则"顶"行中应该有n - 1个空格
继续这个模式,你可以看到在顶部下的每一行,你都加了2 *。如果r是行(从顶部开始,r = 0),则任何给定的行将有n - 2r - 1个空格。
这是最酷的部分,因为你知道n是奇数(问题中给定的)而2r肯定是偶数,那么n - 2r - 1总是偶数。将这个数字的一半称为"空白量"。并打印出每行的空格量(记住,行r从0开始)。
下面是一些伪代码
def print_triangle(width, row):
if 2 * row + 1 == width: # if you are in the last row
for i < 2 * row + 1:
print("*") # print the *
return # break out of recursion
else:
for i < (width - 2 * row - 1) / 2:
print(" ") # print whitespace
for i < 2 * row + 1:
print("*") # print the *
return print_triangle(width, row + 1) # recursive call
当然,还有很多方法可以做到这一点,其中一些方法的代码会更简洁,但希望这些伪代码可以帮助您理解程序背后的逻辑。你不能只有一个变量来递归:
下面的代码可以帮助你:
def draw_triangle(n,i):
if(n<=0):
return
print(" "*(n//2),end="")
print("*"*i)
draw_triangle(n-2,i+2)
draw_triangle(19,1)
输出:
*
***
*****
*******
*********
***********
*************
***************
*****************
*******************
希望这对你有帮助。这里i=1,因为您需要在开头打印1 *。
对于你奇怪的要求有9个空格的所有输入:))
def draw_triangle(n,i=1,s=9):
if(i>n):
return
print(" "*s+"*"*i)
draw_triangle(n,i+2,s-1)
draw_triangle(3)
这里i代表第一行星星的数量,s代表第一行空间。
输出:
*
***