Ruby 简单数组比较逻辑失败

Ruby 简单数组比较逻辑失败,ruby,Ruby,想法很简单:如果输入“红色”、“绿色”、“橙色”或“黄色”,则消息传递 我得到的结果是它失败了。另外,我想在colors数组中随机选择一种颜色 我相信这样做会奏效: colors = [].sample colors = ["red", "green", "orange", "yellow", "blue", "purple"] correct_guesses = ["red","green","orange","yellow"] total_guesses = 10 print "En

想法很简单:如果输入“红色”、“绿色”、“橙色”或“黄色”,则消息传递

我得到的结果是它失败了。另外,我想在
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

你基本上是在问
颜色
的任何元素是否等于对象
正确猜测

所以在纸上看起来是这样的:

colors = [["red", "green", "orange", "yellow"], "blue", "purple"]
[“红色”、“绿色”、“橙色”、“黄色”、“蓝色”、“紫色”]
是否包含数组
[“红色”、“绿色”、“橙色”、“黄色”]

答案是错误的<代码>颜色只是6个字符串元素的一个数组

那么在这种情况下,什么会被认为是
true
?如果
colors
有第二个这样的数组,则可以通过:

colors = [["red", "green", "orange", "yellow"], "blue", "purple"]
这显然是有问题的,现在红色、绿色、橙色和黄色都耦合在一起,我们需要它们在同一组中,或者创建其他排列,以便通过

也就是说,我想我们都明白你在这里要做的事。您这样写是因为“列表中的任何内容
更正猜测
匹配列表颜色中的任何内容”

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

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
变量,所以我也省略了它。

您想说的是

if correct_guesses.include?(guess)
这将通过检查
correct\u guesses
数组中的每个元素来检查您的猜测是否正确

guess
是分配给您在控制台中键入内容值的变量

这也会起作用

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

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

您的
if
测试要检查用户键入的内容,请不要引用包含用户键入内容的
guess
变量……另外,考虑到你的代码,我不认为
colors
实际上是有用的。有什么方法可以清理这个代码吗<代码>如果猜猜==“红色”|猜猜==“绿色”|猜猜==“橙色”|猜猜==“黄色”放在“你猜对了”。其他放在“你搞错了。再猜一次。”结束@user1552815,
如果猜猜==“红色”|猜猜==“绿色”|猜猜==“橙色”|猜猜=“黄色”
“黄色”可以用
颜色重写。有没有?{c | c==guess}
颜色。包括?(guess)