你能用for循环在Python中实现一个哨兵控制的循环吗?

时间:2015-03-13 05:04:39

标签: python

我不太确定是否可能有其他重复,但问题是根据主题。

这个问题的目的不是要弄清楚你是否应该使用for循环来实现哨兵控制。

而是看看它是否可以完成,从而更好地理解forwhile循环之间的区别。

2 个答案:

答案 0 :(得分:1)

使用itertools可能:

>>> import itertools
>>>
>>> SENTINEL = 0
>>> for i in itertools.count():
....:    if SENTINEL >= 10:
....:        print "Sentinel value encountered! Breaking..."
....:        break
....:    
....:    SENTINEL = SENTINEL + 1
....:    print "Incrementing the sentinel value..."
....: 
Incrementing the sentinel value...
Incrementing the sentinel value...
Incrementing the sentinel value...
Incrementing the sentinel value...
Incrementing the sentinel value...
Incrementing the sentinel value...
Incrementing the sentinel value...
Incrementing the sentinel value...
Incrementing the sentinel value...
Incrementing the sentinel value...
Sentinel value encountered! Breaking...

(灵感来自堆栈溢出问题“Looping from 1 to infinity in Python”。)

答案 1 :(得分:0)

不导入任何模块,你也可以做一个" sentinel"通过将循环设置为无穷大来控制循环for,使用break设置condition

infinity = [0]
sentinelValue = 1000
for i in infinity:
    if i == sentinelValue:
        break

    # like a dog chasing the tail, we move the tail...
    infinity.append(i+1)

    print('Looped', i, 'times')

print('Sentinel value reached')

虽然这会创建一个非常大的无限列表,但却会占用内存。