ログアウト中 ログイン

【Python】計算プログラム(電卓)開発 第3章3.1節「電卓の入力検証機能」




現在の見出し:3.1節:電卓の入力検証機能

見出し一覧

  • 3.1節:電卓の入力検証機能
  • - 数値入力検証の実装
  • - 演算子入力検証の実装
  • - 実用的な電卓アプリの完成

【PR】『Python』を学べる企業・個人向けのプログラミングコース

数値入力検証の実装

第3章3.1節では、数値入力検証と演算子演算子は数値や文字列などのデータを扱う際に使用される記号や記述方法です。入力検証を実装し、電卓アプリの入力値検証機能を実装していきます。

前節では結果フォーマットの改良により、電卓アプリの基本機能が完成しましたが、実際の運用では無効な入力値に対するエラー処理が必要です。現在のコードでは、数値以外の文字列文字列は文字の並びを表現するデータ型で、テキストデータを扱うための基本的な構造として広く使用されています。を入力するとエラーが発生して、プログラムプログラムはコンピュータに対して何をすべきかを指示する一連の命令です。が終了してしまう問題があります。

数値入力検証の実装では、whilewhile文はプログラミングの制御構造の一つで、条件が真である間に指定された処理を繰り返し実行するループ構文です。文を使用して正しい数値が入力されるまで繰り返し処理を行います。文字列の数値判定には文字列メソッドメソッドは特定の処理をまとめたプログラムの塊です。を活用し、入力された文字列が「数値として有効かどうかを判定」してから型変換型変換はデータの型を変換することです。を実行します。この検証処理により、ユーザーは誤って文字列を入力してもプログラムが停止することなく、正しい数値を入力するまで継続して使用できるようになります。

実装方法としては、文字列のreplace()メソッドとisdecimal()メソッドを組み合わせて数値判定を行います。isdecimal()メソッドは文字列が10進数の数字のみで構成されているかを判定し、数字のみの場合はTrue、文字が含まれている場合はFalseを返すメソッドです。

負の数値と小数点を含む数値の両方に対応するため、先頭の「-」記号と「.」を一時的に除去してから数値判定を実行することによって、幅広い数値形式を受け入れることができます。無効な入力の場合は「正しい数値を入力してください」のメッセージを表示して、再入力を求める仕組みを構築します。

数値検証処理を第1数値と第2数値の両方に適用することによって、ユーザーはどの段階で入力ミスをしても適切にリカバリできるようになり、使いやすい電卓アプリが完成します。

# コード
print("電卓アプリ")
print("2つの数値を入力してください")

# 最初の数値を入力(検証付き)
while True:
    num1_input = input("最初の数値を入力してください: ")
    # マイナス記号を一時的に除去
    check_value = num1_input.replace("-", "").replace(".", "")
    if check_value.isdecimal() and num1_input.count(".") <= 1:
        num1 = float(num1_input)
        break
    else:
        print("正しい数値を入力してください")

# 2番目の数値を入力(検証付き)
while True:
    num2_input = input("2番目の数値を入力してください: ")
    # マイナス記号を一時的に除去
    check_value = num2_input.replace("-", "").replace(".", "")
    if check_value.isdecimal() and num2_input.count(".") <= 1:
        num2 = float(num2_input)
        break
    else:
        print("正しい数値を入力してください")

# 演算子を入力
operator = input("演算子を入力してください(+, -, *, /): ").strip()

# 条件分岐による演算処理
if operator == "+":
    result = num1 + num2
    formula = f"{num1} {operator} {num2}"
    print(f"{formula} = {result}")
elif operator == "-":
    result = num1 - num2
    formula = f"{num1} {operator} {num2}"
    print(f"{formula} = {result}")
elif operator == "*":
    result = num1 * num2
    formula = f"{num1} {operator} {num2}"
    print(f"{formula} = {result}")
elif operator == "/":
    if num2 != 0:
        result = num1 / num2
        formula = f"{num1} {operator} {num2}"
        print(f"{formula} = {result}")
    else:
        print("エラー: ゼロで割ることはできません")
else:
    print("エラー: 無効な演算子です")
# 実行結果
電卓アプリ
2つの数値を入力してください
最初の数値を入力してください: abc
正しい数値を入力してください
最初の数値を入力してください: 15
2番目の数値を入力してください: def
正しい数値を入力してください
2番目の数値を入力してください: 3
演算子を入力してください(+, -, *, /): *
15.0 * 3.0 = 45.0
行数 コード 解説
1行目 print("電卓アプリ") アプリケーションのタイトルを表示する
2行目 print("2つの数値を入力してください") ユーザーに数値入力を促すメッセージを表示する
3行目 while True: 無限ループ無限ループはプログラムが終了条件を満たさずに永続的に繰り返される状態で、意図的に作成される場合とプログラミングエラーの場合があります。を開始して数値入力検証を実行する
4行目 num1_input = input("最初の数値を入力してください: ") ユーザーから最初の数値を文字列として取得しnum1_input変数変数はデータを一時的に記憶しておく場所です。代入代入は変数に値を割り当てる操作です。する
5行目 check_value = num1_input.replace("-", "").replace(".", "") replace()メソッドでマイナス記号と小数点を除去した文字列をcheck_value変数に代入する
6行目 if check_value.isdecimal() and num1_input.count(".") <= 1: isdecimal()メソッドで数値判定を行い、かつcount()メソッドで小数点が1個以下かを論理演算子論理演算子は真偽値(True/False)を扱う際に用いられる記号やキーワードです。で判定する
7行目 num1 = float(num1_input) 入力値が有効な場合にfloat()で浮動小数点数浮動小数点数は実数を表現するための数値表現方式で、仮数部と指数部に分けて表現し、非常に大きな数や小さな数を効率的に扱えます。に変換してnum1変数に代入する
8行目 break 有効な数値が入力された場合にwhile文のループループは一連の命令を繰り返し実行する構造です。を終了する
9行目 else: 入力値が無効な場合の処理を定義するelse文
10行目 print("正しい数値を入力してください") 無効な入力に対するエラーメッセージを表示する
11行目 while True: 2番目の数値入力検証のための無限ループを開始する
12行目 num2_input = input("2番目の数値を入力してください: ") ユーザーから2番目の数値を文字列として取得しnum2_input変数に代入する
13行目 check_value = num2_input.replace("-", "").replace(".", "") replace()メソッドでマイナス記号と小数点を除去した文字列をcheck_value変数に代入する
14行目 if check_value.isdecimal() and num2_input.count(".") <= 1: isdecimal()メソッドで数値判定を行い、かつcount()メソッドで小数点が1個以下かを論理演算子で判定する
15行目 num2 = float(num2_input) 入力値が有効な場合にfloat()で浮動小数点数に変換してnum2変数に代入する
16行目 break 有効な数値が入力された場合にwhile文のループを終了する
17行目 else: 入力値が無効な場合の処理を定義するelse文
18行目 print("正しい数値を入力してください") 無効な入力に対するエラーメッセージを表示する
19行目 operator = input("演算子を入力してください(+, -, *, /): ").strip() ユーザーから演算子を文字列で取得し、strip()メソッドで前後の空白を除去してoperator変数に代入する
20行目 if operator == "+": if文を使用してoperator変数の値が「+」と等しいかを比較演算子比較演算子は二つの値を比較する際に使用する記号です。で判定する
21行目 result = num1 + num2 加算演算子を使用してnum1とnum2を足し合わせ、結果をresult変数に代入する
22行目 formula = f"{num1} {operator} {num2}" f-stringを使用してnum1、operator、num2を組み合わせた計算式を作成し、formula変数に代入する
23行目 print(f"{formula} = {result}") f-stringを使用してformula変数とresult変数を「=」で結び、計算式と結果を一行で表示する
24行目 elif operator == "-": elif文を使用してoperator変数の値が「-」と等しいかを判定する
25行目 result = num1 - num2 減算演算子を使用してnum1からnum2を引き、結果をresult変数に代入する
26行目 formula = f"{num1} {operator} {num2}" f-stringを使用してnum1、operator、num2を組み合わせた減算の計算式を作成し、formula変数に代入する
27行目 print(f"{formula} = {result}") f-stringを使用して減算の計算式と結果を一行で表示する
28行目 elif operator == "*": elif文を使用してoperator変数の値が「*」と等しいかを判定する
29行目 result = num1 * num2 乗算演算子を使用してnum1とnum2を掛け合わせ、結果をresult変数に代入する
30行目 formula = f"{num1} {operator} {num2}" f-stringを使用してnum1、operator、num2を組み合わせた乗算の計算式を作成し、formula変数に代入する
31行目 print(f"{formula} = {result}") f-stringを使用して乗算の計算式と結果を一行で表示する
32行目 elif operator == "/": elif文を使用してoperator変数の値が「/」と等しいかを判定する
33行目 if num2 != 0: if文を使用してnum2が0でないかを不等価演算子で判定する
34行目 result = num1 / num2 除算演算子を使用してnum1をnum2で割り、結果をresult変数に代入する
35行目 formula = f"{num1} {operator} {num2}" f-stringを使用してnum1、operator、num2を組み合わせた除算の計算式を作成し、formula変数に代入する
36行目 print(f"{formula} = {result}") f-stringを使用して除算の計算式と結果を一行で表示する
37行目 else: num2が0の場合の処理を定義するelse文
38行目 print("エラー: ゼロで割ることはできません") ゼロ除算ゼロ除算は数をゼロで割る操作を指し、数学的に定義されておらず、多くのプログラミング言語でエラーや例外を引き起こします。エラーのメッセージを表示する
39行目 else: 無効な演算子が入力された場合の処理を定義するelse文
40行目 print("エラー: 無効な演算子です") 無効な演算子エラーのメッセージを表示する
演算子入力検証の実装

第3章3.1節「演算子入力検証の実装」の続きを見る


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

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