Python for loop-为什么我会转到6然后又转到3?

时间:2015-01-06 21:53:18

标签: python for-loop range

请解释循环如何工作。 我知道如何解决这个问题,同时使用while循环和for循环(注释代码)

def decode(string):
    aux = ''
    for i in range(len(string)):
        if(string[i] == '['):
            num = ''
            i+=1
            print(i,"lol")
            while(string[i].isdigit()):
                num+=string[i]
                i+=1
                print(i,'inside')
            aux+= string[i]*int(num)
            i+=1
            print(i)
        #elif string[i].isalpha():
        else:
            print(i,'else')
            aux += string[i]
    return aux

if __name__ == '__main__':
    print(decode("AB[12c]d[2E][4F]g"))

Shell

  • >>> 0其他
  • >>> 1其他
  • >>> 3 lol
  • >>> 4里面
  • >>> 5里面
  • >>> 6
  • >>> 3其他
  • >>> 4其他
  • >>> 5其他
  • >>> 6其他
  • >>> 7其他
  • >>> 9 lol
  • >>>
  • 里面10
  • >>> 11
  • >>> 9其他
  • >>> 10其他
  • >>> 11其他
  • >>> 13 lol
  • >>> 14里面
  • >>> 15
  • >>> 13其他
  • >>> 14其他
  • >>> 15其他
  • >>> 16其他
  • >>> ABcccccccccccc12c] dEE2E] FFFF4F]克

这是怎么回事?谢谢

1 个答案:

答案 0 :(得分:0)

你在范围循环中将完全迭代你传递的字符串长度的次数 ... 你不能通过在i内递增i来使循环更进一步跳跃循环...它与i = 0到i<的情况不同。长度 ...

以这种方式考虑你的输出......

范围内的

第一次迭代为您提供......

  
    
      

0其他

    
  
范围内的

第二次迭代为您提供......

  
    
      

1其他

    
  
范围内的

第三次迭代为您提供......

  
    
      

3 lol       4里面       5里面       6

    
  

第四次迭代 回到3,因为循环是零索引,它是第四次迭代,所以你得到 ...

  
    
      

3其他

    
  

为了使i的循环以不同于1的步长变化,您可以指定范围内的步骤...例如。

for i in range(0,10,2):

总结: 你认为你在循环中对i的操作应该延续到你回到循环顶部时,但它没有,它只是从你最后一次在循环顶部时增加1。 /强>