ログアウト中 ログイン

学習パッケージを選択

【Python】単位変換ツール開発講座 第3章3.2節「最終統合機能の作成」




現在の見出し: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("対応変換方向: キロ→グラム、グラム→キロ") エラー発生時に有効な重量変換方向を表示し、ユーザーが正しい入力を行えるよう支援
出力形式の拡張

第3章3.2節「出力形式の拡張」の続きを見る


すべてのカリキュラムを無料登録で学ぶ

プログラミング・マーケティング・AI活用方法を
今すぐ無料登録すると、全てのコンテンツが視聴可能になります。