简单的数组比较逻辑失败

时间:2014-11-18 17:57:54

标签: ruby

这个想法很简单:如果" red"," green"," orange",或" yellow"输入然后消息传递。

我得到的结果是它失败了。另外,我想在colors数组中随机选择一种颜色。

我相信使用它会起作用:

colors = [].sample

colors = ["red", "green", "orange", "yellow", "blue", "purple"]


correct_guesses = ["red","green","orange","yellow"]
total_guesses = 10

print "Enter your guess: "
guess = gets.chomp

if correct_guesses.include?(colors)
  puts "You got it right."
else
  puts "You got it wrong. Guess again."
end

2 个答案:

答案 0 :(得分:2)

你想要的是

if correct_guesses.include?(guess)

通过检查correct_guesses数组中的每个元素,检查您的猜测是否正确。

guess是为您在控制台中键入的值的变量。

这也可行

if correct_guesses.any?{|g| g == guess}

这将检查correct_guesses数组中的任何元素是否等于用户输入的值。

答案 1 :(得分:1)

您基本上要求colors的任何元素都等于对象correct_guesses

所以在纸上看起来像这样:

["red", "green", "orange", "yellow", "blue", "purple"]是否包含数组["red","green","orange","yellow"]

答案是错误的。 colors只是一个包含6个字符串元素的数组。

那么在这种情况下,true会传递什么?如果colors有第二个数组,你可以通过它:

colors = [["red", "green", "orange", "yellow"], "blue", "purple"]

这显然有问题,现在是红色,绿色橙色&黄色全部耦合在一起,我们需要它们在同一组中或创建其他排列以便通过。

那就是说,我想我们都会得到你在这里尝试做的事情。您将此作为"将列表correct_guesses中的任何内容与列表颜色中的任何内容进行匹配"。

这本质上意味着我们需要循环遍历每个数组才能获得结果。

if includes_any?(colors, correct_guesses)
  puts "you are correct"
else
  puts "you got it wrong"
end

然后你只需编写一个函数来进行这样的检查:

def includes_any(colors, correct_guesses)
  correct_guesses.each do |guess|
    return true if colors.include?(guess)
  end
  false
end

此示例与用户输入无关,因为您的原始代码似乎绕过了guess变量,因此我也省略了它。