以下python和ruby代码之间的差异

时间:2014-02-24 16:45:55

标签: python ruby

我试图解决以下问题: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

对我来说,两个片段看起来像是做同样的事情,他们根据我的测试输出相同的东西。除了评估系统的问题之外,您是否认为我的解决方案没有被接受?

2 个答案:

答案 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 - 样式格式化,无需测试长度即可正确填充。