为什么只有这些嵌套while循环的最里面工作?

PeP*_*ePe 3 python while-loop

我是Python的新手.我有这个简单的代码

a = 0
b = 0
c = 0

while a <= 5:
    while b <=3:
        while c <= 8:
            print a , b , c
            c += 1
        b += 1
    a += 1
Run Code Online (Sandbox Code Playgroud)

和C一起工作

0 0 0
0 0 1
0 0 2
0 0 3
0 0 4
0 0 5
0 0 6
0 0 7
0 0 8
Run Code Online (Sandbox Code Playgroud)

为什么?怎么解决?谢谢!

Li-*_*Yip 7

第一种方式

你的方式可行,但你必须记住在每次迭代时重置循环计数器.

a = 0
b = 0
c = 0

while a <= 5:
    while b <=3:
        while c <= 8:
            print a , b , c
            c += 1
        b += 1
        c = 0 # reset
    a += 1
    b = 0 # reset
    c = 0 # reset
Run Code Online (Sandbox Code Playgroud)

第二种方式(Pythonic)

第一种方式涉及大量簿记.在Python中,在一系列数字上指定循环的更简单方法是forxrange*迭代器上使用循环:

for a in xrange(5+1): # Note xrange(n) produces 0,1,2...(n-1) and does not include n.
    for b in xrange (3+1):
        for c in xrange (8+1):
            print a,b,c
Run Code Online (Sandbox Code Playgroud)
  • 注意:在Python 3中,xrange现在调用range.(或者更准确地说,Python 3 range取代了Python 2.x rangexrange.)

第三种方式(最好的)

第二种方式可以通过应用来简化itertools.product(),其中包含许多可迭代(列表)并返回每个列表中每个元素的每个可能组合.

import itertools
for a,b,c in itertools.product(xrange(5+1),xrange(3+1),xrange(8+1)):
    print a,b,c
Run Code Online (Sandbox Code Playgroud)

对于这些技巧和更多,请阅读Dan Goodger的"Code like a Pythonista:Idiomatic Python".

  • 它总是与你的人一起挑剔,不是吗?!:)(编辑注释.) (2认同)

Ign*_*ams 6

你忘了复位bc在循环的顶部ab分别.这就是我们使用for循环的原因.