Programmierkurs
für Naturwissenschaftler/innen

変数と値

ここでは、変数と基本的な演算子について学ぶ。

変数とはなにか

変数とは、何かを記憶 (保存) するものである。 箱で説明されることもあるが、ここではホワイトボードだとしよう。

/images/whiteboard-empty.png
ホワイトボード (変数のメタファー)

このホワイトボードを使うにはまず名前を付けなくてはいけない。 例えば a という名前を付けておこう。

/images/whiteboard-a-empty.png
a という名前を付けた

このホワイトボードには「一つの」情報を書くことができる。 例えば、120 という一つの数字を書いてみよう。

/images/whiteboard-a-120.png
120 という数字を保存

この情報を書き変えることもできるが、その場合は以前の情報は消えてしまう。 つまり上書きしかできない。

例えば、新たに 226 という情報を残したければ、以前の情報は消えてしまう。 ただし、プログラムを書く際は明示的に消す必要はなく、新しい情報を書くと古い情報は自動的に消えてしまう (ファイルの上書きと似ている)。

/images/whiteboard-a-120-erased.png
新しい情報を書くために、古い情報を消す (自動的に行われる)
/images/whiteboard-a-226.png
新しい情報 "226" を記録

これをプログラムとして書くと以下のようになる。

a = 120    # a という名前のホワイトボードを作成し、そこに 120 という数字を入れる
a = 226    # a に 226 という数字を入れる (上書き)

Python では初めて値を入れる際に自動的に変数が作られる。 従って上のプログラムは、

一行目

a という名前の変数を作り、そこに 120 という値を書く

二行目

一行目で作った a という変数に 226 を上書きする

という意味になる。 # から行の最後まではコメントであり、入力しなくても良い。

この変数 a に値を保存 (代入という) するには、 a = 120 のように等号 = を使う。 変数と値の場所はそれぞれ = の前及び後である。 この順番は逆にはできない。 これは、疑似プログラム(処理を流れを示すためのプログラムっぽい記法) では a ← 120 などと書くこともある。

a ← 120    # Pseudocode

上のプログラムを実行しても何も起こらない。 正確には、コンピューター内部では正しく処理されているのだが、その結果が表に出てこないので何も起こっていないように見える。 従ってこのままでは何が起こっているか分かりにくいから、値を表示させてみよう。 そのためには以前のように print() を使う。

  1. 上のプログラムをテキストボックスに入力し、下の Run を押して実行してみよ。 (何も起こらないのが正解である)。

  2. 次に、以下のプログラムをテキストボックスに入力し、下の Run を押して実行してみよ。

いずれもコメント (# とその行末まで) は入力しなくてもよい。

a = 120        # a という名前のホワイトボードを作成し、そこに 120 という数字を入れる
print(a)       # (現在の) a の中身を表示

a = 226        # a に 226 という数字を入れる (上書き)
print(a)       # (現在の) a の中身を表示

実行結果

ある変数の値を別の変数に代入することもできる。 例えば、 ba の値を代入するのであれば、

b = a        # b に a の値を入れる

と書く。 これも疑似プログラムでは

b ← a    # Pseudocode

などと書く。 ba の順番を変えられない (意味が変わってしまう) ことに注意しよう。

以下のプログラムをテキストボックスに入力し、下の Run を押して実行してみよ。 何が起こっているか説明せよ。

また、 b = aa = 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

次のプログラムを実行すると何が起こるか、考えよ。 その後に このプログラムをテキストボックスに入力し、下の Run を押して実行してみよ。 予想と結果が一致していたか確認せよ。

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)

ここでは厳密な規則は説明しない。 変数名には以下の文字が使える。

  • 英字

    • 大文字・小文字を区別する。すなわち aA は異なる変数である

  • 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

と書ける。

これはあくまで $3.0\cdot10^8$ のような書きかたができないプログラム特有の書き方であるから、レポートなどの文書やグラフ等では e-記法は使うべきではない

数学定数

一部の数学定数は、特別な準備をすることで使うことができる。 具体的には 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 の浮動小数点数 (小数点を含む数字と考えてよい) に関する制限である。 整数は制限がない。但し 3.0 や 3e10 は浮動小数点数扱いになるので注意。

まとめ

このページでは変数について学んだ

  • 変数とは数値や文字列を記憶する場所である (このページではホワイトボードで例えた)

  • Python では最初の代入で変数が作られる

  • 変数は新しい情報で上書きできる

  • 変数には適切な名前を付けるように心掛けるべきである


1

厳密に言うと必ずしも最初でなくても良いのだが、ほとんどの場合は最初に書く。