ここでは、変数と基本的な演算子について学ぶ。
変数とはなにか
変数とは、何かを記憶 (保存) するものである。 箱で説明されることもあるが、ここではホワイトボードだとしよう。
このホワイトボードを使うにはまず名前を付けなくてはいけない。
例えば a
という名前を付けておこう。
このホワイトボードには「一つの」情報を書くことができる。 例えば、120 という一つの数字を書いてみよう。
この情報を書き変えることもできるが、その場合は以前の情報は消えてしまう。 つまり上書きしかできない。
例えば、新たに 226 という情報を残したければ、以前の情報は消えてしまう。 ただし、プログラムを書く際は明示的に消す必要はなく、新しい情報を書くと古い情報は自動的に消えてしまう (ファイルの上書きと似ている)。
これをプログラムとして書くと以下のようになる。
a = 120 # a という名前のホワイトボードを作成し、そこに 120 という数字を入れる
a = 226 # a に 226 という数字を入れる (上書き)
Python では初めて値を入れる際に自動的に変数が作られる。 従って上のプログラムは、
- 一行目
-
a
という名前の変数を作り、そこに 120 という値を書く - 二行目
-
一行目で作った
a
という変数に 226 を上書きする
という意味になる。
#
から行の最後まではコメントであり、入力しなくても良い。
この変数 a
に値を保存 (代入という) するには、 a = 120
のように等号 =
を使う。
変数と値の場所はそれぞれ =
の前及び後である。
この順番は逆にはできない。
これは、疑似プログラム(処理を流れを示すためのプログラムっぽい記法) では
a ← 120
などと書くこともある。
a ← 120 # Pseudocode
上のプログラムを実行しても何も起こらない。
正確には、コンピューター内部では正しく処理されているのだが、その結果が表に出てこないので何も起こっていないように見える。
従ってこのままでは何が起こっているか分かりにくいから、値を表示させてみよう。
そのためには以前のように print()
を使う。
-
上のプログラムをテキストボックスに入力し、下の Run を押して実行してみよ。 (何も起こらないのが正解である)。
-
次に、以下のプログラムをテキストボックスに入力し、下の Run を押して実行してみよ。
いずれもコメント (#
とその行末まで) は入力しなくてもよい。
a = 120 # a という名前のホワイトボードを作成し、そこに 120 という数字を入れる
print(a) # (現在の) a の中身を表示
a = 226 # a に 226 という数字を入れる (上書き)
print(a) # (現在の) a の中身を表示
ある変数の値を別の変数に代入することもできる。
例えば、 b
に a
の値を代入するのであれば、
b = a # b に a の値を入れる
と書く。 これも疑似プログラムでは
b ← a # Pseudocode
などと書く。
b
と a
の順番を変えられない (意味が変わってしまう) ことに注意しよう。
また、 b = a
を a = b
と書きかえると何が起こるか? それはなぜか?
a = 120
b = 10
print("before: a =", a, "b =", b)
b = a # a = b に変えると何が起こる?
print("after: a =", a, "b =", b)
変数の内容の変更
上に書いたように、変数の値は変更できる。
実際のプログラムを書くと (現在の値は分からないが、とにかく) a
の値を 1 増やしたい、という場面が良くある。
その場合は、以下のように書く。
a = a + 1
これを数式として見てしまうと「間違っている」となってしまうが、これの意味は、
「『現在の a
足す 1』を計算し (右辺)、その結果を a
に保存する」となる。
これは疑似プログラムでは a ← a + 1
と書くこともある。
a ← a + 1 # Pseudocode
a = 100
print(a)
a = a + 10
print(a)
a = a + 20
print(a)
文字列
これまでは数字を扱ってきたが、文字列を使うこともできる。
str = "Hello, world"
print(str)
こんな感じである。
Python では文字列に対しても +
が使え、これは結合を意味する。
str1 = "First string"
str2 = "Second string"
# 三つの文字列 (str1, スペース, str2) を結合
str3 = str1 + " " + str2
print(str3)
print(str1 + " is first string.")
変数同士の計算
計算する方法については 演算子 で詳しく述べるが、予習がてら簡単な計算をしてみよう。
a = 100
b = 50
c = a + b
print(c)
ほぼ自明であろうが、一応実際に試してみよう。
このプログラムを以下に入力し、実行してみよ。
変数名 (1)
ここでは厳密な規則は説明しない。 変数名には以下の文字が使える。
-
英字
-
大文字・小文字を区別する。すなわち
a
とA
は異なる変数である
-
-
2文字目以降に数字を使ってもよい
-
数字で始めることはできない。例えば
1a
は変数名としては使えない
-
-
アンダースコア
_
も使える-
但し
_
から始めるのは望ましくない (通常_
から始めるのは、何か特別な意味がある場合のみである)
-
-
一部使えない名前がある:
for
など (Python ですでに使われているから)
ほかにも使える文字はあるが、最初は英数字のみにしておくのが無難である。
変数名 (2)—より良く書くために
変数名は規則に従っていればどのような名前でも良いが、良い変数名・悪い変数名というのはある。 状況にもよるので、絶対的なルールがある訳ではないが、
-
ループカウンター (繰り返し (ループ) 参照) は
i
,j
,k
等を使うのが一般的である -
整数は
n
,m
などを使うことが多い -
上は例外的な場合で、それ以外では、長くても分かりやすい名前が良い
-
名前は内容を表わすものであるべき
-
一つの変数を複数の目的に使わない
などは意識しておいて欲しい。
ループについては後で学ぶが、例えば、
for loop1 in range(10):
...
は避けるべきで、よほど特別な理由が無い限り、(loop1
等ではなく) 慣例通り i
, j
, k
等を使うべきである。
また、
string = 0 # え? 文字列じゃないの?
number = "Hello" # number とは?
はプログラムとしては正しく動くが、名前と内容が一致していないので良くない。
Python では、
a = 0
print(a)
a = "Hello, world"
print(a)
と書くことも可能ではあるが、変数を全く関係のない二つの役割に使用していて、良くない書きかたである。 一つの変数は一つの目的に使うべきである。
数値の書きかた
これまで見てきたように、数値は 0
, 100
, -10
などと書ける。
小数も 1.3
, -0.15
などと書ける。
特別な書き方として、e-記法がある。
例えば $3.0\cdot10^8$、$1.38\cdot10^{-23}$ はそれぞれ
3.0e8
1.38e-23
と書ける。
数学定数
一部の数学定数は、特別な準備をすることで使うことができる。
具体的には import math
という文をプログラムの最初1 に書く。
この一文を書くと、以下の定数が使えるようになる。
$\pi$ | math.pi |
$3.14159\cdots$ |
$\mathrm{e}$ | math.e |
$2.71828\cdots$ |
$\tau$ $(= 2\pi)$ | math.tau |
$6.28318\cdots$ |
例えば次のように使う。
import math
# 半径 r の円の面積を求める
r = 10
area = r * r * math.pi
print(area)
数値の範囲
詳細及び厳密な値については割愛するが、およそ $\pm10^{-308}$ と $\pm10^{+308}$ の間の数値が使える。 逆に言うと、以下は使えない:
-
$10^{+1000}$ など $10^{308}$ より大きな値
-
$-10^{+1000}$ など $-10^{308}$ より小さな値
-
(0 以外の) $-10^{-308}$ と $10^{-308}$ の間の値
具体的な数値を覚える必要は全くないが、「表現できる数値には限度がある」という点だけはしっかり押さえておこう。
まとめ
このページでは変数について学んだ
-
変数とは数値や文字列を記憶する場所である (このページではホワイトボードで例えた)
-
Python では最初の代入で変数が作られる
-
変数は新しい情報で上書きできる
-
変数には適切な名前を付けるように心掛けるべきである
厳密に言うと必ずしも最初でなくても良いのだが、ほとんどの場合は最初に書く。