コンテンツにスキップ

第3回:入力と出力

前回の内容(変数、データの型、算術演算、型の変換)は 第2回 を見直そう。

今日話すこと

  • input() で入力を受け取る
  • 入力と型の変換
  • print() の使い方を広げる
  • f文字列と書式指定

前回の話を思い出そう

前回は height = 1.70 のように、値をプログラムに直接書いた。でも…

  • 別の人の値で計算するたびに、プログラムを書きかえるのだろうか
  • プログラムを読めない人は、使えないのだろうか

使う人が、実行中に値を入れられるようにしたい。これが 入力 である。

入力があると何がうれしい?

入力  →  処理  →  出力

プログラムは「入力を受け取り、処理して、出力する」ものである。

身近な例 入力 出力
自動販売機 お金とボタン 飲み物
検索 キーワード 検索結果
ゲーム 操作 画面の変化

前回までは「処理 → 出力」だけだった。今日で3つがそろう。

input() で入力を受け取る

変数 = input('表示するメッセージ')
  • 実行すると、コンソールで入力を待つ。コンソールをクリックして入力し、Enter を押す
  • 入力された内容が、変数に代入される
  • メッセージは省略できる(x = input())
name = input('名前を入力してください:')
print('こんにちは、' + name + 'さん')

実行例:

名前を入力してください:古池
こんにちは、古池さん

input() の結果は、いつも文字列

数字を入力しても、input() の結果は文字列(str)である。

age = input('年齢:')
print(age + 1)
TypeError: can only concatenate str (not "int") to str

計算に使うときは、int() や float() で変換する。前回の「型の変換」が、ここで役に立つ。

age = int(input('年齢:'))
print(age + 1)
入力したいもの 書き方
整数 int(input('…'))
小数 float(input('…'))
文字列 input('…')

小数を表す文字列は、int() では変換できない。int('3.5') はエラーになるので、float() を使う。

演習3-1

次のプログラムを実行し、5 と入力したときの出力を、予測してから確かめよう。

x = input('数を入力:')
print(x * 2)
print(int(x) * 2)

もう一歩

3.5 と入力すると、どうなるだろうか。エラーを読んで直そう。

ヒント
  • x に入っているのは、数だろうか、文字列だろうか。type(x) で確かめられる。
  • 前回の「文字列の演算」を見直そう。

コメント

# から行の終わりまでは コメント で、実行されない。

  • プログラムの説明やメモを書ける
  • 行の先頭に # をつけると、その行を一時的に無効にできる
# 合計金額を計算する
price = 120
count = 3
total = price * count  # 税抜き
# print(price)
print(total)

実行結果:

360

print() にいくつも渡す

  • カンマで区切ると、いくつでも渡せる。間に空白が入って表示される
  • 数値もそのまま渡せる(str() はいらない)
  • sep='' をつけると、間の空白をなくせる
print('合計は', 360, '円')
print('合計は', 360, '円', sep='')

実行結果:

合計は 360 円
合計は360円

f文字列

f'…{変数}…' と書くと、{ } の部分が値に置きかわる。先頭の f を忘れないこと。引用符は ' ' でも " " でもよい。

  • { } の中には、式も書ける
  • str() と + でつなぐより、読みやすい
name = '古池'
age = 20
print(f'{name}さんは{age}歳です')
print(f'来年は{age + 1}歳です')

実行結果:

古池さんは20歳です
来年は21歳です

演習3-2

名前と年齢を入力すると、「◯◯さんは、来年△歳です」と表示するプログラムを作ろう。

実行例:

名前:古池
年齢:20
古池さんは、来年21歳です

もう一歩

年齢に何も入力せず Enter を押すと、どんなエラーが出るだろうか。

ヒント
  • 名前と年齢のうち、計算に使うのはどちらか。
  • 表示には f文字列が使える。

演習3-3

次のコードを実行し、価格に 120、個数に 3 を入力しよう。エラーを読んで直し、期待どおりになるまで繰り返そう。

price = input('価格:')
count = input('個数:')
print('合計は' + price * count + '円')

期待される実行結果:

合計は360円

もう一歩

f文字列を使う直し方と、使わない直し方の両方を書こう。

ヒント
  • エラーは1つずつ出てくる。1つ直したら実行して、次のエラーメッセージを読もう。
  • エラーメッセージの最後の行に、何と何を計算しようとしたかが書いてある。

書式指定

f'{値:書式}' で、表示の形を整えられる。

書き方 結果 意味
f'{3.14159:.2f}' 3.14 小数第2位まで(四捨五入)
f'{1234567:,}' 1,234,567 3桁ごとにカンマ
f'{42:>6}' 42 幅6で右寄せ
f'{42:<6}' 42 幅6で左寄せ
  • 前回の BMI(22.49134948096886)も、f'{bmi:.1f}' で 22.5 と表示できる
  • 組み合わせもできる:f'{35000:>8,}' は、幅8・右寄せ・カンマ区切りになる

演習3-4

身長(cm)と体重(kg)を入力すると、BMI を小数第1位まで表示するプログラムを作ろう。

BMI = 体重(kg) ÷ 身長(m) の2乗

実行例:

身長(cm):170
体重(kg):65
BMIは22.5です

もう一歩

小数第2位まで表示するように変えよう。

ヒント
  • 入力は cm だが、式で使うのは m である。
  • 小数を入力できるようにするには、どの型に変換すればよいか。
  • 前回の演習2-5を思い出そう。

演習3-5

3つの金額 1200、35000、980 を、3桁ごとにカンマをつけ、右にそろえて表示しよう。

期待される実行結果:

  1,200円
 35,000円
    980円

もう一歩

幅を10に変える、左寄せ(<)に変える、で表示を比べよう。

ヒント
  • いちばん長い 35,000 は何文字か。幅はそれ以上にする。
  • 右寄せ・幅・カンマは、1つの書式にまとめて書ける。直前の「書式指定」を見直そう。

追加課題(時間があまった人向け・任意)

追加課題3-A

合計金額と人数を入力すると、1人あたりの金額(切り捨て)と余りを表示するプログラムを作ろう。

実行例:

合計金額:10000
人数:3
1人あたり3333円、余り1円
ヒント

前回の // と % を使う。

追加課題3-B

摂氏の温度を入力すると、華氏に変換して小数第1位まで表示するプログラムを作ろう。

華氏 = 摂氏 × 9 ÷ 5 + 32

実行例:

摂氏:36.5
華氏97.7度
ヒント

小数を入力できるようにするには、どうすればよいか。

追加課題3-C

秒数を入力すると、「時:分:秒」を2桁ずつで表示するプログラムを作ろう。

実行例:

秒:3725
01:02:05
ヒント
  • 書式 02 で、2桁のゼロ埋めができる(f'{5:02}' → 05)。
  • 前回の追加課題2-B(何時間何分何秒)を思い出そう。

まとめ

  • input() で、実行中に値を受け取る
  • input() の結果は、いつも文字列 → int()・float() で変換
  • print() は、カンマで区切っていくつも渡せる
  • f文字列:f'{変数}' で、値を埋めこむ
  • 書式指定:.2f(小数)、,(3桁区切り)、>8(右寄せ)

次回予告

次回は モジュールの利用とリストの基礎。あらかじめ用意された機能を取りこんで使う方法と、たくさんのデータをひとまとまりで扱う方法を学ぶ。

次回の授業冒頭に、今回の内容のミニテスト(WebClass)を行う。