Форматирование треугольника Паскаля в Python
Я беру свой первый урок программирования, и я немного растерялся, как закончить этот код. Я пытаюсь построить треугольник Паскаля с n строками. У меня есть строки для печати, каждая в отдельном ряду, но у меня возникают проблемы с форматированием их в треугольник. Ниже то, что у меня так далеко. Заранее спасибо!
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)
1 ответ
Поскольку вы пытаетесь учиться, я не дам вам решения, но сделаю несколько предложений...
В print_row подумайте, какова ваша цель. У вас есть строка документа, говорящая, что вы печатаете число "используя заданное количество пробелов". Это то, что вы хотите?
Думаю об этом. Вы хотите это:
1 1 1 1 2 1 1 3 3 1...
Во всех строках вы хотите, чтобы они были отцентрированы, исходя из самого длинного ряда (последний, верно?). В последнем ряду отступы не нужны, в других - отступы. Поэтому, возможно, у вас есть функция, которая вычисляет самую длинную строку, а затем вычисляет длину других строк и объем отступа, основываясь на разнице в длине.
Если вы не используете python в интерактивном режиме (или не используете IDLE), подумайте о том, чтобы сделать это, чтобы вы могли изучить имеющиеся у вас функции. После этого вы можете запускать функции по отдельности, чтобы увидеть, что они делают.
Например, вы можете ввести свои функции, а затем ввести:
print_row([1, 2, 1], 10)
И посмотрите, соответствует ли результат тому, что вы ожидаете. Вы можете сделать это для каждой функции, чтобы помочь проверить, что вы ожидаете для разных входов.
Более продвинутый метод, BTW, - это разработка через тестирование, где вы пишете тесты, которые вызывают функции и проверяют, что они выполняют то, что ожидали. Если вы хотите узнать об этом больше, Google на TDD и Python для некоторой интересной информации о кодировании.