Pythonロボティクスコース レッスン 3 *
テーマ.1-2 Pythonの変数
データを一時的に保存する「変数」について学ぼう
チャプター1
このレッスンで学ぶこと
このレッスンでは、プログラムでデータを一時的に保存するために使う「変数(variable)」について学習します。レッスンの最後では、変数に保存したデータを利用してStuduino:bitのブザーから流す曲のテンポを制御する課題に取り組みます。
チャプター2
Pythonの変数
テーマ.1-1では、REPLを利用して、1行のコードで数値の演算処理を行い、結果をすぐに画面に表示させていました。しかしながら、これから扱う多くのプログラムでは、複数行のコードに渡る演算処理を行います。このようなプログラムでは、前の行のコードの演算結果を次の行のコードでも利用したいという場面が出てきます。
このような場面の例として、次の計算問題を考えてみましょう。
【速さを求めて、目的地に到着するまでに必要な時間を求める問題】
あなたは、車でA地点を出発し、50km先にあるB地点へ向かう途中にいます。これまで、20kmの道のりを進み、16分の時間が掛かりました。目的地まで残り30km走るのに、あと何分掛かるでしょうか。
この問題は次の計算手順で答えを求めることができます。
- 20kmの道のりを進んだときの平均の速さ = 20km ÷ 16分 =1.25km/分
- 残りの道のりを進むのに必要な時間 = 30km ÷ 1.25km/分 = 24分
上の計算では、1つめの式で求めた速さを次の式で利用しています。プログラムでこの計算を行うには、求めた速さを一度どこかに置いておき、後の計算で使うという処理が必要です。その保管場所となるのが 「変数」です。変数はよく「データを保管する箱」に例えられます。
変数を定義するときは、次の形式で書きます。
変数名 = 変数に保管したいデータ
このように変数にデータを入れることを「代入する」といいます。数学では「=」は「左辺と右辺が等しい」ことを示す記号ですが、Pythonでは「右辺の内容を左辺へ代入する」という意味になります。数学と同じ「等しい」を表すときは、「=」を2つ重ねた「==」を使います。
2. 1 変数を使う
では実際に、変数を使い、先ほどの計算をプログラムで行ってみましょう。
まずは、20kmを16分で進んだときの平均の速さを求める次のコードをターミナルに書き、「Enter」キーを押して実行します。
※「速さ」は英語で「velocity」といいます。下のコードでは、その頭文字から「v」という変数を用意しています。
>>> v = 20/16
>>>
変数に保管すると、ターミナルに演算の結果は表示されません。演算結果を表示したい場合はprint()
を使います。先ほどのコードに続けて以下のコードを書いて実行しましょう。
>>> v = 20/16
>>> print(v)
1.25
>>>
※print()
の括弧に入れる変数名はクォーテーションで囲む必要はありません。反対に変数名をクォーテーションで囲うと文字列として扱われます。
この表示結果からも変数v
に演算の結果が保管されていることが分かります。では、この変数v
を使って、残りの30km進むのに掛かる時間を計算しましょう。
>>> 30/v
24.0
>>>
これで無事、プログラムで2つの式を計算し、問題を解くことができました。
2. 2 変数名の付け方
変数名は基本的に自分で好きなように付けることができます。例えば、「a」や「b」、「c」といった1文字のみの変数名でもエラーにはなりません。しかしながら、本格的にプログラムを作成していくと、複数の変数を用意する必要が出てきます。そのときに、「a」や「b」では、その変数が何のデータを保管しているのか途中で分からなくなってしまいます。
そのため、作法として、変数にはデータの内容が分かる名前を付けます。例えば、住所データを保管する変数なら「address」、年齢を保管する変数なら「age」と付けます。
また、2つ以上の単語をつないだ名前を付けたい場合、Pythonでは 「 _(アンダースコア)」 で単語どうしを結ぶ方法が使われています。例えば、苗字(last name)を入れる変数の場合は「last_name」、下の名前(first name)を入れる変数の場合は「first_name」と付けます。このような書き方を「蛇(snake)」になぞらえて「スネークケース」といいます。他にも先頭の単語を小文字で表記し、その単語に続く2語目以降の頭文字を大文字で書く「キャメルケース」という表記方法もあります。キャメルケースはこぶを持つ「ラクダ(camel)」に由来しています。
■ 変数名として使えない言葉
pythonでは、「予約語」といい、print()
などあらかじめ他の目的で登録された言葉があります。それらの言葉と同じ名前で変数を定義することはできません。もし、この講座で例示するプログラムや、他の書籍で紹介されているサンプルプログラムのコードから変数名を変えただけでエラーになる場合は、予約語を使用していないか確認してください。どのような単語が予約語になっているかは、下のPython公式ドキュメントで調べられます。
2. 3 変数へのデータの上書き
一度データを代入された変数は、新たに別のデータで「上書き」することができます。実際に、次のコードをターミナルで実行してデータが上書きされていることを確認しましょう。
>>> a = 5
>>> a = 10
>>> print(a)
10
>>>
最初は、変数a
には5が代入されていましたが、後から10で上書きされたため、print()
で表示すると、10という結果になっています。
また、変数は現在代入されているデータを利用した演算結果で上書きすることもできます。次のコードを実行して確認しましょう。
>>> f = 100
>>> f = f + 100
>>> print(f)
200
>>>
このコードでは、100が代入された変数f
に、「変数f
の中身(100)にさらに100を足したもの(200)で上書きする」演算処理を行っています。そのため、最終的に変数f
の中身は200に変わっています。
チャプター3
変数のデータ型
前のレッスンでも出てきた、数値や文字列などの「データ型」は変数にも関係しています。変数の場合は、代入したデータの型がそのまま変数のデータ型になります。変数のデータ型を調べるときも同じくtype()
が使えます。
- 整数を保管した変数の型を調べる
>>> number = 100
>>> type(number)
<class ‘int’>
>>>
- 文字列を保管した変数の型を調べる
>>> string = ‘abc’
>>> type(string)
<class ‘str’>
>>>
3. 1 別の型のデータで変数を上書きする
Pythonの変数はとても柔軟です。プログラミング言語によっては、最初に代入したデータで変数のデータ型が固定され、他の型のデータを代入できなくなる性質がありますが、Pythonでは別の型のデータで上書きすることができます。
>>> data = 4
>>> type(data)
<class ‘int’>
>>> data = 4.0
>>> type(data)
<class ‘float’>
>>> data = ‘4’
>>> type(data)
<class ‘str’>
>>>
上のコードでは、同じ変数data
に「整数(int)⇒ 浮動小数点数(float)⇒ 文字列(str)」と順番に代入していますが、見事にそれに合わせてデータ型が変化しています。
チャプター4
変数を利用したプログラム例
学習したことのおさらいとして、変数を使った2つのプログラムを実際に書いて実行してみましょう。
4. 1 消費税を含む価格の計算
消費税の税率を変数に保管しておくことで、複数の品物の価格計算に利用できます。
>>> tax = 1.1
>>> apple = 100*tax
>>> orange = 120*tax
>>> banana = 250*tax
>>> print(apple, orange, banana)
110.0 132.0 275.0
※print()
は「,(カンマ)」で区切ることで、複数のデータを一度に表示することができます。
4. 2 共通の文字列をもつ複数の文章の表示
共通の文字列を変数に保管し、「+」演算子でつなぐことでプログラムを簡略化できます。下の例では、データが読み込み中であること示すときの「… を読み込み中(… is now loading.)」という共通の文章を変数に保管して利用しています。
>>> load = ‘ is now loading.’
>>> print(‘data1’+load)
data1 is now loading.
>>> print(‘data2’+load)
data2 is now loading.
チャプター5
課題:Studuino:bitから音を鳴らそう
レッスンの最後に、変数を使ってStuduino:bitのブザーを制御してみましょう。
5. 1 プログラムの作成
下のコードは「カエルの合唱」の始めの4小節を演奏するプログラムです。今は、このプログラムの意味を完全に理解する必要はありません。すべての行を選択してコピーし、Muのエディタエリアに貼り付けましょう。
(コピーした後、エラーとなったらシングルクオーテーションを書き換えてください)
【サンプルコード 5-1-1】
- from pystubit.board import buzzer
- import time
- duration = 600
- buzzer.on(‘C4’)
- time.sleep_ms(duration)
- buzzer.on(‘D4’)
- time.sleep_ms(duration)
- buzzer.on(‘E4’)
- time.sleep_ms(duration)
- buzzer.on(‘F4’)
- time.sleep_ms(duration)
- buzzer.on(‘E4’)
- time.sleep_ms(duration)
- buzzer.on(‘D4’)
- time.sleep_ms(duration)
- buzzer.on(‘C4’)
- time.sleep_ms(duration)
- buzzer.on(‘C4’)
- time.sleep_ms(duration)
- buzzer.off()
変数は4行目のduration = 600
で定義しています。「duration」は、英語で「継続する時間」の意味です。この変数duration
でブザーから、ある高さの音を継続して鳴らす時間を制御しています。
6行目から続くbuzzer.on(...)
は、ブザーから指定した高さの音を鳴らす命令です。()の中の文字列C4
やD4
は音の高さを表しています。その下に続くtime.sleep_ms()
は、次の行の処理を開始するまでに、()内に指定された時間(単位はミリ秒※)だけ待つ命令です。ここでは、変数duration
に代入した時間(単位は秒)だけ次の高さの音を鳴らすのを待つために使っています。
※ミリ秒は、1秒の1000分の1の時間の長さを表す単位です。そのため、0.6秒は600ミリ秒と表すことができます。
そして、最後の行のbuzzer.off()
でブザーの音を止めています。
コード全体の中で注目して欲しいのは、time.sleep_ms()
での時間の指定を、すべて変数duration
で行っている点です。これによって、変数duration
に代入する値を変更するだけで、すべての音を鳴らす時間を変えることができます。
5. 2 プログラムの実行
画面上方の「実行」ボタンをクリックして、プログラムを実行し、動作を確認しましょう。また、変数duration
の値を自由に変更してプログラムを実行し、曲のテンポが変わることも確認しましょう。
チャプター6
おわりに
6. 1 このレッスンのまとめ
このレッスンでは、データを保管する「変数」について学びました。変数には数値や文字列の他にも様々なデータを保管できます。この後のレッスンでも繰り返し出てきますので、しっかりと復習しておきましょう。
6. 2 次回のレッスンについて
次回のレッスンでは、プログラムを簡潔にまとめるために使われる「関数」について学習していきます。