こんにちは、ナナです。
プログラムにおいて「変数」とは、情報を記憶するための機構です。コンピュータでは様々な情報を記憶し、加工することでプログラムを動かすのです。
本記事では次の疑問点を解消する内容となっています。
では、変数の使い方を学んでいきましょう。
「変数」は情報を管理するための箱
「変数」って言えば、プログラムで使う数を記憶しておくためのものですよね。C言語だけじゃなくてやっぱり「Python」でも使うんですね。
そうだね。「変数」というものはあらゆるプログラミング言語で使われるものだから、しっかり考え方を知っておきたいね。
じゃあ、「変数」がなんなのかを改めて解説するよ。
皆さんは、日々さまざまな出来事を記憶しています。「今日のお昼に何を食べた?」「今日は何曜日?」など、答えることができますよね。
明確に意識をしていないかもしれませんが「情報を記憶して使う」というのは、私たち人間が生活の中で当たり前に行っていることなのです。
コンピュータの世界において記憶する場所は「変数」である
コンピュータの世界における情報とは「数値」です。
プログラムでは数値に対して様々な計算をしながら、加工して処理をしていきます。コンピューターも「数」を記憶しなければ、その計算ができないのです。
コンピューターに「数」を記憶させるためのものが「変数」です。
コンピュータの中には「メモリ」というハードウェアが存在します。プログラムから「メモリ」の上に「変数」を作り出すことで「数値」を記憶させることができます。
Pythonのプログラムにおける変数の作成方法
「変数」を作ることで、数を覚えておくことができるということですね。Pythonのプログラムにおいて「変数」はどのように使うのでしょうか?
はい。プログラムから変数を利用するためには、皆さんがプログラムとして「変数」を作る必要があります。
Python言語においての「変数」の作り方と使い方を覚えましょう。
プログラムで「変数」を作り出すことを「変数を定義する」と言います。
Pythonの変数定義方法
Pythonにおける変数定義の方法は、次の書式で記述します。
変数定義の書式
変数名 = 変数に設定したい値
定義例
num = 5
age = 20
Python言語で変数を作成する場合は、必ず「変数名と設定したい値をセットで書く」必要があります。つまり、変数の箱だけを用意することはできません。
箱を用意すると同時に、箱に入れるべき値を設定しておく必要があるのです。
C言語技術者の方は注意です!
C言語では「変数の箱」だけ用意することができますが、Pythonではできません。初期化を伴う変数定義しかできないイメージで捉えましょう。
プログラムから変数を定義してみよう
それではPythonのプログラムで変数を作ってみましょう。次のように定義します。
appleNum = 5 #リンゴの個数
applePrice = 200 #リンゴの価格
変数名には一部ルールはありますが、皆さんが自由に名付けることができます。
予約されている名前とは「if」や「while」などいろいろあります。
しかし、この先プログラムに慣れていくことで自然と覚えていきますので、現時点ではそれほど気にする必要はありません。
代入演算子を使った「変数」への代入とは
変数という箱に対して情報をセットすることを「代入」と呼びます。Pythonでは「代入」を行うときにイコール記号(=)を使います。
appleNum = 5 #リンゴの個数を5に設定
appleNum = 10 #リンゴの個数を5から10へ変更
「代入」は何度も実施することができ、実施すると情報が上書きされます。
この代入を示すイコール記号のことを「代入演算子」と呼びます。
数学的な左辺と右辺が等しいことを示すイコールとは、意味が異なることに注意が必要です。
ほとんどのプログラミング言語において「変数」への代入はイコール記号を使います。
変数を使って計算してみよう!
それでは、先ほど作成した変数を利用して、各数値と税込み価格を計算した結果を画面に表示してみましょう。
appleNum = 5 #リンゴの個数
applePrice = 200 #リンゴの価格
print("リンゴの個数", appleNum)
print("リンゴの価格", applePrice)
print("合計価格(税込)", appleNum * applePrice * 1.10)
リンゴの個数 5
リンゴの価格 200
合計価格(税込) 1100.0
print命令の中に変数名を書くと、変数の中の情報を画面に表示することができます。また、変数同士の掛け算や、数値との演算も可能なことがわかりますね。
変数に入れることのできる情報
先ほどのプログラムでは「変数」に対して「5」や「200」といった整数を設定しました。「変数」にはどのような情報を入れることができるのですか?
「Python」の変数には様々な情報を入れることができます。どんな情報があるのかを学んでいきましょう!
プログラミングの世界では様々な形式の情報を管理することができます。
変数で管理できる情報の種類を紹介
代表的な情報は次のものです。
種類 | 型名 | 例 | 説明 |
文字列 | str | “Hello”、”富士山” | 文字として表現される情報 |
整数 | int | 0、5、-3 | 小数のない数 |
浮動小数点数 | float | 3.14、55.5 | 小数点を含む数 |
真偽値 | bool | True、False | 「真」か「偽」の2つの数 |
他にもあるのですが、まずは最も使用頻度の高いこれらを覚えておくとよいでしょう。
name = "山田太郎" # 氏名:文字列
age = 25 # 年齢:整数
weight = 63.8 # 体重:浮動小数点数
man = True # 性別:真偽値
print(name, age, weight, man)
変数へ入れる情報の種類は途中で変えることができる
Pythonでは、変数に対して途中から情報の種類を変更することも可能です。
次のように、「age」変数に整数を代入した後に、文字列を上書きで代入することができます。
age = 25 # 年齢:整数
print(age)
age = "年齢は25歳です" # 年齢:文字列
print(age)
実行した結果は次のものになります。
25
年齢は25歳です
このように変数の情報は、代入することで別の種類に変更することもできるのです。
C言語ではありえない変数の使い方ですね。これがPythonの「変数」の特徴です。型というものに対して非常に柔軟性が高いことがわかります。
自己代入形式の変数値の更新
C言語では『自己代入』という、変数に入っている数値を利用して数値を更新する仕組みがありましたよね。
Pythonでも、『自己代入』はできますよね?
自己代入はもちろんできますよ。書き方もC言語と同じですね。
『自己代入』とは、変数に入っている数値を利用して計算を行い、再度その変数に書き戻す演算です。
自己代入を使ったプログラム
具体的なプログラムで示しましょう。変数numに「5」の値が入っている場合、+10することで変数numの中身は15に更新されます。
num = 5
# 元の変数値に対して10を加算する
num = num + 10
print(num)
15
自己代入の省略系の書き方
自己代入は省略形の書き方があります。最初は見慣れないかもしれませんが、こちらの方が簡単に書けるため利用できるようになっておくとよいでしょう。
四則演算 | 書き方 | 省略形 |
加算 | a = a + 10 | a += 10 |
減算 | a = a - 10 | a -= 10 |
乗算 | a = a * 10 | a *= 10 |
徐算 | a = a / 10 | a /= 10 |
Q&A:Pythonの「変数」に関するよくある質問
「変数」で何か質問ある人はどうぞ!
Q:変数名に日本語が使えちゃった…。大丈夫なの?
あのー、間違えて「日本語の変数名」を定義しちゃったんです。でもでも、プログラムが動いちゃったんですよー。歴史的な大発見ですよ、えっへん!
そうだね。Python3.系では日本語名も変数名にできるんだね。
だけど、日本語名の変数は慣例として使わないから、基本的に英語の名前を使ってあげるといいよ。
実はPython3系では日本語を変数名として使用することができます。プログラム例と実行結果を示しましょう。
リンゴの数 = 5
リンゴの価格 = 200
print(リンゴの数, リンゴの価格)
5 200
実践的なシステム開発では日本語名を変数に使うことはありません。このような使い方もできるよという程度で知っておけばよいでしょう。
Q:自己代入において「インクリメント」「デクリメント」の解説は?
自己代入といえば一番の代表は「インクリメント」と「デクリメント」ですよね。解説されていませんよ。忘れちゃダメですよ。
忘れてるわけじゃないんですよ。実はPythonには「インクリメント」「デクリメント」が存在しないんです。
C言語やJavaなど他の言語においては、自己代入として「+1」や「-1」をするための「インクリメント(++)」「デクリメント(--)」の演算子が用意されています。
ただ、Pythonにはこの演算子が言語としてサポートされていません。そのためPythonで「+1」「-1」をしたい時は、次のように通常の自己代入を利用するしかありません。
number = 5
# インクリメント相当の自己代入
number += 1
# デクリメント相当の自己代入
number -= 1
課題:「変数」の使い方が学べたかを確認しよう
課題1:変数への設定と表示
課題内容
自分の情報を各変数に設定し画面に出力せよ。
変数名 | 設定する情報 |
name | 氏名 |
age | 年齢 |
height | 身長(m) |
weight | 体重(kg) |
画面の表示形式は出力期待値と同じとする。
出力期待結果
氏名: 大谷翔平
年齢: 25 歳
身長: 1.93 (m)
体重: 92.1 (kg)
※本例は表示例のため実際は自分が設定した情報が表示されればよい。
変数の設定方法と表示方法を習得しましょう。
name = "大谷翔平"
age = 25
height = 1.93
weight = 92.1
print("氏名:", name)
print("年齢:", age, "歳")
print("身長:", height, "(m)")
print("体重:", weight, "(kg)")
print命令と変数の組み合わせは今後たくさん出てきます。感覚をつかんでおきましょう。
課題2:変数同士の演算
課題内容
課題1の内容から、次の内容を算出し変数に代入せよ。また算出した数値を表示せよ。
変数名 | 算出項目 | 計算方法 |
BMI | BMI | 体重(kg) ÷(身長(m) × 身長(m)) |
properWeight | 適正体重 | 身長(m) × 身長(m) × 22 |
画面の表示形式は出力期待値と同じとする。
出力期待結果
氏名: 大谷翔平
年齢: 25 歳
身長: 1.93 (m)
体重: 92.1 (kg)
BMI: 24.725495986469436
適正体重: 81.9478 (kg)
※本例は表示例のため実際は自分が設定した情報が表示されればよい。
変数を使った演算は必ず習得が必要です。
name = "大谷翔平"
age = 25
height = 1.93
weight = 92.1
BMI = weight / (height * height)
properWeight = height * height * 22
print("氏名:", name)
print("年齢:", age, "歳")
print("身長:", height, "(m)")
print("体重:", weight, "(kg)")
print("BMI:", BMI)
print("適正体重:", properWeight, "(kg)")
BMIを求めるときは()を使って掛け算を優先してください
また、BMIを求めるときに利用する『べき乗』を、Pythonでは『**』演算子を次のように使うこともできます。
# 2のべき乗を求める演算子
BMI = weight / height**2
課題3:自己代入形式の演算
課題内容
- 変数numを定義し、「10」を設定せよ。
- 自己代入としてnumに対して「5」を四則演算で作用させよ。
- 画面への表示はprint(num)として表示することとする。
出力期待結果
加算の場合
15
減算の場合
5
乗算の場合
50
徐算の場合
2.0
自己代入形式の演算を覚えましょう。
num = 10
num += 5
print(num)
num = 10
num -= 5
print(num)
num = 10
num *= 5
print(num)
num = 10
num /= 5
print(num)
省略形の書き方は是非覚えてくださいね。
C言語技術者が知るべきPython言語との違い:「変数」
すでにC言語を習得している人は、次のポイントに気を付けよう!
C言語はデータ型の厳密性を重視している言語です。それに対し、Pythonはデータ型に対して非常に柔軟な構造となっているのが特徴です。
C言語とPythonの「変数」に対するデータ管理範囲の違い
Pythonの整数には最大値に上限がありません。
これは、C言語技術者にとっては非常に特異なものとして感じられます。例として次のように変数numへ非常に巨大な数値を代入してみましょう。
num = 100000000000000000000000000000000000000000
print(num)
結果としては、次のように値が正確に管理されています。
100000000000000000000000000000000000000000
「データ型」に対してメモリのサイズが一意に固定で決まっているC言語では、必ず数の上限という概念が登場し『オーバーフロー』へのケアが必要となります。
しかし、Pythonでは「データ型」に対してメモリの管理サイズが固定化されていないということが、ここからわかりますね。
Pythonは言語設計として非常に柔軟なメモリ管理を行っているのが垣間見えますね。C言語では考えられないメモリ管理構造です。