Python:我的嵌套循环有什么问题?

时间:2012-08-11 01:18:25

标签: python loops while-loop nested

使用while循环,我编写了一个过程,该过程将整数作为输入,并打印出一个乘法表,显示所有整数乘法,包括输入数。方程式的打印顺序很重要。

例如,print_multiplication_table(2)给出:
1 * 1
1 * 2
2 * 1
2 * 2

这是我的代码:

def print_multiplication_table(n):
    a = 1
    b = 1
    while a <= n:
        while b <= n:
            print str(a) + " * " + str(b)
            b = b + 1
        a = a + 1

然而,这似乎不起作用,因为它只打印出来

1 * 1
1 * 2

有谁知道为什么?谢谢!

3 个答案:

答案 0 :(得分:5)

你需要在执行之前初始化内循环的计数器

def print_multiplication_table(n):
    a = 1
    b = 1 # won't do harm, but doesn't really need now
    while a <= n:
        b = 1 # <-- note
        while b <= n:
            print str(a) + " * " + str(b)
            b = b + 1
        a = a + 1

答案 1 :(得分:3)

考虑使用for代替while

def print_multiplication_table(n):
    for a in range(1, n+1):
        for b in range(1, n+1):
            print str(a) + " * " + str(b)

给出:

1 * 1
1 * 2
2 * 1
2 * 2

使用for会自动跟踪您的计数器变量并避免遇到您遇到的错误类型(这当然并不意味着您不能使for - 循环出错,但它是更容易避免你有的错误类型)

答案 2 :(得分:3)

使用Python理解更容易:

>>> print '\n'.join('{} * {}'.format(a,b) for a in range(1,6) for b in range(1,6))
1 * 1
1 * 2
1 * 3
1 * 4
1 * 5
2 * 1
# etc...

或者,如果您想要终端新线:

>>> gen=('{} * {}'.format(a,b) for a in range(1,6) for b in range(1,6))
>>> print '\n'.join(gen),'\n'

我使用了一个单独的gen表达式,只是为了更清楚地用逗号打印。这也有效:

>>> print '\n'.join('{} * {}'.format(a,b) for a in range(1,6) for b in range(1,6)),'\n'

没有理由在代码中对str进行显式调用。如果不这样做,您仍然可以使用a和b作为整数:

>>> gen=('{} * {} = {:2}'.format(a,b,a*b) for a in range(1,3) for b in range(1,4))
>>> print '\n'.join(gen),'\n'
1 * 1 =  1
1 * 2 =  2
1 * 3 =  3
2 * 1 =  2
2 * 2 =  4
2 * 3 =  6