我正在尝试创建一个简单的猜谜游戏,在代码中将有一个人必须猜测的三个数字(现在)。如果他/她正确猜出所有数字,那就说:“恭喜,你赢了!”
现在作为一个开始测试,我只是希望用户正确猜出一个数字,代码返回正确或不正确。
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来说很新。)由于某种原因,每次运行这个程序都会出错。
答案 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
检查号码是否存在,您可以使用index
或include?
:
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_guess
与pick_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#index或Array#include?。因此,我提出的解决方案中的陈述:
if random_guess.index(pick_num.to_i)
注意:pick_num.to_i
将pick_num
(一个字符)转换为整数。这是必需的,因为您的数组只包含整数而不包含字符。