打印出如下图案(菱形)
#常规代码def draw2(num):#num表示行的总对称次数 for i in range(1,num*2):#行数 for j in range(1,abs(num-i)+1): #空格 print(end=" ") for j in range(1,num*2-abs(num-i)*2):#*号 print("*",end="") print()#回车draw2(4)
以上代码主要是受传统编程语言的影响,用循环语句模拟打印过程,外层循环决定图形行数,内层分别绘制空格和星号。主要还是注意range函数的区间范围,print函数中end参数。
#python递归解法MAX_COL=9#每行最大占用空间def draw(num,n): #num表示行的总对称次数,n表示画第几次(倒数,除中间一条外每次画两行)a="*"*(2*(num-n)+1) #每行星号个数print(a.center(MAX_COL,' ')) #打印对称的上半部分if n!=1: draw(num,n-1) #递归打印下一行print(a.center(MAX_COL,' ')) #打印对称的下半部分draw(4,4)
上面的代码主要考虑到菱形的对称性,巧妙运用递归完成图形生成。其中字符串的center函数可以简化前置空格输出,字符串用*运算可以简化重复输出。所以第一种解法的代码可以做一下优化。
#常规代码MAX_COL=9#每行最大占用空间def draw2(num):#num表示行的总对称次数 for i in range(1,num*2):#行数 print(("*"*(num*2-abs(num-i)*2-1)).center(MAX_COL," "))#*号draw2(4)