我试图创建一个随机生成的“特权分配”从MMO游戏或类似的游戏。你知道吗
规则如下:
到目前为止,我们所拥有的只有:
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)
这有时会起作用,但有时会卡在循环中而不起作用。你知道吗
此代码的正确方法是,每次输出时,它都会打印:
请帮我解决为什么有时会卡在循环中!谢谢您!你知道吗
它有时会陷入循环中,因为您的代码可以生成这样一种情况:所有5个stats都已分配,但
items
仍然不是0。你知道吗例如,如果它一直将3分配给列表中的每个项目,那么我们将得到
const = [3,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
检查也需要是items <= 5
,以便允许将5转储到最终值中。我自己也试过了,好像很管用。你知道吗最终结果:
我没有尝试为您创建一个更有效的答案,而是专注于纠正您现有的解决方案尝试:)
一开始就把最多的点数随机分配到一个容器中,然后再把剩下的填满,这样会更容易些。你知道吗
相关问题 更多 >
编程相关推荐