PythonMMO生成与管理;分布
我试图从MMO游戏或类似游戏中创建一个随机生成的“特权分配” 规则如下:PythonMMO生成与管理;分布,python,random,containers,Python,Random,Containers,我试图从MMO游戏或类似游戏中创建一个随机生成的“特权分配” 规则如下: 一个容器中必须有5个,并且只能有1个容器中有5个 所有20分都必须分配 点必须由RNG分配(使用随机) 到目前为止,我们所拥有的只是: import random # Variables cont = [0, 0, 0, 0, 0] items = 20 maxNum = 5 # Start our first loop i = 0 while items != 0: i = 0 while i &
- 一个容器中必须有5个,并且只能有1个容器中有5个
- 所有20分都必须分配
- 点必须由RNG分配(使用随机)
import random
# Variables
cont = [0, 0, 0, 0, 0]
items = 20
maxNum = 5
# Start our first loop
i = 0
while items != 0:
i = 0
while i < len(cont) - 1:
num1 = random.randint(3, maxNum)
if items < 5:
if cont[i] = 00:
cont[i] += items
items = 0
break
cont[i] = num1
if cont[i] == 5:
maxNum = 4
i += 1
items = items - num1
print(items)
print(cont)
随机导入
#变数
cont=[0,0,0,0,0]
项目=20
maxNum=5
#开始我们的第一个循环
i=0
而项目!=0:
i=0
而i
这有时会起作用,但有时它会陷入循环中而不起作用
此代码的正确方式是,每次输出时,它都会打印:
- [5,4,4,3]
- [4,4,4,4,4]
- [5,4,3,4,4]
- 等等
请帮我解决为什么有时它会卡在循环中!谢谢大家! 在开始时,只需将最大点数随机分配到一个容器中,然后再填充剩余的点数,这将更容易
from random import randint
def assign(num_containers, container_max, max_points):
containers = [0]*num_containers
full_container = randint(0, num_containers-1)
containers[full_container] = container_max
assigned = container_max
while assigned < max_points:
cont = randint(0, num_containers-1)
if cont is not full_container and containers[cont] < container_max - 1:
containers[cont] += 1
assigned += 1
return containers
来自随机导入randint
def分配(容器数、容器最大值、最大点数):
容器=[0]*num_容器
完整容器=randint(0,数量容器-1)
容器[满容器]=容器最大值
分配=容器的最大值
分配
它有时会陷入循环,因为您的代码可能会生成一种情况,即所有5个统计数据都已分配,但项仍然不是0
e、 例如,如果它一直将3分配给列表中的每个项目,那么我们将得到const=[3,3,3,3]
,而items=5
。即使在const=[5,4,4,4,0]
的情况下,我们在随机数上滚动一个4,即使你捕捉到items<5
的情况,并将剩余值转储到最后一个stat中,在下一行使用cont[i]=num1
时,更改也会被覆盖
因此,首先,cont[i]=num1
的赋值需要在else语句中。还有,我读这篇文章的方式,唯一的可能是所有的值都是4,或者一个值是5,一个值是3,其余的都是4。你会发现只有一个5,但反过来也只有一个3,否则不可能加起来都是20。因此,为minNum
添加一个catch,就像为maxNum
添加catch一样。此外,您实际上不需要外循环,因为我们的逻辑现在确保最终值为20。items<5
检查也需要是您所说的“有时”有效的项。这表明,随机语句有时会生成一个导致错误的数字。尝试在每次生成“num1”时打印它,查看循环是否总是从相同的数字失败。如果你没有自己解决问题,请将结果编辑到你的答案中。你所说的循环“卡住”是什么意思?它会崩溃吗?如果是这样的话,请将完整的错误跟踪发回。@Gloin我们已经这样做了,结果是它创建了一个比项目大的数字,减去了更大的数字,并使其变成负数并无限重复。为什么要将cont[i]=items赋值,然后cont[i]=num1?第一条语句总是被第二条语句覆盖,我不知道这段代码“有时”是如何工作的。当前代码段每行只打印20个,没有结尾。
import random
# Variables
cont = [0, 0, 0, 0, 0]
items = 20
maxNum = 5
minNum = 3
# Start our first loop
i = 0
while i < len(cont):
num1 = random.randint(minNum, maxNum)
if items <= 5:
cont[i] = items
else:
cont[i] = num1
if cont[i] == 5:
maxNum = 4
if cont[i] == 3:
minNum = 4
items -= cont[i]
i += 1
print(cont)