lua math.random 生成的第一个随机数不会重复[/b]

我是LUA的新手,正在编写一个简单的猜数字脚本,但我发现我使用math.random时有一个奇怪的问题,我想了解这里发生了什么。

所以我使用math.randomseed(os.time())生成一个随机种子,但当我想要获取一个随机数字时,像这样:

correctNum = math.random(10) print(correctNum),

每次运行它,它总是得到相同的随机数字,除非我做两次(无论给定的参数是什么):

random1 = math.random(10) print(random1) random2 = math.random(10) print(random2),

在这种情况下,第一个随机数将永远不会在每次执行时重复,但第二个随机数会重复。

只是对LUA中随机化的工作方式感到困惑,希望得到一些帮助。

谢谢,

  • Electroshockist

下面是完整的工作代码:

math.randomseed(os.time())
random1 = math.random(10)
print(random1)

random2 = math.random(10)
print(random2)

repeat
  io.write "\n在1和10之间输入您的猜测:"
  guess = io.read()
  if tonumber(guess) ~= random2 then
    print("再试一次!")
  end
  print()
until tonumber(guess) == random2
print("正确!")
点赞
用户1944004
用户1944004

我猜你在同一秒内调用了脚本两次。 os.time()的分辨率是一秒钟,即在同一秒内调用脚本两次,则使用相同的种子开始。

os.time([table])

当没有参数调用时,返回当前时间,或返回给定表格指定日期和时间的时间。此表必须具有yearmonthday字段,并且可以具有hourminsecisdst字段(有关这些字段的描述,请参见os.date功能)。

返回的值是一个数字,其含义取决于您的系统。在POSIX,Windows和某些其他系统中,此数字计算自某个给定的起始时间(“时代”)以来的秒数。在其他系统中,意义未指定,并且 time返回的数字仅可用作datedifftime的参数。

此外,您正在从1到10之间滚动数字,因此您会有0.1的机会命中4(这并不小)。

有关更好的生成随机数的方法,请查看此处:https://stackoverflow.com/a/31083615

2018-05-06 03:08:06