2012-08-11 88 views
-2

使用while循環,我編寫了一個程序,該程序將一個正整數作爲輸入,並打印出一個乘法表,其中顯示了所有整數乘法運算(包括輸入數字)。等式的打印順序。Python:我的嵌套循環出了什麼問題?

例如,print_multiplication_table(2)給出:
1 * 1
1 * 2
2 * 1
2 * 2

這是我的代碼:

def print_multiplication_table(n): 
    a = 1 
    b = 1 
    while a <= n: 
     while b <= n: 
      print str(a) + " * " + str(b) 
      b = b + 1 
     a = a + 1 

但是,這似乎不工作,因爲它只打印出

1 * 1 
1 * 2 

有誰知道爲什麼?謝謝!

+1

是不是有一個原因,你正在使用'while'而不是'for'在這裏看起來更合適。此外,您的縮進仍然有點關閉 - 函數的主體應該縮進。 – Levon 2012-08-11 01:20:52

+1

請考慮回到過去寫過的一些問題,並將幫助你解決問題的答案標記爲「答案」。 – 2012-08-11 01:24:28

+0

我很想標記他們,但我沒有看到任何我可以標記的地方..我太小白菜請告訴我 – 2012-08-11 01:28:14

回答

5

您需要執行之前初始化爲內環計數器

def print_multiplication_table(n): 
    a = 1 
    b = 1 # won't do harm, but doesn't really need now 
    while a <= n: 
     b = 1 # <-- note 
     while b <= n: 
      print str(a) + " * " + str(b) 
      b = b + 1 
     a = a + 1 
+1

我很樂意幫忙! :) – 2012-08-11 01:24:47

+0

但是,在我的代碼中,即使我沒有初始化循環內部的b,仍然會打印出1 * 1和1 * 2 ....並且唯一不起作用的是值a,這已經被啓動......任何人都可以解釋我爲什麼? – 2012-08-11 01:26:07

+1

_outer_循環的第一次迭代正常工作:執行_inner_循環。但是,在內部循環執行後,_outer_循環的第二次迭代不會重新初始化等於'n + 1'的'b'。所以內部循環沒有執行(因爲守護條件'b <= n'爲false) – 2012-08-11 01:29:58

3

考慮地方使用forwhile

def print_multiplication_table(n): 
    for a in range(1, n+1): 
     for b in range(1, n+1): 
      print str(a) + " * " + str(b) 

這給:

1 * 1 
1 * 2 
2 * 1 
2 * 2 

使用for會自動跟蹤你的計數器變量,並避免你遇到的錯誤類型(這當然並不意味着你不能用for -loops錯誤,但它更容易避免你有的錯誤類型)

+0

+1:顯然我們在想同一個;} – dawg 2012-08-11 01:35:28

+0

@drewk這一切都很好.. – Levon 2012-08-11 01:36:04

3

更容易與一個Python的理解:

>>> print '\n'.join('{} * {}'.format(a,b) for a in range(1,6) for b in range(1,6)) 
1 * 1 
1 * 2 
1 * 3 
1 * 4 
1 * 5 
2 * 1 
# etc... 

或者,如果你想在終端新行:

>>> gen=('{} * {}'.format(a,b) for a in range(1,6) for b in range(1,6)) 
>>> print '\n'.join(gen),'\n' 

我使用一個單獨的根表達只是爲了更多與逗號打印清晰。這也適用:

>>> print '\n'.join('{} * {}'.format(a,b) for a in range(1,6) for b in range(1,6)),'\n' 

沒有理由在代碼中對str進行明確調用。如果你不這樣做,你仍然可以使用a和b作爲整數:

>>> gen=('{} * {} = {:2}'.format(a,b,a*b) for a in range(1,3) for b in range(1,4)) 
>>> print '\n'.join(gen),'\n' 
1 * 1 = 1 
1 * 2 = 2 
1 * 3 = 3 
2 * 1 = 2 
2 * 2 = 4 
2 * 3 = 6 
+2

可以放下括號並使用genexp來代替。這也有一個小問題:沒有終端'\ n',儘管這可能並不重要。 – DSM 2012-08-11 01:35:48

+0

@DSM:謝謝!完成。 – dawg 2012-08-11 01:53:44