20190103-打印各种类型的三角形,四边形等

1. 打印四边形

1.1打印实心四边形

* * * * * * * *
* * * * * * * *
* * * * * * * *
* * * * * * * *
* * * * * * * *
如图:四边形由宽和高构成,将宽转换为每行打印的的个数,将高转换为打印的行数
def quadrangle_generate(width,hight):
    for i in range(hight+1):
        for j in range(width+1):
            print('*',end=' ')
            if j == width:
                print()
quadrangle_generate(5,4)

解析:for i in range(hight+1)循环保证打印的行数,for j in range(width+1)循环保证每行打印的*个数。当打印完成,即j == width的时候换行,其中 print('*',end=' ')执行一次打印2个字符

 1.2打印空心四边形

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

 空心四边形除第一行和最后一行全部打印外,其他行仅打印首尾

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(4,8)

2. 打印各类等腰三角形

2.1左下角等腰三角形
*
* *
* * *
* * * *
* * * * *
* * * * * *
左下角三角形由*和空格构成,保证三角形在四边形的基础上高(等价于三角形的腰)不变,每行打印的*个数进行变化。具体规则如下:
第一行保留打印一个*,剩下的用空格代替
第二行保留打印两个*,剩下用空格代替
第i行,打印i个星
第n行,打印n个星
def left_down_Isosceles_trigal_generate(n):
    for i in range(n+1):
        for j in range(i+1):
            print('*',end = ' ')
            if j == i:
                print()
left_down_Isosceles_trigal_generate(10)

解析:for i in range(n+1)保证了打印的行数(等腰三角形的腰),for j in range(i+1)循环保证每行打印的*个数,第1行打印1个,第二行打印2个,j==i的时候打印换行。

2.2左上角等腰三角形

* * * * * *
* * * * *
* * * *
* * *
* *
*
左上角等腰三角形是由三角形由*和空格构成,保证三角形在四边形的基础上高(等价于三角形的腰)不变,每行打印的*个数进行变化。具体规则如下:
第一行保留打印n个*
第二行保留打印n-1两个*
第i行,打印n-i+1个*
第n行,打印1个*
因此打印的*个数使用n-i+1来确定,打印*以空格分隔
def left_top_Isosceles_trigal_generate(n):
    for i in range(n+1):
        for j in range(n-i+1):
            print('*',end = ' ')
            if j ==n-i:
                print()
left_top_Isosceles_trigal_generate(10)

解析:for i in range(n+1)保证了打印的行数,for j in range(n-i+1)保证了打印的*个数逐级递减,当每行打印结束的时候使用j==n-i换行

2.3右下角等腰三角形

          *
* *
* * *
* * * *
* * * * *
* * * * * *
右下角等腰三角形,保证三角形在四边形的基础上高(等价于三角形的腰)不变,每行打印的*个数进行变化。具体规则如下,此处需要留意打印空格的时候end=‘ ’,一次print(' ',end = ' ')执行,打印出2个空格字符:
第一行前面保留打印2(n-1)个空格,加上1个*,如上图,n=6,则第一行打印10个空格
第二行前面保留打印2(n-2)个空格,加上2个*
第i行,打印2(n-i)个空格,加上i个*
第n行,打印n个*,中间以空格分隔
因此打印的*个数使用i来确定,打印的空格使用n-i+1来确定

def right_down_Isosceles_trigal_generate(n):
    for i in range(n+1):
        for j in range(n-i+1):
            print(' ',end = ' ')
        for k in range(i+1):
            print('*',end = ' ')
            if k ==i:
                print()
right_down_Isosceles_trigal_generate(10)

解析:for i in range(n+1)保证打印的行数,for j in range(n-i+1)来打印空格,空格的个数随着i的增加逐级减少,使用i来打印逐级增加的*

2.4右上角等腰三角形

* * * * * *
* * * * *
* * * *
* * *
* *
*
右上角等腰三角形,保证三角形在四边形的基础上高(等价于三角形的腰)不变,每行打印的*个数进行变化。具体规则如下:
第一行保留打印n个*,前面填充0个空格
第二行保留打印n-1个*,前面填充2个空格,书写格式为print(' ',end = ' ')
第i行,打印n-i个*,前面填充2*i个空格
第n行,打印1个*,前面填充2(n-1)个空格,如上图n=6,第6行前面填充10个空格
因此打印的*个数使用n-i来确定,打印的空格使用i来确定
def right_top_Isosceles_trigal_generate(n):
    for i in range(n+1):
        for j in range(i):
            print(' ',end = ' ')
        for k in range(n-i):
            print('*',end = ' ')
            if k ==n-i-1:
                print()
right_top_Isosceles_trigal_generate(10)
解析:使用 for i in range(n+1)来确定要打印的行数(三角形的腰),右上角等腰三角形,每行的*逐级递减,因此使用for k in range(n-i)来确定要打印的*的个数,当*打印完的时候使用k == n-i-1来换行
2.5正三角形
*
* *
* * *
* * * *
* * * * *
正三角形保证三角形在四边形的基础上高(等价于三角形的腰)不变,每行打印的*位置不同,具体规则如下:

第一行,打印n-1个空格,1个*,以空格分隔
第二行,打印n-2个空格,2个*,以空格分隔
第n行,打印n-n个空格,n个*,以空格分隔
打印的空格以n-i+1来确定,打印的*用i来确定
def Isosceles_trigal_generate(n):
    for i in range(n+1):
        for k in range(n-i+1):
            print(' ',end = '')
        for j in range(i+1):
            print('*',end = ' ')
            if j == i:
                print()
Isosceles_trigal_generate(10)    

 解析:正三角和右下角三角形的唯一区别为代码中红色的部分,end =''还是end = ' ',如果end =''则为正三角;如果end=' '则为右下角三角形,因为end = ' '的时候,是以空格结尾,打印的字符数需要加1

2.6 倒三角形
* * * * * *
* * * * *
* * * *
* * *
* *
*
倒三角形保证三角形在四边形的基础上高(等价于三角形的腰)不变,每行打印的*位置不同,具体规则如下:
第一行,打印n个*,以空格分隔,前面打印0个空格
第二行,打印n-1个*,以空格分隔,前面打印1个空格
第i行,打印n-i,以空格分隔,前面打印i个空格
第n行,打印1个*,前面打印n-1个空格
因此打印的*个数使用n-i来确定,打印的空格使用i来确定
def reverse_Isosceles_trigal_generate(n):
    for i in range(n+1):
        for j in range(i):
            print(' ',end ='')
        for k in range(n-i+1):
            print('*',end =' ')
            if k ==n-i:
                print()
reverse_Isosceles_trigal_generate(10)    

 解析:for i in range(n+1),保证打印的行数,区别于右上角三角形的是代码中红色部分,由end=''决定print语句打印的是几个字符。

2.7打印倒空心三角形
* * * * *
* *
* *
* *
*
倒空心三角形在倒三角的基础上,每行打印的*个数与倒三角形有区别,具体规则如下:
第一行从第0个位置开始打印n个*,以空格分隔
第二行从第1个位置开始打印1个*,在第2(n-1)个位置打印一个*
第i行从第i个位置开始打印1个*,在倒数第2(n-i)个位置开始打印一个*
第n行打印1个*
因此,打印的*除第一行外,从第2行开始,使用i-1来确定开始打印*的位置,使用n-i+1来确定每行第二个*的位置
def reverse_empty_Isosceles_trigal_generate(n):
    for i in range(n+1):
        for j in range(i):
            print(' ',end ='')
        #三角形前面填充的空格数不变
        for k in range(n-i+1):
            if i==0 or i ==n:
                print('*',end =' ')
            #空心三角形的第一行和最后一行仍然全部打印*
            elif k==0 or k==n-i:
                print('*', end=' ')
            #空心三角形的中间打印首尾*,注意因为print(' ',end=' ')打印的是2个空格,所有第二个*开始打印位置为n-i
            else:
                print(' ',end =' ')
        print()
reverse_empty_Isosceles_trigal_generate(10)

2.8打印正空心三角形

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

def Isosceles_empty_trigal_generate(n):
    for i in range(n+1):
        for k in range(n-i+1):
            print(' ',end = '')
            # 三角形前面填充的空格数不变
        for j in range(i+1):
            if i==0 or i ==n:
                print('*',end = ' ')
            # 空心三角形的第一行和最后一行仍然全部打印*
            elif j ==0 or j ==i:
                print('*', end=' ')
                # 空心三角形的中间行打印首尾*
            else:
                print(' ',end =' ')
        print()
Isosceles_empty_trigal_generate(10)

解析:与倒空心三角形算法类似,在正三角形的基础上,首行和尾行打印*不变,中间行仅首尾打印*,其他打印空格

总结:打印三角形的时候,最大的注意点是确定打印多少行,每行打印多少个,以及前面填充多少空格。特别注意填充空格时候注意空格的占位数。print(' ',end ='')打印一个空格,print(' ',end =' ')打印2个空格。




posted @ 2019-01-03 08:30  何发奋  阅读(483)  评论(0编辑  收藏  举报