Python超入門② 変数・入力・計算を覚えよう
Pythonの変数とinputを、おにぎりの合計金額を計算しながら学びます。文字と数字の違い、型変換、よくあるエラー、練習問題の解答まで順を追って説明します。
「変数に値を代入します」と言われても、最初は「それで、何ができるの?」となりますよね。
今回は、おにぎりの値段と個数から合計金額を出すプログラムを作ります。同じ計算でも、数字を毎回書き直す段階から、キーボードで入力して使える段階へ進めてみましょう。
この回のゴールと準備
読み終わったら、次の3つを自分で書けることが目標です。
- 値に名前を付け、後から使う
- 入力された文字を、計算に使える数へ変える
- 計算した結果を、文章に入れて表示する
コードはPython 3用です。各コード欄は別々の例なので、1つずつ実行してください。入力のある例では、実行後に入力欄やターミナルで値を打ち、Enterを押します。ターミナルは、文字で操作するための画面のことです。
まだ表示の方法が分からなければ、第1回のprintと実行方法からどうぞ。
1. 変数は「値に付ける名前」と考えよう
まずは数字だけで計算する
150円のおにぎりを3個買うとき、合計はこう書けます。
print(150 * 3)
実行結果は 450 です。* は掛け算の記号。これだけでも計算はできますが、数字だけだと何の金額なのか分かりにくいですね。
数字に名前を付ける
price = 150
count = 3
total = price * count
print(total)
結果は同じく 450。今度は price が1個の値段、count が個数、total が合計を表しています。こうした名前を変数と呼びます。
price = 150 は、150 という値を price という名前で使えるようにする操作です。これが代入。数学の「左右が等しい」という宣言とは違い、右側を求めて、左側の名前に結び付けると読んでください。
| 実行した行 | その時点で使える値 |
|---|---|
price = 150 |
price は150 |
count = 3 |
price は150、count は3 |
total = price * count |
150 × 3を計算し、total は450 |
print(total) |
total の450を画面に表示 |
print() は表示するための関数です。関数の作り方は後の回で学ぶので、ここでは「かっこに入れたものを表示する道具」と思っておけば大丈夫です。
値を変えても、過去の計算はやり直されない
ここ、少し引っかかりやすいところです。
price = 150
count = 3
total = price * count
count = 4
print(count)
print(total)
4
450
「あれ、600にならないの?」と思ったら、読み順を確認してみましょう。
total を計算した時点では、count は3でした。後で count を4に変えても、total が自動的に再計算されるわけではありません。600にしたいなら、count = 4 の後でもう一度 total = price * count を実行します。
変数の名前は、表計算ソフトの「常に更新される計算式」とは違うんですね。Python公式の代入の説明でも、右側の結果を名前に結び付ける操作として定義されています。
2. 数字と文字は、見た目が同じでも別物
よく使う4つの型
型(かた)は、データの種類です。最初は、次の4つを見分けられれば十分です。
| 型 | どんな値か | 例 |
|---|---|---|
int |
整数 | 150、-3 |
float |
小数などを扱う数値 | 2.5、150.0 |
str |
文字列。文字を並べたデータ | "おにぎり"、"150" |
bool |
正しい・正しくないを表す値 | True、False |
文字列は、半角の " " または ' ' で囲みます。数字が書いてあっても、"150" は文字列です。
print(150 + 20)
print("150" + "20")
170
15020
1行目は数の足し算。2行目は文字を後ろにつなぐ処理です。同じ + でも、扱う型によって動きが変わります。
迷ったらtypeで確かめる
price = 150
text = "150"
print(type(price))
print(type(text))
<class 'int'>
<class 'str'>
type() は型を調べる道具です。出力の int と str を見れば、「計算用の数なのか、文字なのか」を判断できます。表示された class という言葉は、今は覚えなくて大丈夫です。
変数名は total_price のように意味の分かる名前にしましょう。2price のように数字から始める名前や、途中に空白が入る名前は使えません。print や input を変数名に使うと、同名の道具を呼び出せなくなるので避けます。
3. inputで入力を受け取ろう
まずは名前を聞く
name = input("名前を入力してください: ")
print(f"こんにちは、{name}さん")
例えば あおい と入力すると、次のようになります。最初の行の「あおい」は自分で入力する部分です。
名前を入力してください: あおい
こんにちは、あおいさん
流れを分けると、こうです。
input()が「名前を入力してください: 」と表示する- 入力してEnterを押すまで待つ
- 入力された文字列が
nameに入る - 次の行で、あいさつを表示する
f"こんにちは、{name}さん" のように、引用符の前に f を付けた書き方をf文字列と呼びます。{name} の位置に変数の値を入れられるので、文章を作るのに便利です。
数字を入れても、inputの結果は文字列
count_text = input("個数: ")
print(type(count_text))
3 と入力しても、型は str です。入力が数字に見えるからといって、Pythonが自動で整数に変えてくれるわけではありません。
そのため、計算には型変換が必要です。型変換とは、データを別の種類の値へ変えること。整数にするなら int()、小数を扱うなら float() を使います。
count_text = input("個数: ")
count = int(count_text)
print(count + 1)
3 を入れると 4 が表示されます。いきなり短く書かず、「入力」と「変換」を分けると、何をしているのか追いやすいですよね。input・int・floatの公式説明も、この違いを確認する際に使えます。
4. 合計金額を出すプログラムを完成させよう
次の例は、価格と個数に0以上の整数を入力して使います。不正な入力を受け付け直す処理は、まだ入れていません。
price_text = input("1個の価格(円): ")
count_text = input("個数: ")
price = int(price_text)
count = int(count_text)
total = price * count
print(f"合計は{total}円です")
入力と実行結果の例です。
1個の価格(円): 150
個数: 4
合計は600円です
今度は処理を3段階に分けて見てみましょう。
- 入力:
input()で、利用者が入れた文字を受け取る - 計算:文字を整数に変え、価格と個数を掛ける
- 表示:合計金額を文章に入れて出す
この「入力 → 計算 → 表示」は、別のプログラムでも何度も使う考え方です。値を変えるだけで違う買い物に使えると、少し道具らしくなってきますね。
仕組みが分かってきたら、price = int(input("1個の価格(円): ")) のように入力と変換を1行にまとめても構いません。その場合は、内側の input() から先に動きます。
5. 計算の記号と、つまずきやすいところ
計算の記号を使い分ける
| 記号 | 計算 | 例と結果 |
|---|---|---|
+ |
足し算 | 7 + 2 は9 |
- |
引き算 | 7 - 2 は5 |
* |
掛け算 | 7 * 2 は14 |
/ |
割り算 | 7 / 2 は3.5 |
// |
商を、それ以下の整数へ丸める | 7 // 2 は3 |
% |
余り | 7 % 2 は1 |
** |
べき乗 | 7 ** 2 は49 |
// は「小数部分を取り除く」と覚えると、負の数で困ります。例えば -7 // 2 は -3 ではなく -4 です。-3.5以下で最も大きい整数が-4だからです。
計算の順序は、* や / が + や - より先です。先に足したい場合は () で囲みます。公式チュートリアルの計算例と合わせて確認できます。
「3.5」をintへ渡すと止まる
int("3.5") は整数の表記ではないため、ValueError というエラーになります。小数を入力したいなら float() を使います。
一方、int(3.5) は数値からの変換なので3になります。同じ「3.5」でも、文字列からなのか、数値からなのかで違う点に注意してください。
int("三") や、何も入力しなかったときの int("") も失敗します。入力に間違いがあっても動き続ける仕組みは、エラーとファイル操作の回で扱います。
小数の計算が少しずれることもある
print(0.1 + 0.2)
一般的なPython 3の環境では、0.30000000000000004 と表示されます。「計算を間違えた?」と驚くかもしれません。
float は、すべての小数をぴったり保存できるわけではなく、近い値を使うことがあります。詳しくはPython公式の小数計算の説明へ。今回のように円単位で扱う金額なら、整数で計算するとこの問題を避けやすくなります。
6. 練習:長方形の面積を計算しよう
横幅と高さを入力し、長方形の面積を表示してください。
条件は次のとおりです。
- 小数も入力できるようにする
- 横幅と高さは同じ単位の、0より大きい数を入力する
- 横幅が2.5、高さが4なら、面積は10.0になる
まずは「入力を受け取る」「数へ変える」「掛ける」「表示する」の4つに分けて考えてみてください。
模範解答
width_text = input("横幅: ")
height_text = input("高さ: ")
width = float(width_text)
height = float(height_text)
area = width * height
print(f"長方形の面積は{area}です")
横幅: 2.5
高さ: 4
長方形の面積は10.0です
解説:どの値が、どこへ進む?
width_textは文字列"2.5"を受け取ります。float()で数値2.5へ変え、widthで使えるようにします。- 高さも同じように変換します。
"4"はfloatの4.0になります。 - 2.5 × 4.0を計算し、結果10.0を
areaに代入します。 - f文字列で
areaの値を文章へ入れます。
ここで int() を使うと、"2.5" の変換に失敗します。「どんな値を入力してほしいか」に合わせて型を選ぶのがポイントです。負の値を断る処理はまだないので、実用向けにするなら次のif文の知識も必要になります。
まとめと次の一歩
この回で押さえたいのは、たくさんの記号よりも「文字として受け取ったものを、計算できる数に変える」という流れです。
input() の結果が文字列だと分かっていれば、数字がくっついたり、計算で止まったりしても、原因を探しやすくなります。エラーが出たときは、エラー表示の読み方も役立ちます。
次は「入力した値が条件を満たすときだけ動く」処理を作ってみましょう。
前の記事:Python超入門① 最初のプログラム