天天看點

python用string.center( )方法實作在一個程式中列印空心/實心的等腰三角形/菱形等四種圖案

        在學各種程式設計的循環語句時,經常碰到要求用print函數列印各種星星圖案,這類型的題目比較考驗人的邏輯思維能力。一開始你可能隻能畫出直角三角形,後面了解規律後,能夠畫出菱形了。今天和大家分享如何在一個程式中用string.center( )方法,來實作列印空心/實心的等腰三角形/菱形等四種圖案。

        首先你要清楚這四種圖案的星星是按什麼規律排布的,如果你不清楚,你可以先自己手動畫出一個星星模版出來,然後根據你要畫的圖形,自己手動去移動星星,把目标圖案先畫出來,然後去找找圖案規律。這種方式直覺,便于列印各種圖案。

python用string.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列的實心菱形
           

代碼輸出結果如下

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

 如果想輸出其它圖案,隻需要改變函數中的參數即可。