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程序中的空白区域
您的代码添加一个空格为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
你换行外的循环。
回家:测试你的边界条件! :-)
呃。我认为你接受了错误的答案 - http://stackoverflow.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后,但我认为正常,这在你的情况下被认为是一个问题?
是的。起初我并不认为这是一个问题,但现在我认为这就是为什么我没有得到我的解决方案的功劳。 – 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错误,不是你的。你的程序没有发出。
红鲱鱼汤有人吗?
回家:请仔细阅读问题。 :-)
不知道你想要什么。你能澄清吗? – karlcow 2012-08-14 03:14:58
“空白”通常用于包含空格和换行符(以及制表符等)。所以如果指令说“没有尾随空白”,那么他们可能不想在最后一行之后换行。所以你可以尝试改变'n == x'到'n == x和i!= y',看看它是否让它开心。 – 2012-08-14 03:16:38
@karlcow我不明白为什么我的乘法表的最后一行有空白。 – russjohnson09 2012-08-14 03:26:42