Ruby 生成随机数,直到某个特定值
我正在尝试编写一些代码(使用while循环)来生成随机数(介于1和10之间),直到生成数字7为止 这是我到目前为止得到的,但它只是陷入了打印1到10之间的随机数的循环中Ruby 生成随机数,直到某个特定值,ruby,Ruby,我正在尝试编写一些代码(使用while循环)来生成随机数(介于1和10之间),直到生成数字7为止 这是我到目前为止得到的,但它只是陷入了打印1到10之间的随机数的循环中 num = "" while num != 7 print rand(1..10).to_s end puts "over" 我理解它为什么会无休止地循环,但我不确定如何生成随机数,并在出现7时仍然结束循环。试试这个 $num = 0 while $num != 7 $num = rand(1..10)
num = ""
while num != 7
print rand(1..10).to_s
end
puts "over"
我理解它为什么会无休止地循环,但我不确定如何生成随机数,并在出现7时仍然结束循环。试试这个
$num = 0
while $num != 7
$num = rand(1..10)
print $num.to_s + "\n"
end
puts "over"
试试这个
$num = 0
while $num != 7
$num = rand(1..10)
print $num.to_s + "\n"
end
puts "over"
您必须将生成的值赋值到num变量中
$ num = ''
$ while num != 7
$ num = rand(1..10)
$ print num
$ end
$ # 6168510267=> nil
您必须将生成的值赋值到num变量中
$ num = ''
$ while num != 7
$ num = rand(1..10)
$ print num
$ end
$ # 6168510267=> nil
有很多方法可以做到这一点,例如:
loop do
num = rand(1..10)
print num
break if num == 7
end
此外,要使代码正常工作,请执行以下操作:
num = ""
while num != '7'
num = rand(1..10).to_s
print num
end
puts "over"
原因在于,您可以将
num
转换为字符串,并将其与integer
进行比较,方法有很多,例如:
loop do
num = rand(1..10)
print num
break if num == 7
end
puts (number = rand(1..10)) until number == 7
此外,要使代码正常工作,请执行以下操作:
num = ""
while num != '7'
num = rand(1..10).to_s
print num
end
puts "over"
原因在于您将
num
转换为string,并将其与integer
进行比较。此代码的问题在于您生成了一个无限循环,因为num始终是“”,您需要更新while循环中的变量num,如下所示:
puts (number = rand(1..10)) until number == 7
num = ""
while num != 7
num = rand(1..10)
puts num
end
puts "over"
在这种情况下,您不知道循环何时停止,但在每个循环中,它可以以1/10的概率停止,这不是一个好的做法,您需要知道循环何时停止,因此最好添加一个变量,以获得像这样的最大尝试次数。而且您不需要将数字转换为字符串来打印:
num = 0
max_tries = 100
try = 1
guess = 7
while (try < max_tries && num != guess)
num = rand(1..10)
try = try + 1
puts num
end
if (try >= max_tries)
puts "you do not get the guess"
else
puts "over"
end
此代码的问题是,由于num始终为“”,因此生成了一个无限循环,您需要更新while循环中的变量num,如下所示:
num = ""
while num != 7
num = rand(1..10)
puts num
end
puts "over"
在这种情况下,您不知道循环何时停止,但在每个循环中,它可以以1/10的概率停止,这不是一个好的做法,您需要知道循环何时停止,因此最好添加一个变量,以获得像这样的最大尝试次数。而且您不需要将数字转换为字符串来打印:
num = 0
max_tries = 100
try = 1
guess = 7
while (try < max_tries && num != guess)
num = rand(1..10)
try = try + 1
puts num
end
if (try >= max_tries)
puts "you do not get the guess"
else
puts "over"
end
您应该预先定义
编号
,在这种情况下:)@AlexGolubenko,修复:)to_i
是多余的。将OP的要求“直到数字7”表示为直到数字==7
;-)可能更简洁您应该预先定义编号
,在这种情况下:)@AlexGolubenko,修复:)to_i
是多余的。将OP的要求“直到数字7”表示为直到数字==7
;-)可能更简洁“我理解它为什么循环没有结束”-你认为它为什么没有结束?我理解它为什么循环没有结束”-你认为它为什么没有结束?谢谢你在那里增加的课程。在这方面有很多好的答案,但我喜欢你额外添加的一点。你得到答案了。你不应该在某个地方尝试一下吗?对不起,我忘了更新,在每个循环过程中都尝试一下,谢谢@stefan谢谢这里增加的课程。在这方面有很多好的答案,但我喜欢你额外添加的一点。你得到答案了。你不应该在某个地方尝试一下吗?对不起,我忘了更新,在每个循环中尝试一下,谢谢@Stefan