現在の見出し: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("エラー: 無効な演算子です") |
無効な演算子エラーのメッセージを表示する |
- 繰り返し処理(while文):Pythonマスター講座 第3章3.4節Pythonマスター講座第3章 3.4節では、Pythonのwhile文に関する内容を学べますで解説
- 条件分岐(if文):Pythonマスター講座 第3章3.2節Pythonマスター講座第3章 3.2節では、Pythonの条件分岐に関する内容を学べますで解説
- 文字列:Pythonマスター講座 第2章2.5節Pythonマスター講座第2章 2.5節では、Pythonの文字列操作に関する内容を学べますで解説
- 演算子と式:Pythonマスター講座 第2章2.4節Pythonマスター講座第2章 2.4節では、Pythonの演算子に関する内容を学べますで解説