【问题标题】:Can anyone help me figure out the parsing error in this code?谁能帮我找出这段代码中的解析错误?
【发布时间】:2011-09-20 04:13:48
【问题描述】:
  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. 这段代码应该如何修改?

【问题讨论】:

  • 您是否担心 (a) 缺少换行符,或者 (b) 数字之间的有趣间距使它们排成一列,或者 (c) 两者兼而有之?
  • 实际上都是。 (a) 刚刚解决。现在(b)仍然存在
  • 你给定的代码不起作用......你的第二个循环应该超过 n 而不是 i

标签: python numpy python-3.x


【解决方案1】:

printMultiples 的末尾添加一个空的print,在while (i &lt;= 10): 循环之外。

【讨论】:

  • 问题已解决。现在如果我想以等间距列的形式排列这个输出呢?
【解决方案2】:

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

print()

【讨论】:

    【解决方案3】:

    要使列对齐,您需要彻底改变方法。目前,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

    【讨论】:

      【解决方案4】:

      如果您已经知道您希望将数字填充为宽度 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 )
      

      【讨论】:

        猜你喜欢
        • 2021-03-11
        • 1970-01-01
        • 1970-01-01
        • 2020-10-29
        • 2020-08-13
        • 1970-01-01
        • 2019-07-26
        • 2011-05-03
        • 2019-08-28
        相关资源
        最近更新 更多