Pythonでプログラム実行中にinput関数でキー入力を受け取る

プログラム実行中に値を受け取りたいってことありますよね?

処理開始時に引数を受け取る方法は以下の記事で書きました。

アイキャッチ argparseを用いてpythonでコマンドライン引数を使う

この記事では、プログラム実行中に値を入力するように促して、キー入力された値を受け取る方法を説明します。

そのために、組み込み関数のinput関数を使います。

input関数の基本的な使い方

input(prompt)で、コマンドラインにpromptを表示して、入力を受け取ります。
受け取った値はstr型になります。

print(input('> '))
# > 1
# 1
# キーで1を入力すると、1が表示される。

print(type(input('> ')))
# > 1
# <class 'str'>
# キー入力は数値であっても、str型になる。


print(type(int(input('> '))))
# > 1
# <class 'int'>
# 受け取ったキー入力を数値にしたい場合はint関数で変換する。

input関数を使ったサンプルコード

PINを入力してもらう例です。
間違ったPINを入力した場合は、何度も入力してもらうようなコードです。

while 1:
    code = input('Input PIN\n> ')
    if code == '1111':
        break
    else:
        continue
print('Certified.')

# Input PIN
# > 1234
# Input PIN
# > xyz
# Input PIN
# > 1111
# Certified.
# "1111"の文字列が入力されるまで、PIN入力を要求する。

2つの値の入力を要求する例です。
画サイズを入力してもらう例にしています。
widthとheightをスペースを空けて入力してもらうことを期待したコードです。
受け取った文字列を、スペースで分割して、int型に変換しています。

x, y = (int(s) for s in input('Input image size (x y) > ').split())
print(f'x:{x} type(x):{type(x)}')
print(f'y:{y} type(y):{type(y)}')

# Input image size (x y) > 640 480
# x:640 type(x):<class 'int'>
# y:480 type(y):<class 'int'>
# スペースで区切られた2つの数値を受け取るコード。

これも画サイズを入力してもらう例で、ユーザーがwidthとheightの間に”,(カンマ)”を入力してしまうことを想定したコードにしています。
受け取った文字列を、スペースで分割して、数字以外の文字を削除して、int型に変換しています。

x, y = (int(re.sub('[^0-9]', '', s)) for s in input('Input image size (x y) > ').split())

print(f'x:{x} type(x):{type(x)}')
print(f'y:{y} type(y):{type(y)}')

# Input image size (x y) > 640, 480
# x:640 type(x):<class 'int'>
# y:480 type(y):<class 'int'>