Tabella utilizzando ciclo annidato, calcoli non esce correttamente / completamente
Domanda
Questo mi ha messo in difficoltà per diverse ore, e io sono così vicino alla fine, e ho provato diverse varianti differenti, e viene fuori in modi strani.
Ho anche trovato diverse volte questo problema è stato chiesto, ma nessuno di loro sembrano avere il problema mi sembra di avere.
La domanda / problema: Sto avendo può essere visto in uscita al di sotto di questo codice. Il calcolo non procede attraverso le colonne per ogni rispettiva riga, e il calcolo continua a prendere negli stessi valori nella fila e colle, apparentemente, e continua in uscita lo stesso valore, 35,7
Il codice:
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()
Questa uscite:
| -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 |
------------------------------------------------------------------------------------------------------------------------------------------------------
Ora, ovviamente, i valori 35.7 dovrebbero essere diverso con ogni incremento di 5 mph in velocità del vento, e si suppone di calcolare tutti i valori attraverso le colonne per ogni riga, anche.
Il tavolo e calcoli dovrebbero essere simile al tavolo a: http://www.nws.noaa.gov/os/windchill/index.shtml
Soluzione
Avete calcolato wchill proprio all'inizio del programma, quando row = 0 e col = 0. Questo numero viene valutato al 35,7 all'inizio, e non cambierà.
Se si desidera wchill cambiare in base a ciò riga / colonna si stampa su attualmente, allora avete bisogno di chiamare la linea
wchill = round((35.74 + 0.6215*(col) - 35.75*(row**16) + 0.4275*(col)*(row**16)), 1)
a destra prima di stamparlo, quando i valori di cambiamento di riga e colonna.
modifica: quello che sto cercando di dire è che wchill non è magicamente cambiando per sé - è necessario ricalcolare ogni volta la riga / colonna modifiche
.Altri suggerimenti
Riduci a icona inchiostro non dati!
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)
?
-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
Fare questa stampa i valori effettivi che si desidera è lasciata come esercizio.