所以我在过去的几天里一直在寻找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(数字右对齐并去掉每行上的前/后空格)。
答案 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
|++++||||++++||||++++||||++++||||++++||||++++???????????