猜猜红宝石的比赛

时间:2015-03-02 06:38:54

标签: ruby if-statement

我正在尝试创建一个简单的猜谜游戏,在代码中将有一个人必须猜测的三个数字(现在)。如果他/她正确猜出所有数字,那就说:“恭喜,你赢了!”

现在作为一个开始测试,我只是希望用户正确猜出一个数字,代码返回正确或不正确。

random_guess = [1, 3, 5]

puts "Please Pick a number, 1-5"
pick_num = gets.chomp

if pick_num == random_guess = true
    puts "Correct!"
else
    puts "Incorrect!"
end

(我知道这段代码非常初学,我对ruby来说很新。)由于某种原因,每次运行这个程序都会出错。

2 个答案:

答案 0 :(得分:0)

您的if语句错误。它应该是:

if random_guess.include? pick_num.to_i

请注意,如果您不使用to_i,则相等检查将始终失败,因为您将整数3与字符串" 3"进行比较。

只是为了帮助你一点。由于您的最终目标是让用户正确猜出所有数字。你可以循环我上面写的相同的if语句。每次他们猜出一个正确的数字,你可以从数组中删除它,如: random_guess.delete(pick_num.to_i)

一旦数组为空,用户就赢了。

答案 1 :(得分:0)

使random_guess随机:

random_guess = []
3.times{random_guess << rand(1..5)}
random_guess
# => [5, 1, 4] # will be random in every other iteration 

检查号码是否存在,您可以使用indexinclude?

if random_guess.index(pick_num.to_i) # alternatively random_guess.index(pick_num.to_i)
 puts "Correct!"
else
 puts "Incorrect!"
end

为什么您的代码始终打印不正确?

你正在做if pick_num == random_guess = true,这是一个大错。这里实际发生的是:

  • 您要将true分配给random_guess。即无论(数组)random_guess持有什么值,您都会使用true覆盖它。
  • 然后您将random_guesspick_num进行比较。

基本上你是这样做的:

if pick_num == (random_guess = true) # say pick_num = "1"
# "1" == true # which is obviously false.

正确的条件陈述应为:

if pick_num == random_guess

但是每次也会打印false。原因?

  • pick_num是一个字符串。
  • random_guess是一个包含整数值的数组。
  • 您正在比较两种不同的对象类型。所以它总是false

因此,解决此问题的正确方法是检查用户输入的值是否存在于Array中。为此,您可以使用Array#indexArray#include?。因此,我提出的解决方案中的陈述:

if random_guess.index(pick_num.to_i)

注意pick_num.to_ipick_num(一个字符)转换为整数。这是必需的,因为您的数组只包含整数而不包含字符。