我希望这能使我从stats字典中退回9个键,但我却得到27个键。为什么会发生这种情况以及如何获得我试图获得的结果?
import random
def statsGen():
"Will generate an npc's stats"
level = 3
const = random.randint(1, 20)
str = random.randint(1, 20)
dext = random.randint(1, 20)
perc = random.randint(1, 20)
intel = random.randint(1, 20)
will = random.randint(1, 20)
char = random.randint(1, 20)
sp = random.randint(1, 20)
luck = random.randint(1, 20)
stats = {'Const':const,'Str':str,'Dext':dext,'Perc':perc,'Int':intel,'Will':will,'Char':char,'Sp':sp,'Luck':luck}
for level in stats:
stat1 = random.choice(list(stats))
print(stat1)
stat2 = random.choice(list(stats))
print(stat2)
stat3 = random.choice(list(stats))
print(stat3)
statsGen()
答案 0 :(得分:1)
对于每次迭代,您都会打印3个统计信息(stat1,stat2,stat3)。 因此,如果您遍历统计字典(9个循环),则会为您提供27个打印统计。
答案 1 :(得分:1)
您希望由level
而不是stats
控制循环:
for _ in range(level):
name, value = random.choice(stats.items())
print("{} = {}".format(name, value))
但是,不能保证您会获得三个不同统计信息,因为对random.choice
的每次调用都是独立的。而是使用random.sample
:
for name, value in random.sample(stats.items(), level):
print("{} = {}".format(name, value))