Ruby&;将python转换为ruby
我在Ruby中使用Hash,只需检查某个单词是否在“pairs”类中并替换它们。最初我用python编写代码,并希望将其转换为我不熟悉的ruby。这是我写的ruby代码Ruby&;将python转换为ruby,python,ruby,dictionary,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 i
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
是因为“导入系统”还是“缩进”?尝试以下方法:
pairs = {'butter' => 'flies', 'cheese' => 'wheel', 'milk'=> 'expensive'}
line = ARGV.join(' ').split(' ').map do |word|
pairs.include?(word) ? pairs[word] : word
end.join(" ")
puts line
这将循环传递到脚本的每个项目,并返回单词或替换单词,并用空格连接。尝试以下操作:
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没有任何意义,尽管为了可读性,您仍然应该保留缩进)。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来说并不意味着什么,尽管为了可读性,您仍然应该保留缩进)。谢谢kardeiz!Ruby“放置”的行是什么类型的,它是数组吗?因为它逐行打印单个单词,我想知道他们是否将行拆分两次。如果我还想写一整行,我该怎么办?line.join(“”)无法解决此问题。您好!我在输入中加引号时发现了一个差异。例如,当我尝试输入“this is butter”时,它会打印“this is butter”。如果是“this is butter”,则输出将是“this is flies”。什么原因造成了这种差异?当我将代码放在服务器上时,出现了一个名为“未定义的方法`map'(this is butter:String(NoMethodError)”)的错误。我稍微修改了脚本,以便您可以将要转换的字符串作为一个参数序列或一个参数(用引号括起来):ARGV.join(“”).split(“”)
,它用空格连接arg数组,然后在空间上拆分。我不确定您的第二个问题:调用脚本的上下文是什么?您的错误表明ARGV
被解释为字符串,但ARGV
应始终是数组(即使为空)。是!实际上内容是ARGV[2],所以我认为它是一个字符串?谢谢kardeiz!Ruby“放置”的行是什么类型的,它是数组吗?因为它逐行打印单个单词,我想知道他们是否将行拆分两次。如果我还想写一整行,我该怎么办?line.join(“”)无法解决此问题。您好!我在输入中加引号时发现了一个差异。例如,当我尝试输入“this is butter”时,它会打印“this is butter”。如果是“this is butter”,则输出将是“this is flies”。什么原因造成了这种差异?当我将代码放在服务器上时,出现了一个名为“未定义的方法`map'(this is butter:String(NoMethodError)”)的错误。我稍微修改了脚本,以便您可以将要转换的字符串作为一个参数序列或一个参数(用引号括起来):ARGV.join(“”).split(“”)
,它用空格连接arg数组,然后在空间上拆分。我不确定您的第二个问题:调用脚本的上下文是什么?您的错误表明ARGV
被解释为字符串,但ARGV
应始终是数组(即使为空)。是!实际上内容是ARGV[2],所以我认为它是一个字符串?