開発環境
- 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 コメント:
コメントを投稿