为什么是itertools.islice公司当我输入10作为停止参数时,只返回一个值?

2024-05-28 19:32:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我想写一个程序,可以打印10个随机骰子卷。这是我的密码:

import itertools
from random import randint

def gen_rndtup(n):
    a = randint(1,n-1)
    b = randint(1, n-2)
    yield (a, b)

if __name__=='__main__':
    n = 7
    dice_roll = itertools.islice(gen_rndtup(n), 10)
    print(list(dice_roll))

这是我得到的输出:[(4, 2)](很明显,由于随机数生成器,每次的数字都不同)。你知道吗

根据我在the documentation中读到的内容,itertools.islice(gen_rndtup(n), 10)应该返回由gen_rndtup(n)生成的前10个元组,那么为什么它只返回一个呢?你知道吗


Tags: fromimport程序密码defrandom骰子dice
2条回答

因为gen_rndtup只产生一个元组。如果您想gen_rndtup给您多个值,您需要它yield多次(通过使用多个yield语句或将yield放入某种循环)。你知道吗

生成器生成一个结果,然后停止生成结果。你知道吗

def gen_rndtup(n):
    a = randint(1,n-1)
    b = randint(1, n-2)
    while True:
        yield (a, b)

将产生你所期望的结果

相关问题 更多 >

    热门问题