Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么for循环的运行次数比我指定的要多?_Python_Python 3.x_For Loop - Fatal编程技术网

Python 为什么for循环的运行次数比我指定的要多?

Python 为什么for循环的运行次数比我指定的要多?,python,python-3.x,for-loop,Python,Python 3.x,For Loop,我希望这能让我从统计字典中得到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 = rand

我希望这能让我从统计字典中得到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()

对于每个迭代,您打印3个统计信息(stat1、stat2、stat3)。
因此,如果您迭代统计词汇表(9个循环),它将为您提供27个打印的统计信息。

您希望循环由
级别控制,而不是
统计信息控制:

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

在for循环中有3个Print语句,3*9=27我假设“还我”是指“Print”?为什么你希望它打印9个统计数据<代码>对于统计中的级别
将循环9次,并且在每次迭代中有3次打印。9*3==27。如果您希望每个级别循环一次,请对范围(0,级别)中的l使用
是的,通过“返回我”我的意思是打印,很抱歉是新的。我不明白为什么它会给我27次,因为我相信for循环会运行三次,每个循环打印三次。我没有意识到从统计字典中的键数循环需要花费大量的时间。谢谢。我计划使用一个if语句来测试该键是否与循环中以前的键不同,我不知道random.sample。我感谢你的帮助,如果我的问题令人讨厌,我很抱歉