0

我正在上我的第一堂编程课,我对如何完成这段代码有点迷茫。我正在尝试构建具有 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)
4

1 回答 1

1

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

在 print_row 中,考虑您的目标是什么。您有一个文档字符串说您正在“使用给定数量的空格”打印数字。那是你要的吗?

想想看。你要这个:

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

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

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

例如,您可以输入您的函数,然后输入:

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

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

顺便说一句,更高级的技术是进行测试驱动开发,您可以在其中编写调用函数并验证它们是否符合预期的测试。如果您想了解更多关于 TDD 和 Python 的 Google 信息,以获取有关编码的一些很酷的信息。

于 2013-10-12T23:50:33.040 回答