Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 生成随机数,直到某个特定值_Ruby - Fatal编程技术网

Ruby 生成随机数,直到某个特定值

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)

我正在尝试编写一些代码(使用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)
    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