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

Python中的嵌套循环有什么问题?,python,loops,nested,Python,Loops,Nested,如何在Python(3.0版)中生成嵌套循环 我试图通过以下循环向我展示两个数字的乘积: def PrintProductsBelowNumber(number): number1 = 1 number2 = 1 while number1 <= number: while number2 <= number: print(number1, "*", number2, "=", number1 * number2)

如何在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 = 1
1 * 2 = 2
2 * 1 = 2
2 * 2 = 4

因为在第一次完成内部循环后,您不会将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)
def PrintProductsBelowNumber(编号):
数字1=1

虽然number1
number2
只初始化一次,但您需要为内部循环的每次迭代重新初始化它。然而,这段代码非常类似于C,并且不是很像Python。更好的方法是对范围(n)中的数字使用
构造:

def PrintProductsBelowNumber(number):
    for number1 in range(1, number+1):
        for number2 in range(1, number+1):
            print(number1, "*", number2, "=", number1 * number2)

您可以使用列表修改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)

或者是它的一些变体。

@Mike Boers:谢谢你的回答。是的,你的例子清楚地告诉我为什么我的代码没有像我预期的那样工作。@Adam Rosenfield:谢谢你的回答;谢谢你给我展示了蟒蛇的方式。。。
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)