在Python中格式化Pascal的三角形

时间:2013-10-12 21:12:50

标签: python pascals-triangle output-formatting

我正在参加我的第一个编程课程,但我对如何完成此代码感到有点迷茫。我正在尝试用n行构造一个Pascal的三角形。我得到了要打印的行,每行都在他们自己的行上,但是我很难将它们格式化为三角形。以下是我到目前为止所得到的。提前谢谢!

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 个答案:

答案 0 :(得分:1)

既然你正在努力学习,我不会给你一个解决方案,但会提出一些建议......

在print_row中,考虑一下您的目标是什么。你有一个docstring说你正在使用给定的空格数打印数字。这就是你想要的吗?

想一想。你想要这个:

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

在所有行中,您希望它们居中,基于最长的行(最后一行,右?)。对于最后一行,您不需要任何缩进,在其他行中,您希望缩进。 所以也许你有一个函数可以找出最长的一行,然后根据长度的差异计算出其他行的长度和缩进量。

如果您没有在交互模式下使用python(或使用IDLE),请考虑这样做,以便您可以使用您拥有的功能进行探索。然后,您可以单独运行这些功能,看看他们在做什么。

例如,您可以输入您的功能,然后输入:

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

看看输出是否符合您的预期。您可以对每个函数执行此操作,以帮助验证您对不同输入的期望。

更先进的技术,BTW,是做测试驱动开发,在那里编写调用函数的测试并验证它们是否符合预期。如果你想在TDD和Python上了解更多关于编码的一些很酷的信息。