好吧,一定有人知道比我更简单的方法。我试图用一个相当常见的公式写一个随机数生成器。
--Random Number Generator
local X0=os.time()
local A1=710425941047
local B1=813633012810
local M1=711719770602
local X1=(((A1*X0)+B1)%M1)
local X2=(((A1*X1)+B1)%M1) --then I basically take the vaiable X1 and feed
--it back into itself.
print(X2)
local X3=(((A1*X2)+B1)%M1)
print(X3)
local X4=(((A1*X3)+B1)%M1)
print(X4)
local X5=(((A1*X4)+B1)%M1)
print(X5)
local X6=(((A1*X5)+B1)%M1)
print(X6)
local X7=(((A1*X6)+B1)%M1)
print(X7)
有人知道更快的方法吗?我希望能够将其与以下内容相结合:
for i=1,Number do
local X[loop count]=(((A1*X[Loop count-1])+B1)%M1)
math.randomseed(X[loop count])
local roll=math.random(1,20)
print("You rolled a "..roll)
end
io.read()
字符串的类型。我用它为我在桌面游戏中制作的曲目生成随机数。代码示例:
if trackclass == "S" then
for i=1,S do --Stated earlier that S=25
local roll=math.random(1,5)
local SP=math.random(1,3)
local Count= roll
if Count == 1 then
local Track = "Straightaway"
p(Track.." Of SP "..SP)
else
end
if Count == 2 then
local Track = "Curve"
p(Track.." of SP "..SP)
else
end
if Count == 3 then
local Track = "Hill"
p(Track.." of SP "..SP)
else
end
if Count == 4 then
local Track = "Water"
p(Track.." of SP "..SP)
else
end
if Count == 5 then
local Track = "Jump"
p(Track.." of SP "..SP)
else
end
end
终止
不幸的是,当我使用它时,这似乎生成了一组非常糟糕的随机数分布,我真的希望它能更好地工作。任何可能的帮助来充实变量循环周期将是非常感激的。甚至像调用这样的东西,每次调用math.random(),它都会在X[循环计数]]中添加一个,这样每个生成的数字实际上都是一个更好的伪随机数分布。
请原谅我的半信半疑。我现在的思维不一定井然有序。
有人知道更快的方法吗?
表达式中的每个XN总是前一个X,因此只需重组代码以使用前一个X,而不是创建新的X:
local X = os.time()
local A1 = 710425941047
local B1 = 813633012810
local M1 = 711719770602
function myrandomseed(val)
X = val
end
function myrandom()
X = (A1 * X + B1) % M1
return X
end
现在你可以随心所欲地调用myrandom
:
for i=1,100 do
print(myrandom())
end
为了避免静态作用域,另一种封装方法是将随机数生成器生成为闭包,闭包绑定到它们的状态变量:
function getrandom(seed)
local X = seed or os.time()
local A1 = 710425941047
local B1 = 813633012810
local M1 = 711719770602
return function()
X = (A1 * X + B1) % M1
return X
end
end
现在你调用getAnywhere
来获取给定种子的随机数生成器:
local rand = getrandom()
for i=1,100 do
print(rand())
end
我希望能够按照以下方式将其放入:math.randomseed(X[循环计数])本地卷=math.random(1,20)
如果每次调用random时都调用randomseed,那么根本就没有使用Lua(即C)的随机数生成器。通过查看上面的myrandomseed
,您可以了解为什么这是真的。你为什么一开始就把你的数字输入Lua的random?为什么不直接使用数学呢。随机
,然后用它来完成。
一定要打电话给数学。随机种子一次,而不是每次调用数学。随机你会没事的。
我用它来为我在桌面游戏中制作的轨道片段生成随机数。例如大块代码:
当你看到大量几乎相同的代码时,你应该重构它。当你看到变量名,比如foo1
,foo2
,你要么给变量命名不好,要么应该使用一个列表。在你的例子中,当我们可以使用列表时,你有一堆分支Count==1
,Count==2
,等等。例如,这与代码的作用相同:
local trackTypes = { 'Straightaway', 'Curve', 'Hill', 'Water', 'Jump' }
for i=1,S do
local trackTypeIndex = math.random(1, #trackTypes)
local SP = math.random(1, 3)
p(trackTypes[trackTypeIndex]..' of SP '..SP)
end
请注意,只需读取变量名,就可以猜出什么是trackTypes
。我不知道S
和SP
是什么。它们可能不是好名字。
生成随机数 # random_random.py import random for i in range(5): print('%04.3f' % random.random(), end=' ') print() # random_uniform.py import random for i in range(5): print('{:04.3f}'.format(ran
这个脚本应该以随机生成的延迟滚动浏览网站上的每个容器。对于循环中的每次迭代,我要将ms的“暂停”替换为一个在和秒之间随机生成的数字。 随机数生成器: 就像这样工作很好。在每次迭代之后,会有2秒的暂停。但是,当我移除注释以添加行以随机化每次迭代之间的时间时,值(它应该滚动到哪个容器)一开始很好,但后来也变成随机的。 控制台输出: 我该怎么解决这个?
问题 你需要生成在一定范围内的随机数,但你也需要对发生器进行“生成种子”操作来提供可预测的值。 解决方案 编写你自己的随机数生成器。当然有很多方法可以做到这一点,这里给出一个简单的示例。 该发生器绝对不可以以加密为目的! class Rand # 如果没有种子创建,使用当前时间作为种子 constructor: (@seed) -> # Knuth and Lewis' impro
问题内容: 如何生成(伪)随机字母数字字符串,例如:PHP中的“ d79jd8c”? 问题答案: 首先用所有可能的字符组成一个字符串: 您还可以使用range()更快地完成此操作。 然后,在一个循环中,选择一个随机数并将其用作字符串的索引以获取随机字符,然后将其附加到您的字符串中: 是随机字符串的长度。
random 生成随机数包 文档:https://www.npmjs.com/package/random 安装:npm install --save random 封装代码: app / extend / context.js // 导入 jwt const jwt = require('jsonwebtoken') // 导入随机数包 const random = require('rando
问题 你需要生成在一定范围内的随机数。 解决方案 使用 JavaScript 的 Math.random() 来获得浮点数,满足 0<=X<1.0 。使用乘法和 Math.floor 得到在一定范围内的数字。 probability = Math.random() 0.0 <= probability < 1.0 # => true # 注意百分位数不会达到 100。从 0 到 100 的范围实