プログラムに対話性を持たせる2つの関数
Pythonを書き始めたばかりの頃に作るプログラムは、だいたい同じ形をしています。input() でユーザーに何かを尋ねて、その答えを処理し、print() で結果を返す——これだけです。この2つの組み込み関数こそが、あなたのコードと外の世界をつなぐ窓口になります。
まずは一つずつ見ていきましょう。
print():出力を表示する
もっとも基本的な使い方として、print() はターミナルに1行のテキストを出力します。
出力結果は hello の後ろに改行が入ります。この改行があるおかげで、print を複数回呼んだときに画面上で行が分かれて表示されるわけです。
1回の呼び出しで複数の値を渡すこともできて、その場合 Python は値と値の間に自動でスペースを入れてくれます。
Output:
Name: Ada Age: 36
引数は文字列である必要はありません。print は各引数に対して str() を呼んでくれるので、型が混ざっていても気にせず渡せます。
区切り文字を変える(sep)
値と値の間をスペース以外にしたいときは、sep を指定します。
行末の文字を変える
print はデフォルトで末尾に改行を付けます。これを変えたいときは end を指定します。たとえば、同じ行に続けて出力したい場合はこんな感じです。
end="" を使えば、1 行を少しずつ組み立てて出力できるというわけですね。
print の出力先は標準出力
print の出力先は、デフォルトで 標準出力(stdout)、つまりターミナルに普段見える出力先です。これは file 引数で切り替えられて、標準エラー出力(stderr)やファイル、その他ファイルライクなオブジェクトにリダイレクトできます。
フォーマット付きで出力したいとき――小数点以下2桁に揃えたり、列幅をパディングしたり、大きな数値に3桁区切りのカンマを入れたり――は、print の中で f-string を使うのが手っ取り早いです。
input():ユーザーからの入力を受け取る
input(プロンプト) を使うと、プログラムはいったん止まり、指定したプロンプトを表示してユーザーの入力を待ちます。ユーザーがEnterキーを押すまでに入力した内容は、文字列として返ってきます。
input で初心者がつまずきやすいポイントが3つあります。
戻り値は必ず文字列
ユーザーが 42 と入力しても、返ってくるのは文字列の "42" です。そのままでは計算に使えません。
だからこそ、int(input(...)) や float(input(...)) のようにインラインで書くパターンをよく目にします。もしユーザーが数値として解釈できない文字列を入力した場合、int() は ValueError を送出します。この扱いについては、例外処理の章できちんと取り上げます。
プロンプト文字列は省略できる
プロンプトの文字列を渡さなくても input() は動きますが、その場合はただ黙って入力待ちになるだけです。ユーザーからすれば何を求められているのか分からず、ほぼ間違いなくバッドプラクティスです。次のように、分かりやすいプロンプトを必ず渡しましょう。
余計な処理は一切なし
ユーザーが入力した内容は、前後の空白も含めてそのまま返ってきます。もし前後の空白を取り除きたい場合は、.strip() を呼び出しましょう。
ちょっとしたプログラムを書いてみる
ここまでの内容を組み合わせて、ユーザーに情報を聞いてから簡単なレポートを出力する、数行のプログラムを作ってみましょう。
12行。コードというより、上から順に読める手順書みたいに見えるはずです。このドキュメント全体で推しているのは、まさにこういうスタイルです。
printでデバッグするのはアリ?
「本物の開発者はデバッガを使う。printデバッグなんて素人のやること」みたいな意見を耳にすることがありますが、これはちょっと言いすぎです。printは立派なデバッグツールで、とくに小さなスクリプトやちょっとした実験には十分すぎるほど役に立ちます。試行錯誤しているうちは遠慮なくprintをあちこちに仕込んで、用が済んだら消せばいいだけの話です。
ちょっとした便利テクを2つ紹介します。
f文字列の中に = を書くと、変数名と値の両方を表示してくれるので、print("name =", name) のような定型文を毎回書かずに済みます。
次のステップへ
print と input を組み合わせれば、「尋ねる・受け取る・返す」という対話の流れがひと通り作れるようになりました。次の章からは、ここに 条件 を加えていきます。if 文と各種演算子を使って、受け取った値に応じてプログラムの動きを変えていく話です。
よくある質問
print()は何をしてくれる関数?
ターミナルに値を出力する関数です。print("hello") と書くと hello が表示され、その後ろに自動で改行が入ります。カンマ区切りで複数の値を渡すこともでき、その場合はデフォルトで値の間に半角スペースが挟まれます。
input()はどういう動きをする?
input(prompt) を呼び出すと、プログラムは一時停止し、引数で指定したプロンプトを表示してユーザーの入力待ちになります。Enterが押されると、入力された内容が文字列として返ってきます。数値として扱いたい場合は int(...) や float(...) で必ず変換してください。
改行せずに同じ行に出力するには?
print に end="" を渡せばOKです。print はデフォルトで末尾に改行 (\n) を付けますが、end を空文字や他の文字に指定すれば、その改行を置き換えられます。複数の print の出力を同じ行に並べたいときに便利です。