2009-02-17 21 views
0

如何在Python(3.0版)中創建嵌套循環?Python中的嵌套循環有什麼問題?

我試圖讓下面的循環給我看兩個數字的產品:

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 

回答

8

因爲你不內環後設置數字2回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) 

編輯:亞當的解決方案是在一般的好很多,但這是說明爲什麼你的不是工作,你認爲應該把它擺在首位的方式。

+1

@Mike Boers:謝謝你的回答。是的,你的例子清楚地告訴我爲什麼我的代碼不能按我的預期工作。 – 2009-02-17 20:34:55

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) 
+0

@Adam Rosenfield:謝謝你的回答。並感謝您向我展示Pythonic的方式...... – 2009-02-17 20:35:58

0

您可以修改亞當與列表理解的解決方案:

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) 

或一些變體。