Python和CodeEval:为什么我对此乘法表挑战的解决方案不正确?

时间:2014-05-13 18:22:11

标签: python formatting multiplication

所以我在过去的几天里一直在寻找CodeEval的一些挑战。其中一个要求你打印漂亮的乘法表,最高可达12 * 12。在我的计算机上,此解决方案正常工作,网站不接受它。

有人可以帮帮我吗?

for i in range(1,13):
    for j in range(1,13):
       if j==1:
        print i*j,
       elif i>=10 and j==2:
        print '{0:3}'.format(i*j),
       else:
        print '{0:4}'.format(i*j),
    print 

以下是对挑战的描述:

  

以类似矩阵的方式打印出表格,每个数字格式化为宽度为4(数字右对齐并去掉每行上的前/后空格)。

2 个答案:

答案 0 :(得分:2)

  

以矩阵形式打印表格,每个数字格式化为宽度4   (数字是右对齐的,并在每一行上去掉前导/尾随空格。)

根据给定的规则,我认为以下代码可能会通过。但这只是猜测 因为我没有玩codeeval。

# python3 code, use from __future__ import print_function if you're using python2
for i in range(1,13):
    for j in range(1,13):
        print('{:4}'.format(i*j), end="")
    print ("")

我猜您的问题是因为您忘记了print foo,而您正在进行5对齐 python 2中的语法是添加空格。他们也说宽度为4,而你试图聪明,而且 相应地对齐值的大小。

编辑:这里有关于代码中出错的更多细节,让我们选择两行输出:

1    2    3    4    5    6    7    8    9   10   11   12
10  20   30   40   50   60   70   80   90  100  110  120
AA␣BBB␣CCCC␣CCCC␣CCCC␣CCCC␣CCCC␣CCCC␣CCCC␣CCCC␣CCCC␣CCCC␣

所以你的代码正在做的是:

if j==1: print i*j,

输出AA␣

elif i>=10 and j==2:
    print '{0:3}'.format(i*j),

输出BBB␣

else:
    print '{0:4}'.format(i*j),

输出CCCC␣

是python添加的额外空间,因为在打印结束时使用了,来获取该内容,请参阅该片段:

>>> def foo():
...  print 1234,
...  print 1234,
...  print
... 
>>> foo()
1234 1234

格式'{0:3}'右对齐整数到右边的预期,但只有填充为3,而'{0:4}'根据规则进行。但是,当你最后添加一个额外的空间时,它并没有像你正在编写它那样工作。这就是为什么使用python3的打印表达式更好,使用end关键字更简单。

答案 1 :(得分:1)

  

以类似矩阵的方式打印表格,每个数字格式化为宽度为4 (数字右对齐并删除前导/尾随空格每一行)。

但是,输出无法满足此要求,而这种要求通过时间条更加明显。

1    2    3    4    5    6    7    8    9   10   11   12^N
2    4    6    8   10   12   14   16   18   20   22   24^N
3    6    9   12   15   18   21   24   27   30   33   36^N
||||----||||----||||----||||----||||----||||----||||----

“宽度为4,右对齐”的正确填充应该看起来像

   1   2   3   4   5   6   7   8   9  10  11  12^N
||||++++||||++++||||++++||||++++||||++++||||++++

然后通过“去除每行上的前导/尾随空格”正确的结果

1   2   3   4   5   6   7   8   9  10  11  12^N
|++++||||++++||||++++||||++++||||++++||||++++

当前不正确输出时,正确输出的时间条看起来像

1    2    3    4    5    6    7    8    9   10   11   12^N
|++++||||++++||||++++||||++++||||++++||||++++???????????