Python Tech 文字列

Python 文字列をキーボードから入力するinput()の使い方

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 ドキュメント

 

  • この記事を書いた人

次世代ペンギン

長いのでペンギンとお呼びください。システム開発・プログラミングのお仕事をしています。甘味とコーヒーは生命線。多くの人に役立つ情報のシェアが目標です。

人気の記事

1

会社員でプログラマーとして働いている人、インフラやネットワークのエンジニアとして働いている人の中には、フリーランスのプログラマーとして独立、もしくは転向したい人もいるので ...

2

キャリアアップのため、または高収入を目指して、しっかりプログラミングを学びたいという人が増えてきましたね。 この記事では現役のエンジニアである私が、実際に仕事で稼げるよう ...

3

フリーランスのプログラマーにとって収入の向上に最も直結するのはスキルです。 必要なスキル、スキルの獲得方法が気になる人も多いでしょう。 また、これからフリーランスを目指す ...

4

Vuetifyの v-progress-circular コンポーネントは、数値データや処理状況を環状(円状)のデザインで教えてくれるUIデザインです。 ローディングのス ...

5

Vuexのstore(ストア)を使うと、各コンポーネント間で個別にデータのやり取りすることなく、データを一元的に管理できます。Vueでは欠かせない機能といえるでしょう。 ...

-Python, Tech, 文字列