zoukankan      html  css  js  c++  java
  • 编写一个函数,打印数字三角形,接受参数n ,n为正整数,左右两种对齐打印方式,要求数字必须对齐。

      1 #编写一个函数,接受参数n ,n为正整数,左右两种对齐打印方式,要求数字必须对齐。
      2 '''
      3 
      4           1   6 5 4 3 2 1 
      5         2 1     5 4 3 2 1
      6       3 2 1       4 3 2 1
      7     4 3 2 1         3 2 1 
      8   5 4 3 2 1           2 1 
      9 6 5 4 3 2 1             1        
     10 '''
     11 
     12 # NO 1 最基本的,打印空格方式
     13 # 上三角
     14 def triangle_print(n):
     15     for i in range(1, n+1):
     16         for j in range(n,0, -1):
     17             if i < j:
     18                 print(' '* len(str(j)),end=' ')# 因为随着数字位数不同,宽度不同
     19                     # ‘12 ’   ‘100 ’  ‘1000 ’              
     20             else:
     21                 print(j, end=' ')
     22         print()  
     23         
     24 triangle_print(5)
     25 
     26 # 下三角
     27 def triangle_print(n):
     28     for i in range(1, n+1):
     29         for j in range(1, n+1):
     30             if i > j:
     31                 print(' ' * len(str(j)), end=' ')
     32             else:
     33                 print(n+1-j, end=' ')
     34         print()
     35     
     36 triangle_print(7)
     37 
     38 
     39 # NO 2 使用对齐方式,问题是不知道最后一行多宽
     40 
     41 # 思路是 九九乘法表,先都向左靠齐,在整体向右靠齐
     42 
     43 # 上三角
     44 def triangle_print(n):
     45     for i in range(1, n+1):
     46         s = ''
     47         for j in range(i, 0, -1):
     48             s += '{}{}'.format(j, ' ')
     49         print('{:>30}'.format(s)) # 这里的向右靠齐,宽度不能确定
     50   
     51 triangle_print(10)
     52 
     53 # 下三角
     54 def triangle_print(n):
     55     for i in range(1, n+1):
     56         s = ''
     57         for j in range(n+1-i, 0, -1):
     58             s += '{}{}'.format(j, ' ')
     59         print('{:>30}'.format(s)) # 这里的向右靠齐,宽度不能确定
     60   
     61 triangle_print(10)
     62 
     63 # NO 3 基于第二种方法,考虑先打印最后一行,就知道向右靠齐多宽
     64 
     65 # 上三角
     66 def triangle_print(n):
     67     tail = ' ' + ' '.join([str(i) for i in range(n, 0, -1)])
     68     width = len(tail)
     69     for i in range(1, n):
     70         s = ''
     71         for j in range(i, 0, -1):
     72             s += '{}{}'.format(j, ' ')
     73         print('{:>{}}'.format(s, width+1))
     74     print(tail)
     75 triangle_print(15)
     76 
     77 # 优化:
     78 def triangle_print(n):
     79     tail = ' ' + ' '.join([str(i) for i in range(n, 0, -1)])
     80     width = len(tail)
     81     for i in range(1, n):
     82         print('{:>{}}'.format(' '.join([str(j) for j in range(i, 0, -1)]),width))
     83     print(tail)
     84 triangle_print(15)
     85 
     86 # 下三角
     87 def triangle_print(n):
     88     tail = ' ' + ' '.join([str(i) for i in range(n, 0, -1)])
     89     width = len(tail)
     90     print(tail)
     91     for i in range(1, n):
     92         print('{:>{}}'.format(' '.join([str(j) for j in range(n-i, 0, -1)]),width))
     93    
     94 triangle_print(15)
     95 
     96 '''
     97 
     98           1   6 5 4 3 2 1 
     99         2 1     5 4 3 2 1
    100       3 2 1       4 3 2 1
    101     4 3 2 1         3 2 1 
    102   5 4 3 2 1           2 1 
    103 6 5 4 3 2 1             1        
    104 '''
    105 # NO 5 基于上面的思路,发现,可以通过最后一行得到所有,而不用每一行都计算。也就是切片
    106 
    107 # 上三角
    108 def triangle_print(n):
    109     tail =  ' '.join([str(i) for i in range(n, 0, -1)])
    110     width = len(tail)      
    111     step = 2
    112     start = -1   
    113     points = {10 ** i for i in range(1,3)}
    114     
    115     for i in range(1, n+1):
    116         print('{:>{}}'.format(tail[start:],width))       
    117 #         if len(str(i+1)) > 2:
    118         if i+1 in points:
    119             step += 1
    120         start = start - step   
    121 triangle_print(15)
    122 
    123 #  下三角 # 这个版本只能取到10 ,两位数超过两个,就出现问题,因为所有的step都按照2 来算了
    124 def triangle_print(n):
    125     tail =  ' '.join([str(i) for i in range(n, 0, -1)])
    126     width = len(tail) 
    127     print(width)
    128     print(tail)
    129     
    130     for i in range(n - 1, 0, -1):# 10,9
    131         if len(str(i)) == 2:
    132             step = 3
    133         if len(str(i)) == 1:
    134             step = 2
    135         start = width - step * (n - i)# 9-2*1
    136         print('{:>{}}'.format(tail[-start:],width))       
    137   
    138 triangle_print(10)
    139 
    140 # NO 6
    141 '''
    142 
    143           1   6 5 4 3 2 1 
    144         2 1     5 4 3 2 1
    145       3 2 1       4 3 2 1
    146     4 3 2 1         3 2 1 
    147   5 4 3 2 1           2 1 
    148 6 5 4 3 2 1             1        
    149 '''
    150 # 下三角 打印最后 一行,剩余的 遇到一个空格,就把之前的都化为空格,后面的打印,也是利用切片
    151 def showtail(n):
    152     tail = ' '.join([str(i) for i in range(n, 0, -1)])
    153     print(tail)
    154     for j in range(len(tail)):
    155         if tail[j] == ' ':
    156             print(' ' * j ,tail[j+1:])
    157 showtail(15)
    为什么要坚持,想一想当初!
  • 相关阅读:
    【新闻发布系统】登录和注销的实现
    【新闻发布系统】项目文档
    JSP九大内置对象
    JDBC数据库连接技术
    使用SQLyog连接MySQL数据库
    MySql--学习成长过程
    MYSQL--学习记录
    MYSQL
    GIT的使用方法
    java 表单验证
  • 原文地址:https://www.cnblogs.com/JerryZao/p/9519174.html
Copyright © 2011-2022 走看看