2011-10-17 15 views
-2

這已經困擾了我幾個小時,而且我非常接近結束,並且我嘗試了幾種不同的變體,並以奇怪的方式出現。使用嵌套循環的表格,計算不出來正確/完全

我也發現不同的時間這個問題已被問到,但他們都沒有似乎有問題,我似乎有。

問題: 我在這段代碼下面的輸出中可以看到。該計算是不跨各列承載用於每個​​相應行,並且計算不斷取入相同的值進行和col,顯然,並保持輸出相同的值,35.7

的代碼:

def WindChill(): 
row = 0 
col = 0 
i = 0 
wchill = round((35.74 + 0.6215*(col) - 35.75*(row**16) + 0.4275*(col)*(row**16)), 1) 

print(10 * " ", "|", end = "") 

head = -1 

for i in range(1): 
    for col in range(-20, 70, 10): 
     print(3 * " ", col, "F", 3 * " ", "|", end = " ") 
    print("\n", 150 * "-") 

while head < 0: 
    for row in range(0, 55, 5): 
     if (len(str(row))) < 2: 
      print(row, "mph", 4 * " ", "|", end = " ") 

     else: 
      print(row, "mph", 3 * " ", "|", end = " ") 

     print(3 * " ", round(wchill, 1), 3 * " ", "|", end = " ") 

     col = 0 
     head += 1 

     print("\n", 150 * "-") 
    print() 

print() 

此輸出:

    | -20 F  |  -10 F  |  0 F  |  10 F  |  20 F  |  30 F  |  40 F  |  50 F  |  60 F  | 
     ------------------------------------------------------------------------------------------------------------------------------------------------------ 
     0 mph  |  35.7  | 
     ------------------------------------------------------------------------------------------------------------------------------------------------------ 
     5 mph  |  35.7  | 
     ------------------------------------------------------------------------------------------------------------------------------------------------------ 
     10 mph  |  35.7  | 
     ------------------------------------------------------------------------------------------------------------------------------------------------------ 
     15 mph  |  35.7  | 
     ------------------------------------------------------------------------------------------------------------------------------------------------------ 
     20 mph  |  35.7  | 
     ------------------------------------------------------------------------------------------------------------------------------------------------------ 
     25 mph  |  35.7  | 
     ------------------------------------------------------------------------------------------------------------------------------------------------------ 
     30 mph  |  35.7  | 
     ------------------------------------------------------------------------------------------------------------------------------------------------------ 
     35 mph  |  35.7  | 
     ------------------------------------------------------------------------------------------------------------------------------------------------------ 
     40 mph  |  35.7  | 
     ------------------------------------------------------------------------------------------------------------------------------------------------------ 
     45 mph  |  35.7  | 
     ------------------------------------------------------------------------------------------------------------------------------------------------------ 
     50 mph  |  35.7  | 
     ------------------------------------------------------------------------------------------------------------------------------------------------------ 

現在,很明顯,35.7的值應該是與風速度5英里每小時每個增量不同,它應該計算值的所有跨越每一行的列了。

表和計算都應該看起來類似於表中: http://www.nws.noaa.gov/os/windchill/index.shtml

+0

有什麼問題? –

+0

問題是:我在這段代碼下面的輸出中可以看到。計算不會在每個行的列上進行,並且計算不斷在行和列中採用相同的值,顯然,並且保持輸出相同的值,35.7 – html92

+0

您的縮進如此處所示很古怪,但它看起來很古怪就像你在進入循環之前只進行一次wchill計算一樣。嘗試在'print(... wchill ...)'行之前移動你的wchill計算。 –

回答

2

您已經計算wchill在你的程序中,最開始的時候行= 0和col = 0,即數量進行評估,以35.7開頭,並且不會改變。

如果您要根據您正在打印什麼行/列wchill改變,那麼你需要調用線

wchill = round((35.74 + 0.6215*(col) - 35.75*(row**16) + 0.4275*(col)*(row**16)), 1) 

打印正確之前,當行和列的值改變。

編輯:我在這裏想說的是,wchill本身不會奇蹟般地改變 - 每當行/列發生變化時,您都需要重新計算它。

+0

當我將wchill移動到「for range in range(...)」之後時,它輸出的數字不同,但它們是-3.5e + 17這樣的數字,這是一個非常大的數字。 它也不會計算和輸出所有列的值,仍然只在第一個(-20F)列中。 – html92

+0

這不會那麼簡單。記住這個列也在改變,你把它放在裏面的循環只是迭代'行'。 (在這種情況下,列仍將被設置爲0)。當你打印出wchill時,你需要跟蹤行和列。也許想想兩個嵌套的循環遍歷行和列。 http://wiki.python.org/moin/ForLoop – Aurora

+1

巨大的數字是因爲你正在向第16位的力量而不是第16位的力量行進。 – zwol

0

最小化非數據墨水!

def WindChillTable(of): 
    of.write('   -20\u00b0F') 
    for col in range(-10, 70, 10): 
     of.write('{: 6} '.format(col)) 

    of.write('\n  \u250c' + 71*'\u2500') 

    for row in range(0, 55, 5): 
     if row == 0: 
      of.write('\n mph 0 \u2502') 
     else: 
      of.write('\n {:2} \u2502'.format(row)) 

     for col in range(-20, 70, 10): 
      of.write(' {: 5.1f} '.format(0)) 

    of.write('\n') 

if __name__ == '__main__': 
    import sys 
    WindChillTable(sys.stdout) 

&rightarrow;

  -20°F -10  0  10  20  30  40  50  60 
     ┌─────────────────────────────────────────────────────────────────────── 
mph 0 │ 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0 
    5 │ 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0 
    10 │ 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0 
    15 │ 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0 
    20 │ 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0 
    25 │ 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0 
    30 │ 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0 
    35 │ 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0 
    40 │ 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0 
    45 │ 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0 
    50 │ 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0 

將此打印的實際值作爲練習。