在学各种编程的循环语句时,经常碰到要求用print函数打印各种星星图案,这类型的题目比较考验人的逻辑思维能力。一开始你可能只能画出直角三角形,后面了解规律后,能够画出菱形了。今天和大家分享如何在一个程序中用string.center( )方法,来实现打印空心/实心的等腰三角形/菱形等四种图案。

你可以先自己手动画出一个星星模版出来,然后根据你要画的图形,自己手动去移动星星,把目标图案先画出来,然后去找找图案规律。这种方式直观,便于打印各种图案。

python图案打印n行n列 python打印出以下图案_str.center( )方法

这里分析下图案规律:

1.实心的等腰三角形/菱形每行星星数量是奇数,整体是左右对称的

2.每行之间距离是等间距的,实心等腰三角形/菱形每行的星星数可以表示成2n-1或4n-3,这里n表示行数

3.菱形图案的上半部分与等腰三角形相同

4.空心图案是把实心图案中间部分的星星替换成空格

        使用不同方法打印星星时,所需要考虑的参数不一样,这里使用for循环+函数+string.center( )方法来实现。这里说下我使用此方法的目的:

1.函数中一个普通形参与两个默认形参,普通形参可以用来表示等腰三角形或菱形的最大行星星数,两个默认形参都设成bool值,利用False == 0,True == 1的性质来区分实心/空心,以及等腰三角形/菱形。

2.string.center(num, str)方法有两个参数,第一个参数表示最大字符数,第二参数表示用来填充的字符。此方法实现每行星星的对称排列。

3.for循环,大部分打印星星的题目都需要使用循环来实现。

        下面给出代码

def triangle_diamond(line:int, sep:bool = False,shape:bool = False):
    #line表示等腰三角形或菱形的列数,sep表示空心还是实心(默认False表示实心,Ture表示空心),shape默认False表示三角形,Ture表示菱形
    if shape == False: #打印三角形
        row = int((line+1)/2)  #n从0开始,中间列n+1,row表示行数
        for i in range(1, row+1):
            if i == 1:  # 打印第一行的1个星星
                str_star = "*"*(2*i-1)
                print(str_star.center(line," "))
            elif i < row:  # 打印中间行的星星
                str_star = ("*"+" "*(2*i-3)*sep +"*"*(2*i-3)*(1-sep)+"*")  # 根据sep不同值,打印实心或者空心的图案
                print(str_star.center(line," "))    # 把每行对称排列
            else:   # 打印三角形最后一行
                str_star = ("*"+" "*sep+"*"*(1-sep))*(i-1)+"*"
                print(str_star.center(line, " "))
    else:   #  打印菱形
        n = int((line+1)/2)  # n表示行数
        for i in range(1,n+1):  # 前半部分基本与等腰三角形相同
            if i == 1:
                str_star = "*"*(2*i-1)
                print(str_star.center(line," "))
            else:  # 不需要将中间最大行与其他行分开
                str_star = ("*"+" "*(2*i-3)*sep +"*"*(2*i-3)*(1-sep)+"*")
                print(str_star.center(line," "))
        for i in range(n+1, line+1):  # 打印下半部分菱形
            if i < line:
                str_star = ("*" + " " * (2 * (line+1-i)-3) * sep + "*" * (2*(line+1-i)-3) * (1 - sep) + "*")
                print(str_star.center(line, " "))
            else:
                str_star = "*"
                print(str_star.center(line, " "))


triangle_diamond(9, sep=False, shape=True)   # 打印9列的实心菱形

代码输出结果如下

*    
   ***   
  *****  
 ******* 
*********
 ******* 
  *****  
   ***   
    *

 如果想输出其它图案,只需要改变函数中的参数即可。