Ruby的新手。这是一个简单的家庭作业。 secret_code函数需要接受输入字符串并执行以下操作:
因此,如果输入为“super duper”,则输出应为“repud REPUs”。
我将函数编码如下:
def secret_code(input)
input.split(" ").first[1..-1].each_char do |i|
input[i] = i.upcase
end
return input.reverse
end
它通过了单元测试,但我想知道是否有更好的方法来编码它。是否可以避免使用循环?我试过了
return input.split(" ").first[1..-1].upcase.reverse
但这并没有奏效。任何关于如何清理它的想法都值得赞赏!
答案 0 :(得分:8)
"super duper".sub(/(?<=.)\S+/, &:upcase).reverse
答案 1 :(得分:3)
这个怎么样:
def secret_code(input)
first_space = input.index(' ')
(input[0] + input[1...first_space].upcase + input[first_space..-1]).reverse
end
请注意,在Ruby中,始终返回方法中的最后一个表达式,因此您可以省略最终的return
。
答案 2 :(得分:1)
s = "super duper"
words = s.split(' ')
words.first[1..-1] = words.first[1..-1].upcase
words.each { |word| word.reverse! }
s = words.reverse.join(' ')
puts s # => repud REPUs
答案 3 :(得分:1)
不一定更好,但可以肯定的是,它可以在没有循环的情况下完成......
def f x
(b = [(a = x.split)[0].upcase, *a.drop(1)].join(' ').reverse)[-1] = x[0, 1]
return b
end
答案 4 :(得分:1)
您可以尝试以下方法:
a = "super duper"
p a.gsub(a.split[0...1].join(' '),a.split[0...1].join(' ').capitalize.swapcase).reverse
的输出:强> 的
"repud REPUs"