4. プログラムの入力と出力を扱おう

プログラミング言語には「入力」と「出力」を扱う関数が用意されています。

  • 入力(にゅうりょく):実行中のプログラムに値を入れられます

  • 出力(しゅつりょく):実行中のプログラムが、式の評価結果を表示します

出力、入力の順で、関数を紹介します。 この章でも、対話モードに入力しながら読み進めてくださいね。

4.1. 値を画面に表示する関数

print 関数は、渡した 引数の値を画面に表示 します。

../_images/4-12-print-document.png

print 関数のドキュメント

値を画面に表示する関数

箱の名前

print

箱は何をするか

引数の値を画面に表示する

箱に入れるもの

箱から出てくるもの

なし

4.1.1. 1つだけ引数を渡す

整数 123print 関数に渡すと、それが画面に表示されます。

>>> print(123)
123
../_images/4-13-print_box_image.drawio.png

画面に123と表示する。返り値はない

print 関数の引数として、数値だけでなく文字列も渡すことができます。

>>> print("こんにちは!")
こんにちは!

引数として変数や式を渡したときは、評価結果の値print 関数に渡されることになります。

>>> banzai = "万歳!"
>>> print(banzai)
万歳!
../_images/4-14-print_pass_variable.drawio.png

変数の指す値が表示される

4.1.2. 複数の引数を渡す

print 関数には、2つ以上 の引数(値や式)を渡せます。 複数の引数は、カンマ,で区切り ます。

>>> a, b = 4, 6
>>> print(a, "×", b, "=", a * b)  # ((×は「かける」を変換して出せます))
4 × 6 = 24

複数の引数を渡したときは、左の引数から順に表示され、半角スペースが1つずつ入ります(見やすいですよね)。

../_images/4-15-print_pass_variables.drawio.png

複数の引数を渡したときは、それらを表示する

4.1.3. print 関数の使い所

対話モードに変数を使った式を入力すれば、print 関数なしでも評価結果を確認できますよね。 「なぜ print 関数を使うのだろう」と疑問に思うかもしれませんね。

実はプログラミングは、対話モードではあまり行いません。 ファイル に文を書いていきます。 対話モードに入力した式や文をプログラムと呼んできましたが、文がいくつも書かれたファイルをプログラムと呼ぶのが一般的です。 処理系にファイル(プログラム)を実行させ て、まとまった処理の結果を得ます。

ファイルを実行する中で、変数の指す値を表示したい とき、print 関数の出番です。 6 章3大構造 一. 順次」から対話モードの代わりにファイルを使い始めます。 print 関数も頻繁に使いますよ!

[発展] 返り値のない関数と「副作用」

print 関数は返り値のない関数です。 ただ、処理の中で画面の状態を変えています。

プログラミングの関数は一般に、返り値を持たないときになにかの状態を変えます。 状態を変えるとは、画面に表示したり、ファイルを新規作成したりすることです。 なにかの状態を変えることを 副作用 と呼びます。

4.2. 入力を受け取る関数

input 関数で、プログラム実行中に入力を受け取ります。

../_images/6-3_input_document.png

input 関数のドキュメント

入力を受け取る関数

箱の名前

input

箱は何をするか

入力を受け取る(改行されるまで)

箱に入れるもの

文字列(プロンプトとして表示できる。何も入れなくてもよい)

箱から出てくるもの

文字列(改行されるまでの入力)

4.2.1. プログラム実行中に入力する

対話モードの様子がこれまでと少しだけ違うので、画像も使って説明します。

まず、input() と入力し、Enterキーを押します。

../_images/6-1_input_interactive_shell.png

これは input 関数の評価中で、キーボードからの入力を待っている 状態です。 試しに「こんにちは」と入力してEnterキーを押してみましょう(Enterキーで改行したことになります)。

../_images/6-2_input_return_value.png

文字列 'こんにちは' が表示され、プロンプト >>> が再び現れました。 input() の後に入力した「こんにちは」が、input 関数の返り値となったのです。 別の入力で input 関数を試してみてください。

input 関数の挙動は、今後は以下のように表します。

>>> input()  
こんにちは  # ((input()に続く行で「こんにちは」と入力したことを表します))
'こんにちは'

4.2.2. プロンプトの文字列を渡す

input 関数には、文字列の引数を渡せます。 渡した文字列の後から入力できるようになります。

>>> namae = input("名前を入力してください:")  
名前を入力してください:

入力してほしい内容を示す文字列input 関数に渡します。

引数が渡されたときも、私たちが入力した値が input 関数の返り値となります。 引数の文字列は、返り値とは関係ありません。

>>> input("名前を入力してください:")  
名前を入力してください:nikkie  # ((お好きな名前を入力してください))
'nikkie'

4.2.3. input 関数の返り値を変数に代入

関数の返り値は変数に代入できますね。 input 関数の返り値を変数に代入すれば、プログラム実行中に私たちが入力した値を代入 したことになります!

>>> namae = input("名前を入力してください:")  
名前を入力してください:nikkie

返り値を変数 namae に代入しました。 対話モードへの表示はありませんね。 では、変数の指す値を確認しましょう。

>>> namae
'nikkie'

input 関数を使って、私たちが入力した値(Enterキーを押すまでに入力した値)を変数で扱う方法が分かりました。

4.3. 練習問題

input 関数と print 関数を使って、入力した名前を「〇〇さん、ごきげんよう」と表示してください。

[解答]

入力した名前を変数に代入する方法は、input 関数の紹介で知っていますね。 input 関数の返り値は文字列ですから、文字列を連結して print 関数に渡しましょう。

>>> namae = input("名前を入力してください:")  
名前を入力してください:nikkie
>>> print(namae + "さん、ごきげんよう")
nikkieさん、ごきげんよう

[発展] 文字列の新しい書き方:f文字列(エフもじれつ)

変数を代入した文字列があるとき、別の文字列と連結する方法をすでに知っていますね(1 章 参照)。

>>> namae = "susumuis"
>>> namae + "さん、ごきげんよう^o^"
'susumuisさん、ごきげんよう^o^'

これと同じことを実現する新しい方法「f文字列(f-string)」を紹介します。 f を付けて始めた文字列の中の {変数} は、変数が指す値 として評価されます。

>>> f"{namae}さん、ごきげんよう^o^"
'susumuisさん、ごきげんよう^o^'

{namae} は namae が指す文字列 "susumuis" に置き換わっていますね。

文字列の始まりのシングルクォートまたはダブルクォートの前に f を付けるのがポイントです。 先頭に f が付くので、f文字列と呼ばれます。

fを付けない場合は、変数は指す値に置き換わりません。

>>> "{namae}さん、ごきげんよう^o^"
'{namae}さん、ごきげんよう^o^'

fを付けないと {namae} がそのまま含まれた文字列になりました。

変数 namae に別の値を代入すると、できあがる文字列も変わります。

>>> namae = "nao_y"
>>> f"{namae}さん、ごきげんよう^o^"
'nao_yさん、ごきげんよう^o^'

複数の変数の値を入れた文字列 を作りたいとき、f文字列は連結よりもスッキリ書けるので重宝しますよ。

[コラム] プログラミング言語における新しい書き方との向き合い方

上のコラムで紹介したf文字列は、Pythonのバージョン3.6から使える書き方です。 Pythonは1990年代からありますが、f文字列は2010年代後半から使えるようになりました。 比較的最近ですね。

私たちが使う言葉には、常に新しい言い回しが現れますね。 例えば、「エモい」「わかりみ」「オブです」などなど。

同じようにプログラミング言語にもどんどん新しい書き方が現れます。 新しい書き方は、これまでの書き方の 不便なところを解消 するものです。 プログラマーの世界はどんどん変わっていくので、新しいものを歓迎する姿勢で使ってみるのをおすすめします。