現在の見出し:3.2節:最終統合機能の作成
見出し一覧
- 3.2節:最終統合機能の作成
- - 完全統合処理の実装
- - 出力形式の拡張
【PR】『Python』を学べる企業・個人向けのプログラミングコース
完全統合処理の実装
第3章3.2節では、すべての変換処理において入力値の検証を統一し、エラーハンドリング機能を強化することで、実用的な単位変換ツールとして完成させていきます。また、各変換機能において変換方向の選択機能を追加し、ユーザーが目的に応じて柔軟に変換を実行できる双方向変換対応の統合ツールを構築します。
統合処理では、前節までに個別に実装した各変換機能をifif文はプログラムで条件分岐を行うための命令文です。文とelif文による条件分岐条件分岐はプログラム内で指定した条件によって処理の分岐を行う制御構造です。で統合し、共通の入力形式と出力形式を採用します。長さ変換では「メートル→センチメートル」と「センチメートル→メートル」の双方向変換、重量変換では「キログラム→グラム」と「グラム→キログラム」の双方向変換、温度変換では前節で実装した「摂氏→華氏」と「華氏→摂氏」の双方向変換を提供し、すべての変換において計算過程を表示する機能を含めます。
# コード
print("完全統合単位変換ツール(最終版)")
print("対応変換種別: 長さ、重量、温度")
conversion_type = input("変換種別を入力してください(長さ/重量/温度): ")
cleaned_type = conversion_type.strip()
if cleaned_type == "長さ":
print(f"【{cleaned_type}変換】双方向変換対応")
direction = input("変換方向を選択してください(メートル→センチ/センチ→メートル): ")
cleaned_direction = direction.strip()
if cleaned_direction == "メートル→センチ":
meter_value = input("メートル値を入力してください: ")
meter_float = float(meter_value)
if meter_float >= 0:
cm_factor = 100.0
cm_result = meter_float * cm_factor
print(f"変換結果: {meter_float:.2f}メートル = {cm_result:.2f}センチメートル")
print(f"計算詳細: {meter_float:.2f} × {cm_factor:.1f} = {cm_result:.2f}")
else:
print("エラー: 0以上の値を入力してください")
elif cleaned_direction == "センチ→メートル":
cm_value = input("センチメートル値を入力してください: ")
cm_float = float(cm_value)
if cm_float >= 0:
meter_factor = 0.01
meter_result = cm_float * meter_factor
print(f"変換結果: {cm_float:.2f}センチメートル = {meter_result:.2f}メートル")
print(f"計算詳細: {cm_float:.2f} × {meter_factor:.2f} = {meter_result:.2f}")
else:
print("エラー: 0以上の値を入力してください")
else:
print(f"エラー: 無効な変換方向「{cleaned_direction}」が入力されました")
print("対応変換方向: メートル→センチ、センチ→メートル")
elif cleaned_type == "重量":
print(f"【{cleaned_type}変換】双方向変換対応")
direction = input("変換方向を選択してください(キロ→グラム/グラム→キロ): ")
cleaned_direction = direction.strip()
if cleaned_direction == "キロ→グラム":
kilogram_value = input("キログラム値を入力してください: ")
kilogram_float = float(kilogram_value)
if kilogram_float >= 0:
gram_factor = 1000.0
gram_result = kilogram_float * gram_factor
print(f"変換結果: {kilogram_float:.2f}キログラム = {gram_result:.1f}グラム")
print(f"計算詳細: {kilogram_float:.2f} × {gram_factor:.1f} = {gram_result:.1f}")
else:
print("エラー: 0以上の値を入力してください")
elif cleaned_direction == "グラム→キロ":
gram_value = input("グラム値を入力してください: ")
gram_float = float(gram_value)
if gram_float >= 0:
kilogram_factor = 0.001
kilogram_result = gram_float * kilogram_factor
print(f"変換結果: {gram_float:.1f}グラム = {kilogram_result:.3f}キログラム")
print(f"計算詳細: {gram_float:.1f} × {kilogram_factor:.3f} = {kilogram_result:.3f}")
else:
print("エラー: 0以上の値を入力してください")
else:
print(f"エラー: 無効な変換方向「{cleaned_direction}」が入力されました")
print("対応変換方向: キロ→グラム、グラム→キロ")
elif cleaned_type == "温度":
print(f"【{cleaned_type}変換】双方向変換対応")
direction = input("変換方向を選択してください(摂氏→華氏/華氏→摂氏): ")
cleaned_direction = direction.strip()
if cleaned_direction == "摂氏→華氏":
celsius_value = input("摂氏温度を入力してください: ")
celsius_float = float(celsius_value)
if celsius_float >= -273.15:
fahrenheit_factor1 = 9 / 5
fahrenheit_factor2 = 32
fahrenheit_result = celsius_float * fahrenheit_factor1 + fahrenheit_factor2
print(f"変換結果: {celsius_float:.1f}℃ = {fahrenheit_result:.1f}℉")
print(f"計算詳細: {celsius_float:.1f} × {fahrenheit_factor1:.1f} + {fahrenheit_factor2} = {fahrenheit_result:.1f}")
else:
print("エラー: 絶対零度(-273.15℃)以上の値を入力してください")
elif cleaned_direction == "華氏→摂氏":
fahrenheit_value = input("華氏温度を入力してください: ")
fahrenheit_float = float(fahrenheit_value)
if fahrenheit_float >= -459.67:
celsius_factor1 = 5 / 9
celsius_factor2 = 32
celsius_result = (fahrenheit_float - celsius_factor2) * celsius_factor1
print(f"変換結果: {fahrenheit_float:.1f}℉ = {celsius_result:.1f}℃")
print(f"計算詳細: ({fahrenheit_float:.1f} - {celsius_factor2}) × {celsius_factor1:.1f} = {celsius_result:.1f}")
else:
print("エラー: 絶対零度(-459.67℉)以上の値を入力してください")
else:
print(f"エラー: 無効な変換方向「{cleaned_direction}」が入力されました")
print("対応変換方向: 摂氏→華氏、華氏→摂氏")
else:
print(f"エラー: 無効な変換種別「{cleaned_type}」が入力されました")
print("対応変換種別: 長さ、重量、温度")
# 実行結果
完全統合単位変換ツール(最終版)
対応変換種別: 長さ、重量、温度
変換種別を入力してください(長さ/重量/温度): 長さ
【長さ変換】双方向変換対応
変換方向を選択してください(メートル→センチ/センチ→メートル): センチ→メートル
センチメートル値を入力してください: 250
変換結果: 250.00センチメートル = 2.50メートル
計算詳細: 250.00 × 0.01 = 2.50
行数 | 種別 | コード | 解説 |
---|---|---|---|
6行目 | 変更 | print(f"【{cleaned_type}変換】双方向変換対応") |
長さ変換においても双方向変換に対応したことを表示し、温度変換と統一された機能であることを明示 |
7行目 | 新規 | direction = input("変換方向を選択してください(メートル→センチ/センチ→メートル): ") |
長さ変換の方向をユーザーから入力として取得し、メートルとセンチメートル間の双方向変換を選択可能にする |
8行目 | 新規 | cleaned_direction = direction.strip() |
入力された変換方向の前後の空白文字を除去し、正確な文字列文字列は文字の並びを表現するデータ型で、テキストデータを扱うための基本的な構造として広く使用されています。比較を可能にする |
10行目 | 新規 | if cleaned_direction == "メートル→センチ": |
変換方向が「メートル→センチ」の場合の条件分岐を開始し、メートルからセンチメートルへの変換処理を実行 |
14行目 | 変更 | if meter_float >= 0: |
前節の「> 0」を「>= 0」に変更し、0メートルも有効な値として処理可能にする |
19行目 | 変更 | print("エラー: 0以上の値を入力してください") |
前節の「正の値を入力してください」を「0以上の値を入力してください」に変更し、0も有効であることを明示 |
21行目 | 新規 | elif cleaned_direction == "センチ→メートル": |
変換方向が「センチ→メートル」の場合の条件分岐を新規追加し、センチメートルからメートルへの変換処理を実行 |
22行目 | 新規 | cm_value = input("センチメートル値を入力してください: ") |
センチメートルの値をユーザーから入力として取得し、文字列型で受け取る |
23行目 | 新規 | cm_float = float(cm_value) |
入力されたセンチメートルの文字列を浮動小数点数浮動小数点数は実数を表現するための数値表現方式で、仮数部と指数部に分けて表現し、非常に大きな数や小さな数を効率的に扱えます。型に変換し、計算処理で使用可能にする |
25行目 | 新規 | if cm_float >= 0: |
センチメートルの値が0以上の場合のみ変換処理を実行する入力検証を実装 |
26行目 | 新規 | meter_factor = 0.01 |
センチメートルからメートルへの変換係数「0.01」を変数変数はデータを一時的に記憶しておく場所です。に代入代入は変数に値を割り当てる操作です。し、計算の可読性を向上 |
27行目 | 新規 | meter_result = cm_float * meter_factor |
センチメートルにメートル変換係数を乗算し、センチメートルからメートルへの変換結果を計算 |
28行目 | 新規 | print(f"変換結果: {cm_float:.2f}センチメートル = {meter_result:.2f}メートル") |
センチメートルからメートルへの変換結果を小数点以下2桁まで表示し、単位名を明示 |
29行目 | 新規 | print(f"計算詳細: {cm_float:.2f} × {meter_factor:.2f} = {meter_result:.2f}") |
センチメートルからメートルへの変換の計算過程を詳細に表示し、変換係数を含めた計算式を明示 |
31行目 | 新規 | print("エラー: 0以上の値を入力してください") |
センチメートルの値が負数の場合のエラーメッセージを表示し、有効な値の範囲を明示 |
33行目 | 新規 | else: |
変換方向の入力が「メートル→センチ」「センチ→メートル」のいずれでもない場合のエラー処理を開始 |
34行目 | 新規 | print(f"エラー: 無効な変換方向「{cleaned_direction}」が入力されました") |
無効な変換方向が入力された場合のエラーメッセージを表示し、入力された値を明示 |
35行目 | 新規 | print("対応変換方向: メートル→センチ、センチ→メートル") |
エラー発生時に有効な変換方向を表示し、ユーザーが正しい入力を行えるよう支援 |
37行目 | 変更 | elif cleaned_type == "重量": |
前節では長さ変換の次に配置されていた重量変換を、新しい長さ変換構造に合わせて配置 |
38行目 | 変更 | print(f"【{cleaned_type}変換】双方向変換対応") |
重量変換においても双方向変換に対応したことを表示し、他の変換機能と統一された機能であることを明示 |
39行目 | 新規 | direction = input("変換方向を選択してください(キロ→グラム/グラム→キロ): ") |
重量変換の方向をユーザーから入力として取得し、キログラムとグラム間の双方向変換を選択可能にする |
40行目 | 新規 | cleaned_direction = direction.strip() |
入力された重量変換方向の前後の空白文字を除去し、正確な文字列比較を可能にする |
42行目 | 新規 | if cleaned_direction == "キロ→グラム": |
変換方向が「キロ→グラム」の場合の条件分岐を開始し、キログラムからグラムへの変換処理を実行 |
46行目 | 変更 | if kilogram_float >= 0: |
前節の「> 0」を「>= 0」に変更し、0キログラムも有効な値として処理可能にする |
51行目 | 変更 | print("エラー: 0以上の値を入力してください") |
前節の「正の値を入力してください」を「0以上の値を入力してください」に変更し、0も有効であることを明示 |
53行目 | 新規 | elif cleaned_direction == "グラム→キロ": |
変換方向が「グラム→キロ」の場合の条件分岐を新規追加し、グラムからキログラムへの変換処理を実行 |
54行目 | 新規 | gram_value = input("グラム値を入力してください: ") |
グラムの値をユーザーから入力として取得し、文字列型で受け取る |
55行目 | 新規 | gram_float = float(gram_value) |
入力されたグラムの文字列を浮動小数点数型に変換し、計算処理で使用可能にする |
57行目 | 新規 | if gram_float >= 0: |
グラムの値が0以上の場合のみ変換処理を実行する入力検証を実装 |
58行目 | 新規 | kilogram_factor = 0.001 |
グラムからキログラムへの変換係数「0.001」を変数に代入し、計算の可読性を向上 |
59行目 | 新規 | kilogram_result = gram_float * kilogram_factor |
グラムにキログラム変換係数を乗算し、グラムからキログラムへの変換結果を計算 |
60行目 | 新規 | print(f"変換結果: {gram_float:.1f}グラム = {kilogram_result:.3f}キログラム") |
グラムからキログラムへの変換結果を表示し、グラムは小数点以下1桁、キログラムは小数点以下3桁まで表示 |
61行目 | 新規 | print(f"計算詳細: {gram_float:.1f} × {kilogram_factor:.3f} = {kilogram_result:.3f}") |
グラムからキログラムへの変換の計算過程を詳細に表示し、変換係数を含めた計算式を明示 |
63行目 | 新規 | print("エラー: 0以上の値を入力してください") |
グラムの値が負数の場合のエラーメッセージを表示し、有効な値の範囲を明示 |
65行目 | 新規 | else: |
重量変換方向の入力が「キロ→グラム」「グラム→キロ」のいずれでもない場合のエラー処理を開始 |
66行目 | 新規 | print(f"エラー: 無効な変換方向「{cleaned_direction}」が入力されました") |
無効な重量変換方向が入力された場合のエラーメッセージを表示し、入力された値を明示 |
67行目 | 新規 | print("対応変換方向: キロ→グラム、グラム→キロ") |
エラー発生時に有効な重量変換方向を表示し、ユーザーが正しい入力を行えるよう支援 |
- 条件分岐(if文):Pythonマスター講座 第3章3.2節Pythonマスター講座第3章 3.2節では、Pythonの条件分岐に関する内容を学べますで解説
- 文字列フォーマット「f-string」:Pythonマスター講座 第2章2.5節Pythonマスター講座第2章 2.5節では、Pythonの文字列操作に関する内容を学べますで解説
- 算術演算子算術演算子は数値の計算を行うための記号や命令です。:Pythonマスター講座 第2章2.4節Pythonマスター講座第2章 2.4節では、Pythonの演算子に関する内容を学べますで解説
- 比較演算子比較演算子は二つの値を比較する際に使用する記号です。:Pythonマスター講座 第2章2.4節で解説
- 文字列メソッドメソッドは特定の処理をまとめたプログラムの塊です。:Pythonマスター講座 第2章2.5節で解説