2011-09-20 46 views
0
  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. 如何把这个代码进行修改?
+2

您是否担心(一)缺乏换行符,或数字之间(二)有趣的间距让他们排成一列,或(c)两者? –

+0

实际上。 (a)刚刚解决。现在(二)仍然 – Muavia

+0

您的代码给出不起作用...你的第二个循环应该是结束n不是我 – donkopotamus

回答

1

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

+0

问题解决。现在如果我想以等距列的形式排列这个输出结果呢? – Muavia

0

您的问题是,您没有在每个倍数列表后打印新行。你可以通过把你的printMultiples函数结束外循环线

print() 
0

要使列排队解决这个问题,你就需要彻底改变你的做法。目前,printMultiples()无法知道在每个数字之后要放置多少个空格,因为它不知道将在外部循环中调用多少次。

什么你可能做的是:

  • 创建的字符串表示每个多重的二维阵列(不打印任何东西) - 的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

0

如果你已经知道你要垫的数字是宽度为3,那么一个合适的(和更Python)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) 
相关问题