Python程序中的空白区域

问题描述:

#/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之后有一个空格。我测试了自己,并且我没有这个问题。到底是怎么回事?Python程序中的空白区域

+0

不知道你想要什么。你能澄清吗? – karlcow 2012-08-14 03:14:58

+0

“空白”通常用于包含空格和换行符(以及制表符等)。所以如果指令说“没有尾随空白”,那么他们可能不想在最后一行之后换行。所以你可以尝试改变'n == x'到'n == x和i!= y',看看它是否让它开心。 – 2012-08-14 03:16:38

+0

@karlcow我不明白为什么我的乘法表的最后一行有空白。 – russjohnson09 2012-08-14 03:26:42

您的代码添加一个空格为mult_table(1,1)不是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你换行外的循环。

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

+0

呃。我认为你接受了错误的答案 - http://*.com/questions/11945276/python-white-space/11945488#11951544。虽然谢谢! :-) – azhrei 2012-08-14 23:50:13

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

当我测试你的程序,我没有看到最后一个值后留一个空格(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. 

我跑这(输出到文件),我没有找到生成的文件

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) 

有任何额外的空白空间是0a - 换行36后,但我认为正常,这在你的情况下被认为是一个问题?

+0

是的。起初我并不认为这是一个问题,但现在我认为这就是为什么我没有得到我的解决方案的功劳。 – russjohnson09 2012-08-14 06:17:54

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

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.. 

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

您可能需要阐明您的代码符号以及输出结果的方式,以及格式。

嗯,我喜欢我之前的回答,因为它发现了一个你的程序发出空白空间的情况。

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

质疑描述只给你前三行的正确输出。

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

红鲱鱼汤有人吗?

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