Правильно распечатайте треугольник Паскаля в Python

Я закодировал программу 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

Но я хочу вот так вот так

Вам не нужно переписывать кучу кода. это решается простым добавлением 1 строки в код и небольшой модификацией другой строки (оба оператора печати). проверьте мой ответ для минимального дельта-решения.

Akshay Sehgal 22.12.2020 06:56
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
1
1 418
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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 модификаций -

  1. Перед каждой строкой добавляйте (n-line) пробелы
  2. Выровняйте по центру каждое из 1- или 2-значных чисел в 4-буквенном пространстве (изменение этого дает интересные искаженные результаты :))
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

Другие вопросы по теме