Skip to main content
 首页 » 编程设计

python之无法使用 Python 产生正确的值

2025年05月04日11qq78292959

从我的角度来看,我经历了一些奇怪的事情

我需要像这样交替生成 True 和 False 值:

False, True, False, False, True, True, False, False, False, True, True, True, False, False, False, False, True, True, True, True, ... 

我需要得到一个 False,一个 True,然后两个 False,两个 True,然后三个False,三个True等

在我看来,在函数中使用 yield 关键字是实现此目标的好方法:

def generateFalseTrueRangesAlternatively(limit): 
    limitForChange = 0 
    index = 0 
    rv = True 
    for i in range(0, limit): 
        if index == limitForChange: 
            rv = not rv  
            index = 0 
            if not rv: 
                limitForChange += 1 
        index += 1 
        yield rv 
 
for i in range(0,4): 
    g =  generateFalseTrueRangesAlternatively(20) 
    print(next(g)) 

但我只得到 False 值:

False 
False 
False 
False 

作为解决方法,我编写了以下代码,它生成了一个列表:

def generateFalseTrueRangesAlternativelyList(limit): 
    limitForChange = 1 
    index = 0 
    rv = False 
    out = [] 
    for i in range(0, limit): 
        if index == limitForChange: 
            rv = not rv  
            index = 0 
            if not rv: 
                limitForChange += 1 
        index += 1 
        out.append(rv) 
    return out 
l = generateFalseTrueRangesAlternativelyInList(6) 
for i in range (0,6): 
    print(l[i]) 

哪些输出:

False 
True 
False 
False 
True 
True 

问题

我的 generateFalseTrueRangesAlternatively 函数有什么问题?

如何修改它使其表现得像 generateFalseTrueRangesAlternativelyInList 但不创建列表?

yield 用法有什么我不明白的吗?

实际上,我的好奇心需要通过回答这个基本问题来满足:为什么?

(我的 Python 版本:3.5.4)

请您参考如下方法:

你的代码没问题;生成器的用法是错误的。

只是迭代它:

for i in generateFalseTrueRangesAlternatively(20): 
    print(i)