gpt4 book ai didi

mit-scratch - 为什么随机选择不从头开始选择一些数字?

转载 作者:行者123 更新时间:2023-12-05 00:45:24 34 4
gpt4 key购买 nike

我正在从头开始创建一个迷你家庭游戏,我使用随机选择块在 1 到 27 之间进行选择。我有 27 个背景,上面写着 1 到 27 个数字。但是我注意到在大约 21-22 个数字之后,随机选择器无法选择任何剩余的数字。下面是我的代码的样子 - enter image description here

如何修复此代码以确保它随机选择 1 到 27 之间的所有内容?

最佳答案

您的问题是由于“包含”块的工作方式造成的。很自然地假设它将您给它的值与列表中的每个值进行比较,如果匹配则评估为“真”,如果不匹配则评估为“假”。但不幸的是,这不是它的作用。相反,它将列表视为通过连接列表中的所有元素(用空格分隔每个元素)形成的单个字符串,然后检查您询问的内容是否包含在该字符串中。

如果您运行此代码段,您可以看到这一点:

enter image description here

你会发现你的 Sprite 实际上会说“你好”,即使列表中的任何地方都没有包含“2 3”!

在您的脚本中,这具有排除某些个位数数字的效果,具体取决于选择数字的顺序。例如,号码 1极不可能被选中,因为您可以选择的数字几乎有一半带有数字 1在他们之中。同样 2 .其他数字被排除的机会要低得多,但这是一个非零的机会,至少其中一些数字往往出于同样的原因被排除在外。

换句话说,当您选择了 27 个号码中的大约 20 到 22 个时,剩下的其余号码将被视为已被选中,即使它们没有被选中。

如果你实现了一个适当的“包含”块,你可以让你的脚本工作,像这样:

enter image description here

然后你可以像这样在你的主脚本中使用它:

enter image description here
综上所述,您选择随机数的方法并不理想,因为您必须执行此循环并反复选择和忽略一些数字,并且随着循环的进行越来越多。如果您开始不得不从更大范围的数字中进行选择,这可能会变得非常棘手。

最好实现为适当的“洗牌”。对此有一个标准算法,称为 Fisher-Yates shuffle .本质上,你用你想要选择的所有数字初始化你的列表,从第一个元素开始,选择一个随机的其他元素与该元素交换(你所在的元素可以被选择),交换值,然后移动到下一个元素。在每次迭代中,您只从列表中剩余的元素中挑选一个新元素。

我将在您的 Scratch 程序中实现 Fisher-Yates shuffle 留给您和其他读者。这是一个很好的编程练习。 :)

关于mit-scratch - 为什么随机选择不从头开始选择一些数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57334851/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com