Lua随机数生成器总是产生相同的数字

我查阅了几个使用Lua生成随机数的教程,每个教程都说使用math.random(),所以我这样做了。 但是,每次我使用它时,我都得到相同的数字,我尝试重写代码,但我总是得到最小可能的数字。 我甚至包括基于操作系统时间的随机种子。 代码如下。

require "math"
math.randomseed(os.time())
num = math.random(0,10)
print(num)

原文链接 https://stackoverflow.com/questions/52745798

点赞
stackoverflow用户10126088
stackoverflow用户10126088

我正在这样使用随机函数:

math.randomseed(os.time())
num = math.random() and math.random() and math.random() and math.random(0, 10)

这个很有效。另一种选择是改进内置的随机函数,可以在这里中找到说明。

2018-10-11 06:32:25
stackoverflow用户17162144
stackoverflow用户17162144

这可能有帮助!我不得不使用这些函数来编写一个生成 Nano ID 的类。我基本上使用了 os.clock() 函数中的毫秒数,并使用它来设置 math.randomseed()。

NanoId = {
  validCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-",

  generate = function (size, validChars)

    local response = ""
    local ms = string.match(tostring(os.clock()), "%d%.(%d+)")
    local temp = math.randomseed(ms)

    if (size > 0 and string.len(validChars) > 0) then
      for i = 1, size do
        local num = math.random(string.len(validChars))

        response = response..string.sub(validChars, num, num)
      end
    end

    return response
    end
}

function NanoId:Generate()
  return self.generate(21, self.validCharacters)
end

-- 运行测试

for i = 1, 10 do
    print(NanoId:Generate())
end

--[[

输出:

>>> p2r2-WqwvzvoIljKa6qDH
>>> pMoxTET2BrIjYUVXNMDNH
>>> w-nN7J0RVDdN6-R9iv4i-
>>> cfRMzXB4jZmc3quWEkAxj
>>> aFeYCA2kgOx-s4UN02s0s
>>> xegA--_EjEmcDk3Q1zh7K
>>> 6dkVRaNpW4cMwzCPDL3zt
>>> R2Fct5Up5OwnHeExDnqZI
>>> JwnlLZcp8kml-MHUEFAgm
>>> xPr5dULuv48UMaSTzdW5J

]]
2022-06-14 22:37:38