Ruby中的Hash&将python转换为ruby

时间:2013-07-17 15:27:17

标签: python ruby dictionary

我在Ruby中使用Hash,只是检查某个单词是否在“pairs”类中并替换它们。最初我在python中编码并希望将其转换为我不熟悉的ruby。这是我写的ruby代码。

import sys

pairs = {'butter' => 'flies', 'cheese' => 'wheel', 'milk'=> 'expensive'}

for line in sys.stdin:
    line_words = line.split(" ")
    for word in line_words:
      if word in pairs
        line = line.gsub!(word, pairs[word])

puts line

显示以下错误

syntax error, unexpected kIN, expecting kTHEN or ':' or '\n' or ';'
      if word in pairs
                ^

虽然下面是正确的原始python脚本:

import sys

pairs = dict()

pairs = {'butter': 'flies', 'cheese': 'wheel', 'milk': 'expensive'}

for line in sys.stdin:
  line = line.strip()
  line_words = line.split(" ")
  for word in line_words:
    if word in pairs:
      line = line.replace(word ,pairs[word])

print line 

是因为“import sys”还是“Indentation”?

2 个答案:

答案 0 :(得分:1)

试试这个:

pairs = {'butter' => 'flies', 'cheese' => 'wheel', 'milk'=> 'expensive'}

line = ARGV.join(' ').split(' ').map do |word|
  pairs.include?(word) ? pairs[word] : word
end.join(" ")

puts line

这将遍历传递给脚本的每个项目,并返回单词或替换单词,由空格连接。

答案 1 :(得分:0)

for通常不用于Ruby,因为它有一些不寻常的范围。

以下是我的写作方式:

pairs = { "butter" => "flies", "cheese" => "wheel", "milk" => "expensive" }
until $stdin.eof?
  line = $stdin.gets
  pairs.each do |from, to|
    line = line.gsub(from, to)
  end

  line
end
Ruby中不存在

import,所以不应该存在。你还必须在Ruby中用end“关闭”每个块,仅仅缩进是不够的(缩进对Ruby没有任何意义,尽管你仍然应该保留它以便于阅读)。