zoukankan      html  css  js  c++  java
  • 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 == 
                    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 ==
                    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个空格。




  • 相关阅读:
    VS2017 C# winform 项目使用 sqlite (二)
    VS2017 C# winform 项目使用 sqlite (一)
    JS权威指南笔记(171页)-this关键字的作用域
    量化交易之下单函数和context对象
    量化交易策略基本框架
    初始量化交易
    金融量化之Tushare模块
    Python之基础算法介绍
    数据分析之Matplotlib和机器学习基础
    数据分析之Pandas
  • 原文地址:https://www.cnblogs.com/hyj691001/p/10212234.html
Copyright © 2011-2022 走看看