生成随机数直到某个

时间:2017-09-19 07:24:31

标签: ruby

我正在尝试编写一些代码(使用while循环),它将生成随机数(1到10之间),直到生成数字7。

这是我到目前为止所得到的,但它只是在一个打印1到10之间的随机数的循环中。

num = ""
while num != 7
    print rand(1..10).to_s
end
puts "over"

我理解为什么它会无限循环,但我不确定如何生成随机数,并在7出现时仍然结束循环。

5 个答案:

答案 0 :(得分:2)

有很多方法可以做到,例如:

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

进行比较

答案 1 :(得分:2)

puts (number = rand(1..10)) until number == 7

答案 2 :(得分:0)

试试这个

$num = 0
while $num != 7
    $num = rand(1..10)
    print $num.to_s + "\n"
end
puts "over"

答案 3 :(得分:0)

您必须将 rand 生成的值分配给num变量

$ num = ''
$ while num != 7
$   num = rand(1..10)
$   print num
$ end
$ # 6168510267=> nil

答案 4 :(得分:0)

这段代码的问题在于你生成一个无限循环,因为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

你得到了这个:

[4] pry(main)> 9
9
3
4
9
6
9
8
4
5
9
10
4
3
7
over
=> true