我已经为程序编写了一些代码,可以找到Pascal的三角形。但是,格式化并没有像我希望的那样出现。我的代码如下: def factorial(n): “”计算一个阶乘“”“ p = 1 对于范围内的i(1,n + 1): p = p * i 返回p
def binomial(n, k):
"""Calculate n choose k"""
y = int(factorial(n)/(factorial(k)*factorial(n-k)))
return y
a = int(input("How many rows of Pascal's triangle do you want?: "))
for j in range(a):
for i in range(j + 1):
n = (a-1)-j
print(" "*n, binomial(j, i), end=" ")
print("")
感谢for循环在每个" "*n
之前执行i in range(j+1)
位,而不是获得一个不错的pascal三角形:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
我明白了:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
我有什么办法可以帮助解决这种格式错误吗?我尝试将n = (a-1)-j
和print(" "*n)
位置放在for i in range(j+1)
之外,而只放在for j in range(a)
内,看看这是否只会缩进文本一次,但这会创建一个新行。我该怎么办?
答案 0 :(得分:1)
然而,经过几个小时的挣扎,我才能在几分钟之内找到答案......
在这里,我通过在代码中添加if
命令来解决重复间距的问题,如下所示:
def factorial(n):
"""Calculate a factorial"""
p = 1
for i in range(1, n+1):
p = p * i
return p
def binomial(n, k):
"""Calculate n choose k"""
y = int(factorial(n)/(factorial(k)*factorial(n-k)))
return y
a = int(input("How many rows of Pascal's triangle do you want?: "))
for j in range(a):
for i in range(j + 1):
if i == 0:
n = (a-1)-j
print(" "*n, binomial(j, i), end=" ")
else:
print(binomial(j, i), end=" ")
print("")
这确保了(a-1)-j
的初始缩进仅发生在for循环的第一次出现。