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



使用 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

有谁知道为什么?谢谢!

您需要在

执行之前初始化内部循环的计数器

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

考虑使用 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 -循环犯错误,但更容易避免您遇到的错误类型)

使用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 

最新更新