20190105-列印字母C,H,N,口等影像和楊輝三角

何發奮發表於2019-01-05

1. 列印字母C

******

*

*

*

*

******

def print_c(n):
    print(`*` * n)
    for i in range(n):
        print(`*        `)
    print(`*` * n)
print_c(20)

2.列印字母N

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

演算法:N在左下角空心三角形的基礎上減去最後一行的*,並在每行後面列印一個*,設定N的寬=N的高,列印心三角形詳見20190103這篇文章

def print_N(n):
    for i in range(n+1):
    #列印的行數
        for j in range(n+1):
        #每行列印的*個數(N的寬度),僅列印首尾的*,空間以空格分隔
            if j ==0 or j==i:
                print(`*`,end = ` `)
        #列印第一個和斜槓中的*,j==i的時候列印斜槓中的*起始點
            elif j==n: 
                print(`*`,end =``)
        #列印N中第二個直線位置的*,此處end=``與end =` `沒有區別,因為j=n是最後一遍迴圈,之後就是換行了
            else:
                print(` `,end = ` `)
        #其他位置用空格填充
        print()
Print_N(10)

3.列印口

* * * * * * 

*           *

*           *

* * * * * *

口除第一行和最後一行全部列印外,其他行僅列印首尾,定義口的高和寬

def quadrangle(hight,width):
    for i in range(hight+1):
        for j in range(width+1):
            if i ==0 or i ==hight:
                print(`*`,end =` `)
                #空心四邊形第一行全部列印
            elif j==0 or j ==width:
                print(`*`,end =` `)
                #空心四邊形中間行數列印首尾
            else:
                print(` `,end =` `)
        print()
quadrangle(10,10)

4.列印H

*        *

*        *

* * * * *

*        *

*        *

演算法:H,分為高和寬,設定寬為高的一半因此我們寫H的時候只需要指定H的高就好

def print_H(height):
    if isinstance(height,int) and height>=5:
        for i in range(height+1):
    #列印H的高
            for j in range(int(height/2)+1):
                if i ==int(height/2):
                    print(`*`,end = ` `)
                elif j ==0 or j==int(height/2):
                    print(`*`,end =` `)
                else:
                    print(` `,end =` `)
            print()
    else:
        print(`請設定H的高度大於5`)
print_H(10)

H的高度必須大於5的原因是為了大於H中間那條橫,因為j的範圍為height/2+1,當height=4一下的時候,j列印的*小於2,因此無法列印除H中間的那一橫

5.列印楊輝三角

  1
   1 1
  1 2 1
 1 3 3 1
1 4 6 4 1

將每一行看作一個list,先寫除一個 方法輸出下一行的list值

 

def pascal_list_generate(list):
    #print(len(list))
    pascal =[]
    if len(list)>=2:#因為需要取第i-1個值,因此len(list)必須大於等於2,如果len(list)=1,則i-1<0,程式報錯
        for i in range(len(list)+1):
            if i ==0:
                pascal.append(1)
                #楊輝三角的第一和最後一位數為1
            elif i>=1 and i <len(list):
                pascal.append(list[i]+list[i-1])
                #除第一個和最後一個數外楊輝三角第n行的第m個數為第n-1行第m和m-1的數之和
            elif i==len(list):
                #楊輝三角的第一和最後一位數為1
                pascal.append(1)
    else:
        pascal.append(1)
        pascal.append(1)
        #相容楊輝三角第二行的情況
    return pascal

寫一個列印楊輝三角每行的函式,並且可以自定義楊輝三角的行數

def pascal_trigal(n):
 s =[1]
 if n ==1:
  print(s)
 else:
  print(s)
  for i in range(n-1):
   print(pascal_list_generate(s))
   s = pascal_list_generate(s)
pascal_trigal(10)

在楊輝三角的方法裡面迴圈迭代呼叫每一行的生成方法。

相關文章