Я закодировал программу Pascal's Triangle в Python, но треугольник печатается как прямоугольный треугольник
n=int(input("Enter the no. of rows: "))
for line in range(1, n + 1):
c = 1
x=n
y=line
for i in range(1, line + 1):
print(c, end = " ")
c = int(c * (line - i) / i)
print(" ")
Это дает результат как
Enter the no. of rows: 5
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
Но я хочу вот так вот так
n=int(input("Enter number of rows: "))
a=[]
for i in range(n):
a.append([])
a[i].append(1)
for j in range(1,i):
a[i].append(a[i-1][j-1]+a[i-1][j])
if (n!=0):
a[i].append(1)
for i in range(n):
print(" "*(n-i),end = " ",sep = " ")
for j in range(0,i+1):
print('{0:6}'.format(a[i][j]),end = " ",sep = " ")
print()
Строка print(" "*(n-i),end = " ",sep = " ")
дает начальные пробелы, которые вы ищете.
Вместо того, чтобы использовать фиксированную ширину числа, давайте попробуем настроить треугольник самостоятельно:
rows = int(input("Enter the no. of rows: "))
triangle = []
for row in range(1, rows + 1):
c = 1
numbers = []
for i in range(1, row + 1):
numbers.append(c)
c = c * (row - i) // i
triangle.append(numbers)
last_row = triangle[-1]
number_width = len(str(max(last_row))) + 1
triangle_width = number_width * len(last_row)
for row in triangle:
string = ""
for number in row:
number_string = str(number)
string += number_string + ' ' * (number_width - len(number_string))
print(string.center(triangle_width))
И воспользуйтесь этим str.center()
методом! Отрегулируйте интервал по своему усмотрению.
ВЫХОД
> python3 test.py
Enter the no. of rows: 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
1 9 36 84 126 126 84 36 9 1
>
Вы можете просто изменить свой существующий код с помощью 2 модификаций -
(n-line)
пробелыn=8
for line in range(1, n + 1):
c = 1
x=n
y=line
#######
print(" "*(n-line), end = "") #This line adds spaces before each line
#######
for i in range(1, line + 1):
########
print(str(c).center(4), end = "") #This center aligns each digit
########
c = int(c * (line - i) / i)
print(" ")
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 строки в код и небольшой модификацией другой строки (оба оператора печати). проверьте мой ответ для минимального дельта-решения.