python中for循环如何实现每次控制变量翻倍

新手上路,请多包涵

我想实现在c++/java语言中类似这样的循环体:

for(auto i = 0; i < N; i += i) {
    //do something;
}

但是我在python中尝试这样实现:

for i in range(0, N, i)
    #do something

解释器提醒我

undefined name 'i'
阅读 7.5k
2 个回答

想了下,先写两个.

你这样循环初始i值不能为0.

""" 1、使用While循环 """
i = 1
N = 50
while True:
    # do something
    print("i = ", i)
    i += i
    if i >= N:
        break


""" 2、使用生成器 """
def gen(i, N):
    for index in range(i,N+1):
        # 因为是从0开始,所以这里要加1,可以根据需求进行修改
        if index == i:
            yield index
            i += i
            
def gen2(i, N):
    while True:
        if i > N:
            break
        yield i
        i += i

# gen 和 gen2 都是一样的,写法不同而已

# i 和 N 为 1 和 10
for index in gen(1, 10):
    # do something
    print(index)

# i 和 N 为 3 和 50
for index in gen2(3, 50):
    # do something
    print(index)

第一种用了While True死循环,循环里做判断逻辑跳出循环.

第二种使用了生成器,这样写其实也挺好的,我比较喜欢第二种,看着比较好看.

两种的思路都是一样的,写法不同而已.

其他的实现再说吧,我觉得够用了.

for i in(2**e for e in range(N)):
    print(i)
    # do something
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题