任何人都可以帮我解决这段代码中的解析错误吗?

时间:2011-09-20 04:13:48

标签: python numpy python-3.x

  1. 此代码的输出非常相似,但不完全符合预期。
  2. 代码是:

    def printMultiples(n):
        i = 1
        while (i <= 10):
            print(n*i, end = '  ')
            i += 1
    n = 1
    while (i<= 3):
        printMultiples(n)
        n += 1
    
  3. 输出为:

    1 2 3 4 5 6 7 8 9 10 2 4 6 8 10 12 14 16 18 20 3 6 9 12 15 18 21 24 27 30
    
  4. 它应该像:

    1 2 3 4  5  6  7  8  9  10
    2 4 6 8  10 12 14 16 18 20
    3 6 9 12 15 18 21 24 27 30
    
  5. 如何修改此代码?

4 个答案:

答案 0 :(得分:1)

print循环之外的printMultiples末尾添加一个空的while (i <= 10):

答案 1 :(得分:0)

您的问题是您没有在每个倍数列表后打印新行。您可以通过将printMultiples函数的末尾放在循环外的行

来解决此问题
print()

答案 2 :(得分:0)

要使列对齐,您需要彻底改变方法。目前,printMultiples()无法知道在每个数字后放置多少空格,因为它不知道在外部while循环中调用它的次数。

你可能会做的是:

  • 为每个倍数创建一个二维数组的字符串表示(尚未打印任何内容) - str()函数对此有用
  • 对于每一列,检查该列中最长数字的长度(它始终是最后一个)并添加一个
  • 打印每一行,在每个字符串后面添加适当数量的空格以匹配该列所需的空格数

一种更简单的方法,如果您只对感兴趣的柱状输出而不是精确的间距,则可以在每个数字之后打印足够的空间以容纳您期望输出的最大数字。所以你可能会得到:

1   2   3   4   5   6   7   8   9   10
2   4   6   8   10  12  14  16  18  20
3   6   9   12  15  18  21  24  27  30

(注意前三列中每个数字后面有三个空格,即使你不需要全部三个空格。)

更改现有代码可以更轻松。有关详细信息,请参阅Format String Syntax

答案 3 :(得分:0)

如果您已经知道要填充宽度为3的数字,那么适合(和更多pythonic)的printMultiples

def printMultiples(n):
    txt = "".join(["{0: <3d}".format(n*i) for i in range(1, 11)])
    print(txt)

最好是允许宽度改变。然后你可以传递你喜欢的宽度,例如,你想要的最大数字的宽度

def printMultiples(n, width=3):
    txt = "".join(["{0: <{1}d}".format(n*i, width) for i in range(1, 11)])
    print(txt)

width = len(str(4 * 10)) + 1
for i in range(1, 4):
    printMultiples(i, width )