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