所以我是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!")
答案 0 :(得分:1)
我猜你是在同一秒内两次调用脚本。 os.time()
的分辨率为1秒,即如果您在同一秒内调用该脚本两次,则从相同的种子开始。
os.time([table])
返回不带参数调用的当前时间,或表示给定表指定的日期和时间的时间。此表格必须包含字段
year
,month
和day
,并且可能包含字段hour
,min
,sec
和{{1 (有关这些字段的说明,请参阅isdst
函数)。返回的值是一个数字,其含义取决于您的系统。在POSIX,Windows和其他一些系统中,此数字计算自某个给定开始时间(“epoch”)以来的秒数。在其他系统中,未指定含义,
os.date
返回的数字仅可用作time
和date
的参数。
此外,你正在滚动一个介于1和10之间的数字,所以你有机会击中4(这不是那么小)。
有关种子随机数的更好方法,请查看此处:https://stackoverflow.com/a/31083615