0
#/usr/bin/python2.4 -tt

import sys

def mult_table(x,y):
  for i in range(1,y+1):
    for n in range(1,x+1):
      if n == 1:
        print i*n,
      elif n == x:
        print repr(i*n).rjust(3)
      else:
        print repr(i*n).rjust(3),

mult_table(12,3)
sys.exit(0)

我将这个简短的程序提交给CodeEval。它唯一的工作就是制作一个乘法表。问题是它不应该有任何尾随空格,当我提交它时,最后一行在 36 之后有一个空格。我测试了自己,我没有这个问题。到底是怎么回事?

4

5 回答 5

1

mult_table(1,1)您的代码为not for添加了一个空格mult_table(12,3)

因此,您需要修复您的if n == 1案例(也检查n == x,就像您稍后在代码中所做的那样)。

我会做一些不同的事情,所以核心mult_table是这样的:

      if n == 1:
        print i*n,
      else:
        print repr(i*n).rjust(3),

然后只是print外部 for 循环中的换行符。

带回家:测试你的边界条件!:-)

于 2012-08-14T03:43:18.730 回答
0

当您在一个环境中生成结果并在另一个环境中显示它时,可能会导致问题。

0000000: 3120 2020 3220 2020 3320 2020 3420 2020  1   2   3   4
0000010: 3520 2020 3620 2020 3720 2020 3820 2020  5   6   7   8
0000020: 3920 2031 3020 2031 3120 2031 320D 0A32  9  10  11  12..2
0000030: 2020 2034 2020 2036 2020 2038 2020 3130     4   6   8  10
0000040: 2020 3132 2020 3134 2020 3136 2020 3138    12  14  16  18
0000050: 2020 3230 2020 3232 2020 3234 0D0A 3320    20  22  24..3
0000060: 2020 3620 2020 3920 2031 3220 2031 3520    6   9  12  15
0000070: 2031 3820 2032 3120 2032 3420 2032 3720   18  21  24  27
0000080: 2033 3020 2033 3320 2033 360D 0A          30  33  36..

我的 Windows 7 系统的输出中有 0D0A (CRLF),使用标准输出到文件运行您的代码。也许这在您的情况下被解释为空白?

您可能需要澄清您的代码如何运行以及它如何输出结果,以及以何种格式输出。

于 2012-08-14T04:16:50.363 回答
0

好吧,我喜欢我之前的回答,因为它发现了您的程序发出空白空间的情况。

但是,我在 CodeEval 上检查了问题,发现挑战要求您打印12x12的表格,而不是 12x3。

挑战描述只为您提供正确输出的前三行

现在,当您检查 CodeEval 的程序输出报告时,是的,有一个额外的空间。(我尝试过这个)。但这是一个 CodeEval 错误,不是你的。你的程序没有发出那个。

红鲱鱼汤有人吗?

带回家:仔细阅读问题。:-)

于 2012-08-14T11:43:20.153 回答
0

由于换行符本身是空格,因此您的程序设计具有尾随空格。如果你想做一个特殊的情况,你可以禁止表格的末尾写一个换行符。

当我测试你的程序时,我在最后一个值之后没有看到空格(ASCII 0x20):

$ ~/src/test/x.py | xxd
0000000: 3120 2020 3220 2020 3320 2020 3420 2020  1   2   3   4
0000010: 3520 2020 3620 2020 3720 2020 3820 2020  5   6   7   8
0000020: 3920 2031 3020 2031 3120 2031 320a 3220  9  10  11  12.2
0000030: 2020 3420 2020 3620 2020 3820 2031 3020    4   6   8  10
0000040: 2031 3220 2031 3420 2031 3620 2031 3820   12  14  16  18
0000050: 2032 3020 2032 3220 2032 340a 3320 2020   20  22  24.3
0000060: 3620 2020 3920 2031 3220 2031 3520 2031  6   9  12  15  1
0000070: 3820 2032 3120 2032 3420 2032 3720 2033  8  21  24  27  3
0000080: 3020 2033 3320 2033 360a                 0  33  36.
于 2012-08-14T03:22:20.260 回答
0

我运行了这个(输出到文件),但在结果文件中没有发现任何额外的空白

import sys

def mult_table(x,y):
    with open('data.txt', 'w') as f:
        for i in range(1,y+1):
            for n in range(1,x+1):
                if n == 1:
                    print i*n,
                    print >> f,  i*n,
                elif n == x:
                    print repr(i*n).rjust(3)
                    print >> f, repr(i*n).rjust(3)
                else:
                    print repr(i*n).rjust(3),
                    print >> f, repr(i*n).rjust(3),

mult_table(12,3)
sys.exit(0)

36 之后有一个0a- 换行符,但我认为这很正常,在你的情况下这是否被认为是一个问题?

于 2012-08-14T03:43:41.080 回答