お困りの方へ
プログラム実行中に値を受け取りたいってことありますよね?
処理開始時に引数を受け取る方法は以下の記事で書きました。
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'>