回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>从我的角度来看,我经历了一些奇怪的事情</p>
<p>我需要交替生成<code>True</code>和<code>False</code>值,如下所示:</p>
<pre><code>False, True, False, False, True, True, False, False, False, True, True, True, False, False, False, False, True, True, True, True, ...
</code></pre>
<p>我需要得到一个<code>False</code>,一个<code>True</code>,然后是两个<code>False</code>,两个<code>True</code>,然后是三个<code>False</code>,三个<code>True</code>,等等</p>
<p>在我看来,在函数中使用<code>yield</code>关键字是实现这一点的好方法:</p>
<pre><code>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))
</code></pre>
<p>但我只得到<code>False</code>值:</p>
<pre><code>False
False
False
False
</code></pre>
<p>作为解决方法,我编写了以下代码,生成一个列表:</p>
<pre><code>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])
</code></pre>
<p>输出:</p>
<pre><code>False
True
False
False
True
True
</code></pre>
<p><strong>问题</p>
<p>我的<code>generateFalseTrueRangesAlternatively</code>函数有什么问题?你知道吗</p>
<p>如果不创建一个列表,它怎么能被修改成<code>generateFalseTrueRangesAlternativelyInList</code>的样子呢?你知道吗</p>
<p>在<code>yield</code>用法上有什么我不懂的吗?你知道吗</p>
<p>实际上,我的好奇心需要通过回答这个基本问题来满足:为什么?你知道吗</p>
<p>(我的Python版本:3.5.4)</p>