我编写了一个生成pascal三角形的代码。以下是我的代码中的函数,它处理pascal三角形的间距。
def print_pascals_triangle(triangle):
largest_element = triangle[-1][len(triangle[-1]) // 2]
element_width = len(str(largest_element))
def format_row(row):
return ' '.join([str(element).center(element_width) for element in row])
triangle_width = len(format_row(triangle[-1]))
for row in triangle:
print(format_row(row).center(triangle_width))
这给了我以下输出:
Enter the number of rows you want in your Pascal`s Triangle: 10
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
正如你所看到的那样,间距并不完美,我的帕斯卡三角形也没有居中。我如何完美地居中我的帕斯卡三角形。任何帮助/提示非常感谢。谢谢!
完美的PASCAL三角形!
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
答案 0 :(得分:0)
考虑单个输出的长度和它之前的空格数,该常数等于最长输出的长度的两倍。
您想要这个:
0: 1
1: 1 1
2: 1 2 1
3: 1 3 3 1
4: 1 4 6 4 1
5: 1 5 10 10 5 1
最长的输出是10,否。每个输出分配的空间4。 10之前有2个空格,而5之前有3个空格,使其保持“居中”。
记住这一点,下面是代码:
import math as mt
def combine(n,r):
ncr=(mt.factorial(n))/((mt.factorial(r))*(mt.factorial(n-r)))
return ncr
def pascal():
i=int(input("Enter index: "))
z=len(str(int(combine(i,(i//2)))))
nosp=z*i
for k in range(0,i+1):
sttr=''
for l in range(0,k+1):
sttr+=(" "*(2*z-len(str(int(combine(k,l))))))+str(int(combine(k,l)))
isp=len(str(i))-len(str(k))+1
print(isp*" "+str(k)+": "+nosp*" "+sttr)
nosp-=z
print("Pascal's Triangle.")
pascal()
print("Done!")
它将产生以下输出:
Pascal's Triangle.
Enter index: 10
0: 1
1: 1 1
2: 1 2 1
3: 1 3 3 1
4: 1 4 6 4 1
5: 1 5 10 10 5 1
6: 1 6 15 20 15 6 1
7: 1 7 21 35 35 21 7 1
8: 1 8 28 56 70 56 28 8 1
9: 1 9 36 84 126 126 84 36 9 1
10: 1 10 45 120 210 252 210 120 45 10 1
Done!
如果您不希望额外的索引编号打印语句,则可以修改此代码。
我知道,我的代码一团糟且难以理解。我是编程新手:)