2013-10-12 3 views
0

Я беру свой первый класс программирования, и я немного потерял, как закончить этот код. Я пытаюсь построить треугольник Паскаля с n строками. Я получил строки для печати, каждый в своем ряду, но у меня возникли проблемы с форматированием их в треугольник. Ниже приводится то, что у меня есть. Заранее спасибо!Форматирование Треугольника Паскаля в Python

def print_pascal_triangle(n): 
    # problem0_pascal.pascal_triangle(n) provides the rows in a list of lists   
    rows = problem0_pascal.pascal_triangle(n) 


    # Now print the rows, one by one, CALLING digits_in_biggest_number 
    # and print_row as appropriate. 
    for k in range(len(rows)): 
     spaces = digits_in_biggest_number(rows[k]) 
     print_row(rows[k], spaces) 

def digits_in_biggest_number(row): 
    """ 
    Returns the number of digits in the biggest number in the 
    given list of numbers. 
    """ 

    largest = 0 
    for k in range(len(row)): 
     if row[k] > largest: 
      largest = row[k] 

    digits = int(math.log10(largest)) + 1 
    return digits 



def print_row(numbers, spaces_per_number): 
    """ 
    Prints the numbers in the given list of numbers. 
    Each number is printed using the given number of spaces, except 
    for the first number (1) which is printed with a single space. 
    """ 
    line = '' 
    for k in range(len(numbers)): 
     line += str(numbers[k]) + (spaces_per_number * ' ') 

    print(line) 
+0

Возможно, вам стоит взглянуть на это: http://stackoverflow.com/questions/1242073/code-golf-generate-pascals-triangle?rq=1 – multigoodverse

ответ

1

Поскольку вы пытаетесь узнать, я не дам вам решение, но сделает некоторые предложения ...

В print_row, считают, что ваша цель. У вас есть docstring, говорящий, что вы печатаете число «с использованием заданного количества пробелов». Это то, что вы хотите?

Подумайте об этом. Вы хотите:

 
     1 
     1 1 
     1 2 1 
    1 3 3 1 
     ... 

Во всех строках, вы хотите, чтобы они по центру, на основе самой длинной строки (последний, правда?). Для последней строки вам не нужен какой-либо отступ, в других строках вы хотите, чтобы они отступали. Так что, может быть, у вас есть функция, которая вычисляет самую длинную линию, а затем вычисляет длину других строк и сколько отступов, исходя из разницы в длине.

Если вы не используете python в интерактивном режиме (или используете IDLE), подумайте об этом, чтобы вы могли исследовать с помощью функций, которые у вас есть. При этом вы можете запускать функции по отдельности, чтобы увидеть, что они делают.

Например, вы можете ввести свои функции, а затем введите:

print_row([1, 2, 1], 10) 

И посмотреть, если выход соответствует тому, что вы ожидаете. Вы можете сделать это на каждой функции, чтобы проверить, что вы ожидаете от разных входов.

Более совершенный метод, BTW, заключается в том, чтобы выполнить Test Driven Development, где вы пишете тесты, которые вызывают функции и проверяют, что они делают то, что ожидается. Если вы хотите узнать о том, что больше Google на TDD и Python для некоторой интересной информации о кодировании.

+0

Это привело меня в правильном направлении, спасибо! К сожалению, я либо неправильно понимаю вас, либо это работает только на несколько строк. Когда я вызываю print_pascal_triangle (20), левый край бокового края вверх, но правый очень неровный – JShell

+0

Я, вероятно, был не совсем понятен ... – pcm

+0

Некоторые моменты ... 1) вы можете распечатать уровень отступа для каждой строки, чтобы увидеть если это то, что вы хотите, 2) ключ - это общая длина строки, а не количество цифр в каждом номере, при определении отступа и 3) print_row был всего лишь примером того, как вводить строку и вызовите функцию для ее проверки. Вероятно, вы не хотите проходить в этом втором аргументе. – pcm

Смежные вопросы