ガスでお湯を沸かすのに何ジュールの熱量が必要なのか気になって、ポチポチ計算してたんだけど、せっかくだからコードにしとくかと思って書いてみた。最近Python触る機会も増えたから練習も兼ねてる。
""" 水の温度変化に必要な熱量の単位変換を行うクラス """ class WaterCalory: """ 水の熱量 """ def __init__(self, ml : int, delta_temp : int): # 水の量 ミリリットル self.ml = ml # 温度の上昇 self.delta_temp = delta_temp @classmethod def factory(cls, ml : int, from_temp : int, to_temp : int): return cls(ml, to_temp - from_temp) def cal(self) -> int: # カロリー return self.ml * self.delta_temp def to_joule(self) -> int: # ジュール return self.cal() * 4.184 def to_mega_joule(self) -> int: # メガジュール return self.to_joule() / 1_000_000 def format_in_mega_joule(self) -> str: # メガジュールで少数3桁までの文字列にする return f"{self.to_mega_joule():.3f} MJ"
import unittest from water_calory import WaterCalory class TestUnionFind(unittest.TestCase): def test(self): wc = WaterCalory(1000, 60) self.assertEqual( wc.cal(), 60_000, "1000mlの水を60度上昇させるのに必要な熱量は60,000カロリー" ) self.assertEqual( wc.to_joule(), 251_040, "1000mlの水を60度上昇させるのに必要な熱量は251040ジュール" ) self.assertEqual( wc.to_mega_joule(), 0.251040, "1000mlの水を60度上昇させるのに必要な熱量は0.251040メガジュール" ) self.assertEqual( wc.format_in_mega_joule(), "0.251 MJ", "1000mlの水を60度上昇させるのに必要な熱量は0.251メガジュール" ) def test2(self): wc = WaterCalory.factory(ml=1000, from_temp=10, to_temp=70) self.assertEqual( wc.cal(), 60_000, "1000mlの水を60度上昇させるのに必要な熱量は60,000カロリー" ) self.assertEqual( wc.to_joule(), 251_040, "1000mlの水を60度上昇させるのに必要な熱量は251040ジュール" ) self.assertEqual( wc.to_mega_joule(), 0.251040, "1000mlの水を60度上昇させるのに必要な熱量は0.251040メガジュール" ) self.assertEqual( wc.format_in_mega_joule(), "0.251 MJ", "1000mlの水を60度上昇させるのに必要な熱量は0.251メガジュール" )
何ジュールか変換できるようにしたから、ついでに都市ガスのジュール/立方メートル調べてガスの使用量に変換できるようにして、ガス料金の限界費用調べれば、お湯を沸かすのに必要な費用がわかる。