ruby 在codewars中返回nil,但在IDE中不返回?

xmjla07d  于 2023-03-12  发布在  Ruby
关注(0)|答案(2)|浏览(127)

我在我电脑的IDE上运行这段代码,我得到了想要的结果,但是当我用codewars运行它时,它返回nil。

def accum(s)
  s = s.split("")
  counter = 1
  multiplier = 1
  print s[0].capitalize
  loop do
    print "-#{s[counter].capitalize}#{s[counter].downcase * multiplier}"
    counter += 1
    multiplier += 1
    break if counter == s.length
  end
end

有人能告诉我哪里出了问题吗?
https://www.codewars.com/kata/5667e8f4e3f572a8f2000039/train/ruby

nx7onnlm

nx7onnlm1#

把它改成

def accum(s)
  s = s.split("")
  counter = 1
  multiplier = 1
  out = s[0].capitalize
  loop do
    out << "-#{s[counter].capitalize}#{s[counter].downcase * multiplier}"
    counter += 1
    multiplier += 1
    break if counter == s.length
  end
  out
end

在这里引入out,在循环中附加到它,最后在末尾返回。

s5a0g9ez

s5a0g9ez2#

Andre Wildberg已经solved您的问题,这源于只 * 打印 * 而不从方法返回您需要的值,但如果我们仔细考虑您正在做的事情,这可以在单个表达式中完成。
你需要把一个字符串拆分成多个字符。让我们使用s.chars而不是s。split(“”). Now you need to loop over them with an index. You also have多个but that and计数器'总是相同的值。
我们可以使用#each_with_index来得到这个索引,它从0开始索引,所以我们只需要加上1就可以得到字符串的长度。
我们可以使用#each_with_index返回的枚举器Map出我们需要的子字符串,然后用"-"将它们连接起来。

def accum(s)
  s.chars
   .each_with_index 
   .map { |ch, i| ch.*(i+1).capitalize }
   .join("-")
end

测试:

% ruby
def accum(s)
  s.chars
   .each_with_index 
   .map { |ch, i| ch.*(i+1).capitalize }
   .join("-")
end

puts accum("hello")

H-Ee-Lll-Llll-Ooooo
%

相关问题