編寫一個函數,打印數字三角形,接受參數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