1

私はwindchillインデックスでテーブルを印刷するプログラムを書いています。すべてのwindchill値は、対応する行と列に適切である必要があります。

def main():    
    windSpeed = 0
    temp = 0
    windChill = 35.74 + (0.6215 * temp) - 35.75 * (windSpeed ** 0.16) \
            + 0.4275 * temp * (windSpeed ** 0.16)

    # table frame, temps
    for temp in range(-20, 70, 10):
        print 2 * " ", temp, 
    print "\n", " " * 2, "-" * 51    

    #table frame, speeds
    for windSpeed in range (0, 35, 5):
        print windSpeed


main()

これにより、次のものが生成されます。

  -20    -10    0    10    20    30    40    50    60 
  ---------------------------------------------------
0
5
10
15
20
25
30

明らかに、難しい部分は実際に風冷えの値を印刷することです。私はコードをかなり試してきましたが、プログラムの最初の段階で定義された係数の値が0と0の最初のwindchill値のみが出力されます。

4

2 に答える 2

1

温度と風速の両方のすべての値をループして、毎回風冷を再計算する必要があります。これを行う良い方法は、windChill を関数として再定義することです。テーブルを正しい間隔で印刷するには、 文字列フォーマットを使用できます。

def main():    
    def wind_chill(temp, wind_speed):
        return 35.74 + (0.6215 * temp) - 35.75 * (wind_speed ** 0.16) \
            + 0.4275 * temp * (wind_speed ** 0.16)

    heading = '  '
    for temp in range(-20, 70, 10):
        heading += "{:>7d}".format(temp)
    print heading + "\n   " + "-" * 62    
    for wind_speed in range (0, 35, 5):
        output_line = "{:>2d}".format(wind_speed)
        for temp in range(-20, 70, 10):
            output_line += "{:>7.1f}".format(wind_chill(temp, wind_speed))
        print output_line

main()

または、すべてのデータを 2 次元配列 (リストのリスト) に設定してから、単一の長い形式の文字列を使用して出力します。(これはsum、リストのリストを 1 つの長いシーケンスにフラット化するために使用されます。)

def main():    
    temps = range(-20, 70, 10)
    winds = range(0, 35, 5)
    chill = [[w] + [35.74 + .6215 * t - 35.75 * w**.16 + .4275 * t * w**.16 
                   for t in temps] for w in winds]
    rows = len(winds)
    cols = len(temps)
    print ('  ' + '{:7d}' * cols + '\n  ' + '-' * cols * 7
           + ('\n{:2d}' + '{:7.1f}' * cols) * rows).format(*sum(chill, temps))
于 2013-02-06T17:56:30.057 に答える
1

後で戻ってすでに印刷されている行を変更することは不可能であるため、表の各行を印刷すると同時に風冷を計算する必要があります。各行に表示される気温と風速の組み合わせごとに長い式を繰り返すよりも、それらから値を計算し、(はるかに短い) 名前で繰り返し呼び出す別の関数を作成することをお勧めします。

組み込みの文字列メソッドformat()を使用すると、計算されたすべてのデータを目的の方法で比較的簡単に表示できます。そのため、時間をかけてその仕組みを学ぶことは、非常に価値のある試みです。

PEP 8 - Style Guide for Python Codeにも従おうとするこれを行うコードを次に示します 。

def wind_chill(temp, wind_speed):
    """ Compute wind chill given temperature and wind speed if the
        temperature is 50 degrees Fahrenheit or less and the wind speed is
        above 3 mph, otherwise return 'nan' (not-a-number) because it's an
        undefined quantity in those situations.
    """
    return (35.74 + (0.6215 * temp) - 35.75 * (wind_speed ** 0.16)
            + 0.4275 * temp * (wind_speed ** 0.16)
                if temp <= 50 and wind_speed > 3 else
            float('nan'))

def main():
    # print table header
    temps = xrange(-20, 70, 10)
    num_temps = len(temps)
    data = [" "] + [temp for temp in temps]
    print ("{:3s}" + num_temps * " {:5d}").format(*data)
    data = [" "] + num_temps * [5 * "-"]
    print ("{:3s}" + num_temps * " {:5s}").format(*data)

    # print table rows
    row_format_string = "{:3d}" + num_temps * " {:5.1F}"
    for wind_speed in xrange(0, 35, 5):
        data = [wind_speed] + [wind_chill(temp, wind_speed) for temp in temps]
        print row_format_string.format(*data)

main()

出力:

      -20   -10     0    10    20    30    40    50    60
    ----- ----- ----- ----- ----- ----- ----- ----- -----
  0   NAN   NAN   NAN   NAN   NAN   NAN   NAN   NAN   NAN
  5 -34.0 -22.3 -10.5   1.2  13.0  24.7  36.5  48.2   NAN
 10 -40.7 -28.3 -15.9  -3.5   8.9  21.2  33.6  46.0   NAN
 15 -45.0 -32.2 -19.4  -6.6   6.2  19.0  31.8  44.6   NAN
 20 -48.2 -35.1 -22.0  -8.9   4.2  17.4  30.5  43.6   NAN
 25 -50.8 -37.5 -24.1 -10.7   2.6  16.0  29.4  42.8   NAN
 30 -53.0 -39.4 -25.9 -12.3   1.3  14.9  28.5  42.0   NAN
于 2013-02-06T19:29:24.953 に答える