我有以下功能将点数分配给caracters统计数据。:
def randstat(level):
from random import randint
points = randint(10,max(20,5*level))
agility=randint(0,points)
points -= agility
stamina=randint(0,points)
points -=stamina
strength=randint(0,points)
points -=strength
vitality=randint(0,points)
points -=vitality
inteligence=randint(0,points)
points -= inteligence
它可以按照我的预期运作,但是当您在统计列表中查找时,分配的点数会减少,因此inteligence
或vitality
等统计数据的得分远远低于agility
}或stamina
。我怎样才能以随机顺序为每个统计数据分配点数,即,它总是首先分配agility
然后再分配inteligence
?
答案 0 :(得分:1)
这很简单! ;-) 我认为这样代码会更短更清晰。我希望你觉得它很有用。
def randstat(level):
from random import randint
from random import shuffle
points = randint(10,max(20,5*level))
# Values of stats
sValues = []
# Loop as many times as stats
for i in range(5):
sValues.append(randint(0,points))
points -= sValues[-1]
# Reorder randomly the values of stats
shuffle(sValues)
# and assign them to the final variables
agility, stamina, strength, vitality, intelligence = sValues
答案 1 :(得分:1)
我以相反的方式解决这个问题 - 而不是试图用随机数填充每个统计数据,选择随机增加哪个数据并重复。
这将导致更多甚至更多的'统计数据并使角色在最大点处具有一个统计数据而其余部分在零点处不太常见。
def randstat(level):
points = randint(10,max(20,5*level))
# set all our minimums to zero
stats = [0, 0, 0, 0, 0]
for i in range(points):
stat = randint(0, len(stats)-1); # pick a random stat to increment
stats[stat] = stats[stat] + 1
# extract the stats back out of our array
agility = stats[0]
stamina = stats[1]
strength = stats[2]
vitality = stats[3]
intelligence = stats[4]