lua math.random第一个随机数不会重新滚动

时间:2018-05-06 02:53:52

标签: random lua random-seed

所以我是LUA的新手,我正在编写一个简单的猜数字脚本,但是我发现math.random发生了一个奇怪的怪癖,我想了解一下&# 39;发生在这里。

所以我用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 "\nEnter your guess between 1 and 10: "
  guess = io.read()
  if tonumber(guess) ~= random2 then
    print("Try again!")
  end
  print()
until tonumber(guess) == random2
print("Correct!")

1 个答案:

答案 0 :(得分:1)

我猜你是在同一秒内两次调用脚本。 os.time()的分辨率为1秒,即如果您在同一秒内调用该脚本两次,则从相同的种子开始。

  

os.time([table])

     

返回不带参数调用的当前时间,或表示给定表指定的日期和时间的时间。此表格必须包含字段yearmonthday,并且可能包含字段hourminsec和{{1 (有关这些字段的说明,请参阅isdst函数)。

     

返回的值是一个数字,其含义取决于您的系统。在POSIX,Windows和其他一些系统中,此数字计算自某个给定开始时间(“epoch”)以来的秒数。在其他系统中,未指定含义,os.date返回的数字仅可用作timedate的参数。

此外,你正在滚动一个介于1和10之间的数字,所以你有机会击中4(这不是那么小)。

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