コンテンツにスキップ

第2回:変数とデータの扱い

前回の内容(実行方法、print()、書くときのルール)は 第1回 を見直そう。演習の取り組み方と生成AIとの付き合い方も、第1回のとおりである。

今日話すこと

  • 変数と代入
  • データの型(int・float・str)
  • 算術演算(// % ** など)
  • 型の変換(int()・float()・str())

前回の話を思い出そう

前回は print(43 * 21) で、計算結果を表示した。でも…

  • 計算結果を、あとでもう一度使いたい
  • 同じ値を、何度も使いたい

値に名前をつけて、とっておきたい。これが 変数 である。

変数があると何がうれしい?

買い物の合計とおつりを計算する例で比べてみよう。

# 変数なし
print(120 * 3)
print(1000 - 120 * 3)
# 変数あり
price = 120
count = 3
print(price * count)
print(1000 - price * count)
  • 値段が150円に変わったら? 変数なしは2か所、変数ありは1か所を直すだけ
  • 120 より price のほうが、何の値かわかる
  • 身近な例:買い物アプリのカート、ゲームのHP、タイマーの残り秒数。どれも「変わる値に名前をつけて、とっておく」=変数である

変数と代入

変数 = 値を入れておく、名前のついた入れ物

  • price = 120 は「変数 price に 120 を 代入 する」と読む
  • = は「等しい」ではなく、右の値を左の変数に入れる 記号である
  • 変数名を書くと、入っている値が使われる(参照)
price = 120
count = 3
print(price * count)

実行結果:

360

変数の値を変える

  • あとから別の値を代入できる(上書き)
  • a = a + 5 は「a の値を5増やす」という意味になる
  • 短く書ける:a += 5(-=、*=、/= も同じように使える)
a = 10
a = a + 5
print(a)
a += 5
print(a)

実行結果:

15
20

変数名のルール

  • 半角の英字・数字・_(アンダースコア)を使う
  • 先頭に数字は使えない(× 2nd)
  • 大文字と小文字は別の変数(price と Price)
  • if や for など、Pythonが使う単語(予約語)は使えない
  • 中身がわかる名前にする(○ price △ x)
2nd = 5
SyntaxError: invalid decimal literal

演習2-1

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

a = 5
b = a * 2
a = 1
print(a)
print(b)

もう一歩

最後に a = a + b と print(a) を足すと、何が表示されるだろうか。

ヒント
  • 1行ずつ、その時点で a と b に何が入っているかを書き出しながら追おう。
  • b = a * 2 を実行した「その時点」の a はいくつか。

データの型

型 = データの種類

型 意味 例
int 整数 3、-10
float 小数 3.14、2.0
str 文字列 'Hello'、'3'

type() で型を確かめられる。

print(type(3))
print(type(3.0))
print(type('3'))

実行結果:

<class 'int'>
<class 'float'>
<class 'str'>

算術演算子

演算子 意味 例 結果
+ 足し算 7 + 2 9
- 引き算 7 - 2 5
* 掛け算 7 * 2 14
/ 割り算 7 / 2 3.5
// 割り算の商 7 // 2 3
% 割り算の余り 7 % 2 1
** べき乗 7 ** 2 49

計算の順番:** → * / // % → + -。( ) の中が先に計算される。

演算と型

  • int どうしの + - * // % → int
  • / の結果は いつも float(6 / 2 → 3.0)
  • float が混ざると、結果は float(2 + 0.5 → 2.5)
print(6 / 2)
print(7 // 2)
print(2 + 0.5)

実行結果:

3.0
3
2.5

演習2-2

対話モードで、次の5つの式を計算しよう。入力する前に、結果を予測してから確かめよう。

17 // 5
17 % 5
2 ** 10
6 / 2
1 + 2 * 3 ** 2

もう一歩

17 // 5 * 5 + 17 % 5 は何になるだろうか。なぜそうなるのかも考えよう。

ヒント
  • 予測に迷ったら、直前の「算術演算子」と「演算と型」を見直そう。
  • 最後の式は、どの演算子が一番先に計算されるかを考えよう。

演習2-3

変数 seconds に 200 を代入し、それが「何分何秒」かを // と % で求めて、2行で表示しよう。

期待される実行結果:

3
20

もう一歩

逆に、3分20秒を秒に戻す式も書いてみよう。

ヒント
  • 1分は60秒である。
  • 「何分」は割り算の商、「何秒」は割り算の余りにあたる。

文字列の演算

  • + で連結:'AAA' + 'BBB' → 'AAABBB'
  • * で繰り返し:'ab' * 3 → 'ababab'
  • 数値と文字列は + できない
print(500 + '円')
TypeError: unsupported operand type(s) for +: 'int' and 'str'

型の変換

関数 はたらき
str(値) 文字列に変換する
int(値) 整数に変換する(小数点以下は切り捨て)
float(値) 小数に変換する
print(str(500) + '円')
print('500' * 2)
print(int('500') * 2)
print(int(9.6))

実行結果:

500円
500500
1000
9

見た目が同じでも、型が違うと結果が違う。

演習2-4

次のコードを実行し、エラーメッセージを読んで直そう。エラーが出なくなったら、結果が期待どおりか確かめよう。

price = 120
count = '3'
print('価格は' + price + '円')
print('合計は' + str(price * count) + '円')

期待される実行結果:

価格は120円
合計は360円

もう一歩

直す前に、type() で price と count の型を確かめよう。

ヒント
  • エラーメッセージの最後の行に、何と何を + しようとしたかが書いてある。
  • エラーが消えても、結果が期待どおりとは限らない。表示された合計をよく見よう。

演習2-5

height = 1.70(m)、weight = 65.0(kg)を代入し、BMI(体重 ÷ 身長の2乗)を計算して表示しよう。2行目には、小数点以下を切り捨てた値を表示しよう。

期待される実行結果:

22.49134948096886
22

もう一歩

小数第1位まで(22.4)を表示するには、どうすればよいだろうか。

ヒント
  • 「身長の2乗」は ** で書ける。括弧は必要だろうか。計算の順番を思い出そう。
  • 小数点以下の切り捨てには、型の変換が使える。

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

追加課題2-A

変数 n に 1234 を代入し、千の位・百の位・十の位・一の位を、// と % を使って1行ずつ表示しよう。n を 5678 に変えても正しく動くか確かめよう。

期待される実行結果:

1
2
3
4
ヒント

// 10 で一の位を切り落とし、% 10 で一の位だけを取り出せる。

追加課題2-B

変数 seconds に 10000 を代入し、それが「何時間何分何秒」かを求めて、3行で表示しよう。

期待される実行結果:

2
46
40
ヒント

1時間は3600秒である。演習2-3(何分何秒)を思い出そう。

追加課題2-C

次のプログラムの「ここで入れ替える」に処理を書いて、a と b の中身を入れ替えよう。

a = 3
b = 5
# ここで入れ替える

print(a)
print(b)

期待される実行結果:

5
3
ヒント
  • a = b と b = a だけでは、うまくいかない。なぜだろうか。演習2-1を思い出そう。
  • 変数をもう1つ使ってよい。

まとめ

  • 変数=値に名前をつけて、とっておく。= は代入
  • 型:int・float・str。type() で確かめる
  • // は商、% は余り、** はべき乗。/ の結果は float
  • 型が違うと + できない → str()・int()・float() で変換
  • エラーが出なくても、結果を確かめる

次回予告

次回は 入力と出力。input() でキーボードから値を受け取り、出力を読みやすく整える方法を学ぶ。

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