こんな感じのものになるかと思います。
python3
1# 基本料金
2BASIC_CHARGES = {
3 'MC13': 660, # メーター口径(meter caliber)が13ミリメートルの場合、660円。以下同様
4 'MC20': 704,
5 'MC25': 792,
6 'MC30': 1650,
7 'MC40': 3190,
8 'MC50': 6820,
9 'MC75': 15400,
10 'MC100': 30800,
11 'MC125': 30800,
12 'MC150': 81400,
13 'MC200OVER': 170500,
14}
15
16# 従量料金
17USAGE_CAHRGES = [
18 (500, 220), # 500立方メートルを超過した分については、1立方メートルにつき220円。以下同様
19 (100, 214.5),
20 (50, 206.8),
21 (40, 198),
22 (30, 170.5),
23 (20, 139.7),
24 (10, 105.6),
25 (0, 44),
26]
27
28# 使用水量とメーター口径から、水道料金を算出する。
29def water_bill(amount_of_water, meter_caliber):
30
31 # 基本料金を取得
32 basic_charge = BASIC_CHARGES.get(meter_caliber)
33
34 if basic_charge is None:
35 raise KeyError("指定されたメーター口径が不正です。")
36
37 # 従量料金の初期値
38 usage_charge = 0
39
40 # 従量料金の各段階ごとの料金を順次計算し、usage_charge に加算
41 for step_amount, unit_charge in USAGE_CAHRGES:
42 if amount_of_water < step_amount:
43 continue
44 amount = amount_of_water - step_amount
45 usage_charge += amount * unit_charge
46 amount_of_water -= amount
47
48 # 基本料金と従量料金の合計して円未満は切り捨てた金額を返す
49 return int(basic_charge + usage_charge)
実行例:
python3
1if __name__ == '__main__':
2 result = water_bill(31.5, 'MC13')
3 print(result)
出力結果:
3808
???? replit.com/@kilesa/tera-Q372187
他の様々な使用水量とメーター口径でテストはしていないので、結果が期待値と違う場合があればお知らせください。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。