2

while我对Python 2.7 中的循环有一个小问题。

我已经定义了一个程序,print_multiplication_table它以一个正整数作为输入,并打印出一个乘法表,显示所有整数乘法直到并包括输入数。

这是我的print_multiplication_table功能:

def print_multiplication_table(n):
    count =  1
    count2 = 1
    result = count * count2
    print 'New number: ' + str(n) 
    while count != n and count2 != n:
        result = count * count2
        print str(count) + " * " + str(count2) + " = " + str(result)
        if count2 == n:
            count += 1
            count2 = 1
        else:
            count2 += 1

这是一个预期的输出:

>>>print_multiplication_table(2)
new number: 2
1 * 1 = 1
1 * 2 = 2
2 * 1 = 2
2 * 2 = 4

>>>print_multiplication_table(3)
new number: 3
1 * 1 = 1
1 * 2 = 2
1 * 3 = 3
2 * 1 = 2
2 * 2 = 4
2 * 3 = 6
3 * 1 = 3
3 * 2 = 6
3 * 3 = 9

一切正常,直到我添加我的while循环:

while count != n and count2 != n:

现在我的输出如下所示:

>>>print_multiplication_table(2)
New number: 2
1 * 1 = 1
>>>print_multiplication_table(3)
New number: 3
1 * 1 = 1
1 * 2 = 2

我做错了什么,我该如何解决?

谢谢。

4

3 回答 3

3

将您的while循环更改为:

while count <= n and count2 <= n:
于 2013-08-15T15:06:02.230 回答
2
import itertools
def print_multiplication_table(n):
    nums = range(1,n+1)
    operands = itertools.product(nums,nums)
    for a,b in operands:
        print '%s * %s = %s' % (a,b,a*b)

print_multiplication_table(3)

给出:

1 * 1 = 1
1 * 2 = 2
1 * 3 = 3
2 * 1 = 2
2 * 2 = 4
2 * 3 = 6
3 * 1 = 3
3 * 2 = 6
3 * 3 = 9

range生成单个操作数;product生成笛卡尔积,并且%是将值替换为字符串的运算符。

n+1是范围如何工作的工件。做help(range)看看解释。

一般来说,在 python 中,最好使用丰富的特征集来构建序列来创建正确的序列,然后使用一个相对简单的循环来处理这样生成的数据。即使循环体需要复杂的处理,如果你注意先生成正确的序列,它会更简单。

我还要补充while一点,如果有明确的迭代顺序,那是错误的。


我想通过概括上面的代码来证明这是一种更好的方法。你将很难用你的代码做到这一点:

import itertools
import operator
def print_multiplication_table(n,dimensions=2):
    operands = itertools.product(*((range(1,n+1),)*dimensions))
    template = ' * '.join(('%s',)*dimensions)+' = %s'
    for nums in operands:
        print template % (nums + (reduce(operator.mul,nums),))

(这里是ideone:http: //ideone.com/cYUSrL

您的代码需要为每个维度引入一个变量,这意味着一个列表或字典来跟踪这些值(因为您不能动态创建变量),以及一个内部循环来执行每个列表项。

于 2013-08-15T21:45:10.663 回答
-1

尝试

def mult_table(n):
    for outer_loop_idx in range(1,n+1):
        for inner_loop_idx in range(1,n+1):
            print("%s + %s = %s" % (outer_loop_idx,inner_loop_idx,outer_loop_idx*inner_loop_idx)

在迭代工作的地方经常使用时,你看不到。这段代码在编辑器窗口中看起来很棒......

于 2013-08-15T18:36:15.227 回答