Ruby Array / Loop / .each do - 最简单的答案

时间:2015-09-04 21:39:10

标签: arrays ruby loops

在Ruby中,我希望创建一个简短的程序,用户可以输入一定数量的单词(现在为5),程序需要按字母顺序将单词吐回给用户,并且每个单词必须从ALL CAPS替换为全部小写字母。

此程序只能使用(.each do,.sort,.upcase,.downcase),数组,循环和if / else语句等方法。没有...所以没有索引,词典,模块,参数等。语法不应该与我已经写过的内容有太大分歧。

这是我到目前为止的代码......我一直没有得到任何方法错误......任何帮助都将不胜感激。

words = []

5.times do
  puts "Please enter a word"
  words << gets.chomp
end

words.sort.each do |odd, even|
    if odd puts words.upcase
    elsif even puts words.downcase
  end
end

3 个答案:

答案 0 :(得分:1)

填充数组的第一个循环很好。

words.sort.each do |odd, even|
    if odd puts words.upcase
    elsif even puts words.downcase
  end
end

这不起作用。 each从排序后的数组中获取一个单词&#34; feeds&#34;到了街区。该块使用变量&#34; odd&#34;为了它。由于变量&#34;偶数&#34;没有得到价值,它将是零。

在下一行中,Ruby决定odd是否为真,并且由于它不是falsenil,Ruby决定它是,因此执行puts words.upcasewords但是,作为一个数组,不知道上升的东西 - 并通过给出错误告诉你。

以下代码使用变量作为&#34;切换&#34 ;;如果它关闭则打开,反之亦然。

words = []

5.times do
  puts "Please enter a word"
  words << gets.chomp
end

up = true # the toggle

words.sort.each do |word|
  if up then 
    puts word.upcase
    up = false
  else 
    puts word.downcase
    up = true
  end 
end

答案 1 :(得分:0)

编辑:当我发布这个答案时,我没有看过@steenslag的帖子,但是输入生成的方式略有不同所以除非我希望删除它,否则我会离开它,在这种情况下我将

puts "Enter 5 words separated by spaces: "
words = gets.chomp! 
results = words.split(" ").sort!
caps = true
results.each do |word|
  if caps == true
    puts word.upcase
    caps = false
  elsif caps == false
    puts word.downcase
    caps = true
  end
end

答案 2 :(得分:0)

我同意切换的想法是其他方法已经提出的方法。

我只是简单地简化了一下,因为在Ruby中不需要明确地针对truefalse检查切换,也不需要将切换显式更改为true或{ {1}}在每次迭代中,只需切换它:

false