编写一个函数,打印数字三角形,接受参数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)

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM