我正在进行编码挑战,我需要编写一个程序,将写入的数字(例如" 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
答案 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