2011年6月20日月曜日

開発環境

  • Mac OS X Snow Leopard (OS)
  • WingIDE
  • Script言語: Python

『初めてのコンピュータサイエンス』(Jennifer Campbell, Paul Gries, Jason Montojo, Greg Wilson 著、長尾 高弘 訳、オライリー・ジャパン、2010年、ISBN978-4-87311-463-7)の6章(条件分岐), 6.5(練習問題), 9を解いてみる。

 

9.

(a)

単位はConversion of units of temperatureを参照。

摂氏を基準スケールとして、元の単位(source)から摂氏へ変換する関数(source2c(t,source))と、摂氏から変換したい単位(target)へ変換する関数(c2target(c,target))を定義し、その合成関数(c2target(source2c(t,source),target))を利用する。

コード(WingIDE)

def convert_temperature(t,source,target):
    def source2c(t,source):
        if(source=="Kelvin"):
            return t-273.15
        elif(source=="Fahrenheit"):
            return (t-32)*5/9
        elif(source=="Rankine"):
            return (t-491.67)*5/9
        elif(source=="Delisle"):
            return 100-t*2/3
        elif(source=="Newton"):
            return t*100/33
        elif(source=="Reaumur"):
            return t*5/4
        elif(source=="Romer"):
            return (t-7.5)*40/21
        else:
            return t
    def c2target(c,target):
        if(target=="Kelvin"):
            return  c+273.15
        elif(target=="Fahrenheit"):
            return c*9/5+32
        elif(target=="Rankine"):
            return (c+273.15)*9/5
        elif(target=="Delisle"):
            return (100-c)*3/2
        elif(target=="Newton"):
            return c*33/100
        elif(target=="Reaumur"):
            return c*4/5
        elif(target=="Romer"):
            return c*21/40+7.5
        else:
            return c
    return c2target(source2c(t,source),target)

思ったとおり機能するか確認。(全部の単位は多いのでFahrenheitをそれぞれCelsius, Kelvin, Rankine, Delisle, Newton, Reaumur, Romerに変換して、WikipediaのComparisonで正しいか確認)

入出力結果(Python Shell)

(b)新しい単位を追加したとき、追加しなければならないif文は2つ。(2つの関数にそれぞれ1つずつelifを追加すればいい。)

少しずつだけど、プログラミングっぽくなってきた気がする!

0 コメント:

コメントを投稿