Pythonで数値のみの入力
以前、選択肢を数字で選ばせる
pythonのスクリプトの記事を書いた
mecobalamin.hatenablog.com
該当する部分は以下のコード
print('計算の種類を選んで数字を入力してね') print('1: 少数のたし算・ひき算') print('2: 大きな数のかけ算') print('3: あまりのあるわり算') print('4: 分数のたし算・ひき算') while True: eq_type = input('数値を入力 (1 - 4): ') if eq_type > '0' and eq_type < '5': break
動いていたから気にしていなかったが
入力は文字なのに大小の比較ができている
なぜだ?
文字列にも等号記号が使えることは知っていたが
調べてみると比較演算子も使えた
Pythonで文字列を比較(完全一致、部分一致、大小関係など) | note.nkmk.me
比較演算子の使い方 | Python入門
unicodeのコードポイントを比較しているそうだ
pythonではord()でコードポイントを取得できる
>>> ord('0') 48 >>> ord('1') 49 >>> ord('2') 50 >>> ord('9') 57
数字の0から9には
48から57が割り当てられている
なので過去記事で使ったコードでも
問題なく動いたようだ
本来ならint()で数値にして
大小比較するのが筋かも
ただし数値以外の文字・記号を
int()の引数にした場合はエラーになるので
try/except文を使って
エラーを弾きつつ
数値の入力を受け付けるように書き直した
try/excptの使い方は以下のサイトを参考にさせてもらった
Pythonの例外処理(try, except, else, finally) | note.nkmk.me
書き直したコードはこんな感じ
確認のためprint()を追加している
while True: eq_type = input('数値を入力 (1 - 4): ') try: int(eq_type) except ValueError as e: print('1から4までの数字を入力してね') else: if int(eq_type) >= 1 and int(eq_type) <= 4: break else: print('1から4までの数字を入力してね') print(eq_type)
もっと簡潔にかけそうな気がする
あと全角・半角の区別はしていない
出力は半角になる
そのうち区別できるようにしたい