【问题标题】:What is wrong with my nested loops in Python?我在 Python 中的嵌套循环有什么问题?
【发布时间】:2009-02-17 20:19:26
【问题描述】:

如何在 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

【问题讨论】:

    标签: python loops nested


    【解决方案1】:

    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)
    

    【讨论】:

    • @Adam Rosenfield:感谢您的回答;并感谢您向我展示 Pythonic 方式...
    【解决方案2】:

    因为您没有在内循环第一次完成后将 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)
    

    编辑:Adam 的解决方案总体上要好得多,但这是为了说明为什么您的解决方案没有按照您最初认为的方式工作。

    【讨论】:

    • @Mike Boers:感谢您的回答。是的,您的示例清楚地向我展示了为什么我的代码没有按预期工作。
    【解决方案3】:

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

    或其一些变体。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-09
      • 1970-01-01
      • 2017-09-20
      • 1970-01-01
      • 2016-05-05
      • 1970-01-01
      相关资源
      最近更新 更多