出典
シンプルなキーボード入力
input関数はprint関数と同じように、何も インポート (import)しなくても使うことができます。
こういう関数を 組み込み関数 と呼びます。
早速、キーボードから入力した文字を表示させてみます。
<input.py>
inp = input()
print("入力 = '" + inp + "'")
結果は以下のとおりです。
“|”はかーソルで、カーソルが出るだけです。
が、
(base) PS D:\blog\input> python .\input.py
|
“はろー”を入力すると、その文字がそのまま表示されます。
(base) PS D:\blog\input> python .\input.py
はろー
入力 = 'はろー'
上記を見ると分かりますが、文字を入力するときに、どこに入力するかが分かりにくくなっています。
これは、 プロンプト を表示させることで解消できます。
では、プロンプトを表示させるようにしてみます。
プロンプトはinput関数の入力に指定するだけです。
<input.py>
inp = input("ここに入力してみて=>")
print("入力 = '" + inp + "'")
実行すると、下記のように最初に案内となるプロンプトが表示されます。
(base) PS D:\blog\input> python .\input.py
ここに入力してみて=>
できました!
input関数は、プロンプトに表示する文字列だけが、入力に指定できます。
ですので、input関数はたったこれだけでマスター完了です❗
えーーっ たったこれだけーー❓
分かりました。
もう一歩先にすすみましょう。
キーボード以外からの入力
実はinput関数は、厳密にはキーボードから文字列を入力をする関数ではなく、
標準入力 から文字列を入力をする関数なのです。
標準入力には、キーボードからの入力以外に、以下があります。
・ 別のプログラムからの入力
・ ファイルからの入力
別のプログラムの実行結果の入力
ここでは、別のプログラムの実行結果を入力する場合の実行例を示します。
別のプログラムをpythonで作成しても良いのですが、WindowsやLinuxのechoコマンドでもできますので、その例を示します。
また、ここでは、日本語文字を使用してみます。
日本語文字を扱う場合は、Windowsの Powershell Prompt ( Anaconda Powershell Promptも含む)は、予想外の問題(*1)にハマるため、Windows標準の コマンドプロンプト を使用して実行します。
(base) PS D:\blog\input> cmd ・・・コマンドプロンプトを起動
Microsoft Windows [Version 10.0.18362.959]
(c) 2019 Microsoft Corporation. All rights reserved.
D:\blog\input>echo あいう| python input.py ・・・プログラムを実行
ここに入力してみて=>入力 = 'あいう'
上記のとおり、Anaconda Powershell Promptから”cmd”コマンドを実行して、コマンドプロンプトを起動します。
その後、’echo “あいう”‘で日本語を入力し、” | python input.py” で、プログラムに引き渡しています。
上記のようにコマンド同士の間に”|”を記載すると、パイプという機能が働き、コマンドとコマンドの間でデータを受け渡しが行われます。
*1 Anaconda Powershell Promptを含む Powershell Promptでは、デフォルトの文字コードが UTF-16 になり、Windowsの shift-jis 、 Linux の UTF-8 とも異なってしまうようです。
これが原因で、通常のシンプルな方法では日本語が文字化けを起こして正しく表示されません。
ファイルからの入力
今度は、ファイルから入力する場合の実行例を示します。
日本語文字を扱う場合は、”別のプログラムの実行結果の入力“と同じ問題にハマるため、Windows標準のコマンドプロンプトを使用して実行します。
また、メモ帳を起動して、”あいう”と入力し、 “text.txt” というファイルに保存しています。
(base) PS D:\blog\input> cmd ・・・コマンドプロンプトを起動
Microsoft Windows [Version 10.0.18362.959]
(c) 2019 Microsoft Corporation. All rights reserved.
notepad text.txt ・・・メモ帳を起動、"あいう"と入力して保存
D:\blog\input>type text.txt | python input.py ・・・プログラムを実行
ここに入力してみて=>入力 = 'あいう'
ファイルからの場合は、ファイルを作ったときに、単にWindowsのメモ帳から作って、特に”文字コード”を変更せずに保存した場合は、文字コードが shift-jis になっているため、問題なく実行できます。
入力した内容のチェック
キーボードから入力した文字列は、人が自由に入力しますので、何が入力されるかわかりません。
入力されるパターンは、大きく分けて、以下のケースがあります。
・ Enterキーだけが入力された場合
・ 文字とは言えない文字( 制御文字 )が入力された場合
・ 数字や英文字、漢字、かな等目的の文字以外の文字が入力された場合
これらの文字が入力された場合は、それに該当するかのチェックと、エラーなどの処理が必要となります。
これらについては、次回、別の記事で解説します。
キーボードのリアルタイム入力
今回の記事で説明したキーボード入力は、Enterが押されるまで入力を待つものでした。
しかし,ゲームやメモ帳・計算機などのようなリアルタイムでのキーボード入力は、別の方法で行なう必要があります。
これについては、次回、別の記事で解説します。
最後に
本記事ではinput関数によるキーボードからの入力について解説しました。
キーボードからEnterが入力されるまで待って文字を入力するだけであれば、以下さえ理解すれば可能でした。
- input関数を使う
- 入力案内をする プロンプト を表示する
しかし、同じプログラムを利用して、キーボードからだけでなく、以下の使い方ができることがご理解いただけたと思います。
- 他のプログラムからの入力
- ファイルからの入力
また、実際には、以下のような課題が有ることもご理解いただけたかと思います。
- 日本語を使った場合の文字化けの問題
- 入力文字のチェックとエラーなどの処理
- リアルタイムのキーボード入力は別の方法で行なうことが必要