-2

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

有谁知道为什么?谢谢!

4

3 回答 3

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
于 2012-08-11T01:21:29.123 回答
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

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

于 2012-08-11T01:23:16.133 回答
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 
于 2012-08-11T01:29:36.520 回答