プログラミング

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}さん")

例えば あおい と入力すると、次のようになります。最初の行の「あおい」は自分で入力する部分です。

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

流れを分けると、こうです。

  1. input() が「名前を入力してください: 」と表示する
  2. 入力してEnterを押すまで待つ
  3. 入力された文字列が name に入る
  4. 次の行で、あいさつを表示する

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です

解説:どの値が、どこへ進む?

  1. width_text は文字列 "2.5" を受け取ります。
  2. float() で数値2.5へ変え、width で使えるようにします。
  3. 高さも同じように変換します。"4" は float の4.0になります。
  4. 2.5 × 4.0を計算し、結果10.0を area に代入します。
  5. f文字列で area の値を文章へ入れます。

ここで int() を使うと、"2.5" の変換に失敗します。「どんな値を入力してほしいか」に合わせて型を選ぶのがポイントです。負の値を断る処理はまだないので、実用向けにするなら次のif文の知識も必要になります。

まとめと次の一歩

この回で押さえたいのは、たくさんの記号よりも「文字として受け取ったものを、計算できる数に変える」という流れです。

input() の結果が文字列だと分かっていれば、数字がくっついたり、計算で止まったりしても、原因を探しやすくなります。エラーが出たときは、エラー表示の読み方も役立ちます。

次は「入力した値が条件を満たすときだけ動く」処理を作ってみましょう。

前の記事:Python超入門① 最初のプログラム

次の記事:Python超入門③ if文で処理を分ける

← 記事一覧へ戻る