循环打印(Ruby)

时间:2015-06-05 01:16:24

标签: ruby loops

我正在进行编码挑战,我需要编写一个程序,将写入的数字(例如" one")转换为整数。它似乎工作得相当好,但它不打印该行的最后一个值。有谁知道为什么会发生这种情况?

代码:

File.open("-snip-").each_line do |line| #-snip- is just my omitted filepath
    words = line.split(";")
    words.each { |w| print 1 if w == "one"
        print 2 if w == "two"
        print 3 if w == "three"
        print 4 if w == "four"
        print 5 if w == "five"
        print 6 if w == "six"
        print 7 if w == "seven"
        print 8 if w == "eight"
        print 9 if w == "nine"
        print 0 if w == "zero" }
    print "\n"
end

示例输入:

  

3;零; 9;零;六; 8; 8;五; 7; 8; 7;四;三;六; 7; 7

我的输出:

  

309068857874367

输出我需要:

  

3090688578743677

2 个答案:

答案 0 :(得分:2)

我猜你的样本输入结尾有一个新的行字符。在这种情况下,您的输入应如下所示:

three;zero;nine;zero;six;eight;eight;five;seven;eight;seven;four;three;six;seven;seven\n

当您在线上调用split时,它将返回一个数组。该数组的最后一个元素是"seven\n"。您可以通过在行上调用chomp来删除尾随换行符,因为它会拆分。

这将是

words = line.chomp.split(";")

而不是

words = line.split(";")

答案 1 :(得分:0)

你可以使用这样的代码。

indexes = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"]

File.open("-snip-").each_line do |line| #-snip- is just my omitted filepath
  output = ""
  line.chomp.split(";").each do |w|
    output += indexes.index(w).to_s
  end
  print "#{output}\n"
end