我试图解决以下问题:https://www.codeeval.com/open_challenges/23/
这是我在Python中的解决方案,但没有通过:
for x in range(1,13):
string = ''
for y in range(1,13):
string += ' '*(4-len(str(x*y))) + str(x*y)
print string.strip()
这是我朋友在Ruby中的解决方案,确实通过了:
for i in 1..12
line = ""
for j in 1..12
line += " " * (4 - (j * i).to_s.length) + "#{j * i}"
end
puts line.strip
end
对我来说,两个片段看起来像是做同样的事情,他们根据我的测试输出相同的东西。除了评估系统的问题之外,您是否认为我的解决方案没有被接受?
答案 0 :(得分:2)
我会用:
for x in range(1, 13):
print ''.join([format(x * y, '2d' if y == 1 else '4d')
for y in range(1, 13)])
这会将最左边的列格式化为最多2个字符(1到12),否则为4个字符,右对齐。
你的版本从行的开头删除了太多的空格;最后3行在最左列中需要2位数的空格。
答案 1 :(得分:1)
回答Ruby用于比较:
(1..12).each do |i|
puts((1..12).collect do |j|
'%4d' % (i * j)
end.join(' '))
end
'%4d'
使用sprintf
- 样式格式化,无需测试长度即可正确填充。