Ruby中的Hash&将python转换为Ruby

2024-05-15 17:47:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我在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

它显示以下错误

^{pr2}$

下面是原始的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 

是因为“导入系统”还是“缩进”


Tags: 代码inimportforsyslinewordwheel
2条回答

试试这个:

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

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

puts line

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

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

import在Ruby中不存在,因此不应该存在。在Ruby中,你还必须用end来“关闭”每个块,仅仅使用缩进是不够的(缩进对Ruby来说没有任何意义,尽管为了可读性你还是应该保留它)。在

相关问题 更多 >