Python で標準入力(キーボードなどの入力)を文字列で取得するには input()
関数を使用します。
他の言語と比べてもシンプルに、コンソールに入力された文字列を取得可能です。
この記事では Python でキーボードから文字列入力をする様々な方法を解説しています。
- input()の基本的な使い方
- input()で数値を取得する
- input()で繰り返し文字列を入力する
- ひとつのinput()で複数の値を入力する
結論
標準入力から文字列を入力する
c = input()
プロンプトを表示させる
c = input("put text >> ")
input()から数値(int, float)を取得する
c = input("put number: ")
val = int(c)
print(type(val))
# <class 'int'>
val = float(c)
print(type(val))
# <class 'float'>
繰り返し文字列を入力する
params = list(iter(lambda: input("put new keyword: "), 'end'))
区切り文字で同時に複数の値を入力する(str.split()
の利用)
c = input("put values: ")
# put values: 1,2,3
l = c.split(',')
print(l)
# ['1', '2', '3']
実行環境
Python 3.9.2
input()で文字列の入力を受け取る
Pythonでターミナル、コマンドプロンプトなどへのキーボード入力(標準入力)を取得するには、組み込み関数 input()
関数を用います。
実行後、hello
と入力した例。入力された文字列は変数c
に格納されます。
c = input()
print(c)
# hello
print(type(c))
# <class 'str'>
上のサンプルコードを実行すると、まず何も表示されずに入力受付状態になります。
実行例
$ python strgins_input.py
hello
hello
この例では1つ目のhello
はキーボードから入力したもの、2つ目はprint()
により表示されたものです。
入力受付状態で何も表示されないのは不親切なので、入力待ちであることを示すプロンプトを表示しましょう。
プロンプトを表示するには、input()
の引数に文字列を設定します。
c = input("put text >> ")
print(c)
実行例
$ python strgins_input.py
put text >> hoge hoge
hoge hoge
input()から数値を取得
input()
が返すのは必ず文字列型str
です。
つまり、キーボードから数値が入力されても、変数に入るのは文字列です。
c = input("put numbers: ")
print(c)
# 10.23
print(type(c))
# <class 'str'>
キーボードからの入力値を数値として取得したい場合は、型変換(キャスト)をする必要があります。
Pythonでは文字列から、整数型(int
)、浮動小数点型(float
)などの数値型に変換するには、それぞれint()
、float()
を使います。
整数型(int)で入力値を取得する場合
c = input("put number: ")
# put number: 10
print(type(c))
# <class 'str'>
val = int(c)
print(val)
# 10
print(type(val))
# <class 'int'>
浮動小数点型(float)で入力値を取得する場合
c = input("put number: ")
# put number: 2
val = float(c)
print(val)
# 2.0
print(type(val))
# <class 'float'>
なお、int()
、float()
で文字列を変換しようとするときに、想定外の文字が含まれていて変換できないときはエラーとなります。
c = input("put number: ")
# put number: 10f
val = int(c)
# ValueError: invalid literal for int() with base 10: '10f'
コンソールからの入力により、ValueError
となるのは問題です。そのため、例外処理をうまく使って、プログラムを終了したり、デフォルト値を設定したりするなどを検討しましょう。
c = input("put number: ")
try:
val = int(c)
except ValueError:
print("整数値を入力してください")
exit(1)
print(val)
input()で繰り返し文字列入力
繰り返しキーボードから入力値を取得する場合も、input()
を繰り返し実行します。実行するたびに異なる変数に代入すれば、複数の文字列変数として取得が可能。
c1 = input("parameter 1: ")
c2 = input("parameter 2: ")
c3 = input("parameter 3: ")
print(c1)
print(c2)
print(c3)
実行例
$ python strings_input_multi.py
parameter 1: foo
parameter 2: bar
parameter 3: baz
foo
bar
baz
あらかじめ入力される個数が決まっている場合は上記のサンプルコードで大丈夫ですが、個数が決まっていないときはリスト(list)と繰り返し(while文)を活用します。
while
文は条件がTrueとなる間、繰り返します。条件をTrue
としておけば無限に繰り返します。break
文があると、その時点でwhile
文を抜け出します。
これらを用いて、ある特定の文字列が入力される(今回はend
)までキーボード入力を繰り返して、取得した文字列をリストparams
に格納してみます。
params = []
while True:
c = input("put new keyword: ")
if c == 'end':
break
params.append(c)
print(params)
実行例
$ python strings_input_multi.py
put new keyword: foo
put new keyword: bar
put new keyword: baz
put new keyword: end
['foo', 'bar', 'baz']
上のコードはiter()
を利用してワンライナー(1行)で実現できます。
params = list(iter(lambda: input("put new keyword: "), 'end'))
print(params)
実行例
$ python strings_input_multi.py
put new keyword: foo
put new keyword: bar
put new keyword: baz
put new keyword: end
['foo', 'bar', 'baz']
iter()
の使い方は次の通り。
itr_obj = iter(object, sentinel)
object | 呼び出し可能オブジェクト |
sentinel | 任意の値。objectの実行で返された値がsentinelと同値になるまでobjectの実行を繰り返す |
input()
に引数(プロンプトの文字列)をセットした状態でiter()
へ渡すために、lambda
文をしています。
区切り文字で同時に複数の値を入力
文字列を区切り文字で分割するにはstr.split()
メソッドを利用します。
分割された文字列はリスト(list)に格納されます。
text = 'hoge,fuga,piyo'
vals = text.split(',')
print(vals)
# ['hoge', 'fuga', 'piyo']
print(type(vals))
# <class 'list'>
1行で区切り文字を使って複数の値を入力するには、このsplit()
メソッドを用いて次のように書けます。
c = input("put values: ")
print(c)
# a,b,c
l = c.split(',')
print(l)
# ['a', 'b', 'c']
入力される値が数値であるときも同様です。
split()
メソッドで文字列を分割した後に、リストの各要素を数値型に変換します。ここではリスト内包表記を使って、1行ですべての要素にfloat()
を適用しています。
c = input("put values: ")
# put values: 1,2,3
l = c.split(',')
print(l)
# ['1', '2', '3']
print(type(l[0]))
# <class 'str'>
l = [float(elem) for elem in l]
print(l)
# [1.0, 2.0, 3.0]
print(type(l[0]))
# <class 'float'>
Pythonの学習法について
Python の勉強が辛くなっていませんか?
Pythonは比較的取り組みやすい言語と言われていますが、プログラミング初心者にとっては分からないことだらけ。
ゼロから独学で勉強するのは厳しい道のりです。
今回、様々な現場、システム、言語を経験してきた現役エンジニアの立場から、初心者でも挫折しない学習方法を解説する記事を書きました。もちろん、お金をかけずに習得できる方法も解説しています。
できるだけストレスがかからない勉強法を解説しているので、ぜひ参考にしてみてくださいね。
今回参考にしたページ・資料
input() 組み込み関数 — Python 3.10.0b2 ドキュメント
iter() 組み込み関数 — Python 3.10.0b2 ドキュメント