为什么我的for循环运行的次数超过我指定的次数?

时间:2018-07-18 18:12:32

标签: python python-3.x for-loop

我希望这能使我从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()

2 个答案:

答案 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))