0

如何在 Python(3.0 版)中创建嵌套循环?

我试图让以下循环向我展示两个数字的乘积:

def PrintProductsBelowNumber(number):
    number1 = 1
    number2 = 1
    while number1 <= number:
        while number2 <= number:
            print(number1, "*", number2, "=", number1 * number2)
            number2 += 1
        number1 += 1

PrintProductsBelowNumber(2)

结果我得到:

1 * 1 = 1
1 * 2 = 2

所以看起来 number1 的外循环没有运行。

如何让 number1 上的循环运行,从而获得:

1 * 1 = 1
1 * 2 = 2
2 * 1 = 2
2 * 2 = 4
4

3 回答 3

14

number2只初始化一次,您需要为内部循环的每次迭代重新初始化它。但是,此代码非常类似于 C,而不是 Pythonic。更好的方法是使用for number in range(n)构造:

def PrintProductsBelowNumber(number):
    for number1 in range(1, number+1):
        for number2 in range(1, number+1):
            print(number1, "*", number2, "=", number1 * number2)
于 2009-02-17T20:22:58.470 回答
8

因为您没有在内循环第一次完成后将 number2 设置回 1 。number1 然后递增,但由于 number2 仍然太高,内部循环不会再次运行。

def PrintProductsBelowNumber(number):
    number1 = 1
    while number1 <= number:
        number2 = 1
        while number2 <= number:
            print(number1, "*", number2, "=", number1 * number2)
            number2 += 1
        number1 += 1

PrintProductsBelowNumber(2)

编辑:一般来说,亚当的解决方案要好得多,但这是为了说明为什么你的解决方案没有按照你最初认为的方式工作。

于 2009-02-17T20:22:32.310 回答
0

您可以使用列表理解来修改 Adam 的解决方案:

def PrintProductsBelowNumber(number):

    results = [(i, j, i * j) for i in range(1, number + 1) 
                             for j in range(1, number + 1)]

    for number1, number2, result in results:
        print(number1, "*", number2, "=", result)

或其一些变体。

于 2009-02-17T21:54:59.387 回答