第2回 計算式、データにラベルをつけよう(変数について)
前回の復習
前回はプログラムを書く前に
日本語で手順書を書いてみましょう、という内容でした。
書いてみましたでしょうか?
こんな感じで書ければOKです。
# 手順書と同じフォルダにあるpoem.txtファイルを開く(input)
# 1行ごとに.の箇所を!に変換する(処理)
# 編集したファイルをpoem_out.txtファイルとして別名で保存する(output)
日本人相手ならこの手順書でやってくれると思います。
「よし!早速この手順書をプログラム言語で書き直そうじゃないか!」
気持ちは分かりますが、このままチャレンジしたらまず挫折します。
今回の内容
まずはプログラム言語の基本、
変数とデータ型に関して知る必要があります。
もし、この2つを正確に理解できたら、
冗談抜きで、pythonに限らずどんな言語でも驚くほど上達します。
今回は変数について正確に理解することがゴールです。
コンピュータは短期記憶ができない
意外にもコンピュータは
処理をしても次の瞬間全てを忘れてしまいます。
あなた「1+2は?」
PC「3です!(`・ω・´)ゞ」
あなた「あ、聞こえなかった、もう一度答えを教えて」
PC「え、何のこと?(・.・;)」
コンピュータは計算をする時は必ず
「メモリ」という作業机で計算し、結果を出すのですが、
処理が終わると「計算式」も「答え」も一括消去されます。
じゃあどうすれば計算式を覚えてくれるんでしょうか。
答えは、計算式にラベルをつけてあげるんです。
a = 1 + 1
こんな風に、1+1という計算式に「a」というラベルを作って貼ります。
※ラベルは数字ではじまらなければどんな文字列でもOK。
そうすることで、
「1+1の答えは後で使うから、メモリから消さないで!」
と指示を送ることができ、「a」と打つといつでも1+1の答えである、
2を返してくれます。
※コメント計算した
※逆に言うと、ラベルを付けないデータは
すぐに消えて忘れさられます。注意!
変数の定義
このaというラベルのことを「変数」と言い、
ラベルを貼ることを「変数に格納する」と言います。
【これだけは覚えよう】
変数・・・PCに一時的に覚えさせておきたい計算式、データにつけるラベルのこと
変数に格納する・・・ラベルを貼ること
aという変数に格納する・・・aという名前のラベルを貼ること
1+1をaという変数に格納する・・・1+1を計算した結果にaという名前のラベルを貼ること
以下、変数を正確に理解するためのFAQ
Q.「ラベルを付けられるのは計算式だけなのか?」
いえいえ、計算式だけではなく
a = 3
とすると、aを呼んだ時3が返ってきますし、
a = “hoge”
とした場合は、文字列”hoge” が返ってきます。
Q.「書き方は <変数> = <入れたい式、もしくはデータ> と決まっているのか?」
決まってます。
変数が=より左、記憶させたい式、データが=より右です。
Q.「 = 以外は使えるの?」
使えません。また、プログラムの中での「=」は
ラベルを貼る、です。
数学のイコールとは意味が違います。
Q.「以下のように2回、同じ変数に違うデータを入れたらどうなる?」
a = 3
a = 5
コンピュータは必ず「上から順番に」処理をしていきます。
3という数字にaというラベルを貼る。
次に5という数字にaというラベルを貼ろうとしますが、
「一つのラベルは、一つのデータにしか貼れません」
なので、
「3に張っていたラベルを剥がして、5に貼り直す」という動作になります。
ラベルを失った3は、すぐに消えて忘れさられます。
Q.「以下のようにラベルにラベルは貼れる?」
a = 10
b = a
貼れます。b = aは
「bはaと同じ場所を見てね」っていう意味になります。
bを呼び出すと10が返ってきます。
Q.「bという変数をまだ付けてない状態でbを呼び出そうとするとどうなる?」
エラーになります。
あなた「bを呼び出して!」
PC「bなんて設定されて無いぞ!(# ゚Д゚)」(NameErrorと言います)
Q. 「搭載メモリ以上のデータを変数に格納しようとするとどうなる?」
例えば、メモリが2GBしかないPCに100GBのデータを読み込もうとした場合・・・
PCは2GBしか広さがない机に、無理矢理100GBのデータを載せようとします。
その結果、すでにラベルが貼ってある他のデータが押し出されてしまい、
障害に繋がる致命的なエラーになります。
あなた「100GBのデータにcってラベルをつけるよ」
PC「なんかやってみたけど、メモリからデータ溢れちゃった!!\(^o^)/」
(このエラーをバッファオーバーフローと言います)
Q. 「変数は一回定義したらずっとメモリに残り続けるの?」
厳密には違うのですが、
今のところはプログラムが起動している間だけ有効、と覚えて下さい。
プログラムが終了すると、指定した変数は全て消去されます。
理解度チェック
以下、全問正解出来たら貴方も変数に関してはバッチリです!
(問題1)難易度:★☆☆☆☆
a = 3 + 4
⇨aを呼び出すと、何が返ってきますか?
(問題2)難易度:★★☆☆☆
a = 5
a = 100 + a
⇨aを呼び出すと、何が返ってきますか?
(問題3)難易度:★★★☆☆
a = 2
a = b
⇨上記を実施すると、どんな答えが返ってきますか
(問題4)難易度:★★☆☆☆
a = 5
b = a
⇨bを呼ぶと何が返ってきますか?
(問題5)難易度:★★★★☆
a = 1
b = a
a = 100
⇨bを呼ぶと何が返ってきますか?
(第3回に続く)