lua - 在 Lua 随机数生成问题
问题描述
我们正在执行任务,接受一个数字作为 的种子值math.randomseed()
,并在循环的每次迭代期间使用生成一个随机整数(区间 [1,6])math.random()
,并继续循环直到数字为 6。
我们为此编写了代码
i = io.read()
local count = 0
math.randomseed(i)
for x = 1, 4 do
value = math.random(1, 6)
print(value)
count = count + 1
end
print(count)
我们未能通过测试,因为
Input (stdin)
Run as Custom Input
0
Your Output (stdout)
3
5
5
6
2
Expected Output
3
5
5
6
4
请帮助我们
解决方案
OP 代码似乎有循环问题。我鼓励 OP 阅读有关Control Structures的 Lua 文档,其中描述了 Lua 的while
,repeat until
和goto
,以及以下有关 Lua 的For Statement的手册部分。如果不了解语言的基本控制结构,就很难用任何语言编写任何程序。
OP问题可以通过多种方式解决。
使用for
-- for version
i = io.read()
math.randomseed(i)
local count
for i = 1, math.huge do
local value = math.random(1, 6)
print(value)
count = i
if value == 6 then break end
end
print(count)
这math.huge
是 Lua 中最大的可表示数字,通常是特殊值inf
,这使得它实际上是一个无限循环。该变量i
跟踪生成了多少随机数,但由于i
在循环之外不可见,因此需要该count
变量来复制 的值,i
以便在最后打印它。
使用while
-- while version
i = io.read()
math.randomseed(i)
local value = math.random(1, 6)
local count = 1
while value < 6 do
print(value)
count = count + 1
value = math.random(1, 6)
end
print(value)
print(count)
这里循环构造以测试开始,因此必须在循环开始之前创建测试值。这意味着count
必须在循环开始之前将 初始化为 1,这也意味着math.random
将重复调用 to。不漂亮。
使用repeat until
-- repeat until version
i = io.read()
math.randomseed(i)
local count = 0
repeat
local value = math.random(1, 6)
print(value)
count = count + 1
until value == 6
print(count)
在这里,测试出现在循环结构的末尾。这允许代码只调用math.random
一次。
使用goto
-- goto version
i = io.read()
math.randomseed(i)
local count = 0
::loop::
local value = math.random(1, 6)
print(value)
count = count + 1
if value < 6 then goto loop end
print(count)
你可能不应该用它goto
来解决这个问题,但你可以。goto
在 Lua 中你必须小心;你不能跳进一个块,跳出一个函数,或者一个局部变量的范围。
如您所见,这些循环结构有一些微妙之处,使用它们需要对细节有一定的了解。
所有四个版本都为相同的输入产生相同的输出:
$ lua loops.lua
42
2
5
3
2
2
4
6
7
推荐阅读
- arrays - 在 react native 中如何使用 json 数据重复相同的渲染 n 次,请毫不犹豫地解释清楚
- postgresql - 左连接的 Postgres SQL 默认值为 NULL
- android - 当应用程序因内存不足而停止时,Android registerForActivityResult ActivityResultCallback 不起作用
- vb.net - 组合框数据源分配抛出异常: System.Windows.Forms.dll 中的“System.InvalidOperationException”
- reactjs - 如何在图表中仅显示轴上的自然数?
- unit-testing - Mockserver 实现失败,连接被拒绝错误
- android - 如何在 Android Studio 4 中禁用 proguard 优化?
- reactjs - 可以在 React 中将“函数”存储/传递给 Redux 存储吗?
- python-3.x - Webscraping-Python 循环卡住了
- amazon-web-services - 跨账户资源访问策略规则是否有效(非承担角色)