Tabella utilizzando ciclo annidato, calcoli non esce correttamente / completamente

StackOverflow https://stackoverflow.com/questions/7800198

  •  22-10-2019
  •  | 
  •  

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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top