【测开面试题-001】python控制台打印各种三角形

第01种三角形:

"""
            * 
          * * * 
        * * * * * 
      * * * * * * * 
    * * * * * * * * * 
  * * * * * * * * * * * 
"""

def pr(n):
    for i in range(n):
        for k in range(n - i):
            print(" ", end=" ")
        for j in range(2 * i + 1):
            print("*", end=" ")
        print(

理下一思路,为什么这么实现。

当输入正整数n之后,打印出n行,并且第1行的第n个位置是*,第2行是3个*……最后一行(第n行)是(2n-1)个*。

第1次循环:第1行,打印5个空格,+1个*;

第2次循环:第2行,打印4个空行,+ (2*2-1)个*;

第3次循环:第3行,打印3个空行,+ (2*3-1)个*;

 ……

第n次循环:第n行,打印0个空行,+ (2*n-1)个*。

所以最外层循环是基于n,也就是 for i in range(n);

然后每一行都由两段拼接而成,先是空格的个数,也就是(n-i)个;然后是*的个数,也就是(2*i + 1)个。

 

python 的print()是默认换行打印的,想要不换行打印,需要换成:print("", end= "")来实现。


 

 

第02种三角形:

是上一种三角形的变形,每行不打印偶数位置的*,只打印奇数位置的*。

所以在最内层什么时候打印*的位置加了一层if...else...判断,(i+1)能被2整除,不打印*,否则打印*。

"""
            * 
          *   * 
        *   *   * 
      *   *   *   * 
    *   *   *   *   * 
  *   *   *   *   *   * 
"""

def pr(n):
    for i in range(n):
        for k in range(n - i):
            print(" ", end=" ")
        for j in range(2 * i + 1):
            if ((j+1) % 2) == 0:
                print(" ", end=" ")
            else:
                print("*", end=" ")
        print()

 

第03种三角形:

"""
            * 
          * * * 
        * * * * * 
      * * * * * * * 
    * * * * * * * * * 
  * * * * * * * * * * * 
    * * * * * * * * * 
      * * * * * * * 
        * * * * * 
          * * * 
            * 
"""

def pr(n):
    for i in range(n):
        for k in range(n - i):
            print(" ", end=" ")
        for j in range(2 * i + 1):
            print("*", end=" ")
        print()

    for i in range(n-1):
        for k in range(i+2):
            print(" ", end=" ")
        for m in range(9 - 2*i):
            print("*", end=" ")
        print()


if __name__ == '__main__':
    pr(6)

 

posted @ 2021-02-03 21:38  愚人李愚  阅读(306)  评论(0编辑  收藏  举报