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)
。