Pythonロボティクスコース レッスン 3 *

データを一時的に保存する「変数」について学ぼう

このレッスンで学ぶこと

このレッスンでは、プログラムでデータを一時的に保存するために使う「変数(variable)」について学習します。レッスンの最後では、変数に保存したデータを利用してStuduino:bitのブザーから流す曲のテンポを制御する課題に取り組みます。

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」という変数を用意しています。

変数に保管すると、ターミナルに演算の結果は表示されません。演算結果を表示したい場合はprint()を使います。先ほどのコードに続けて以下のコードを書いて実行しましょう。

print()の括弧に入れる変数名はクォーテーションで囲む必要はありません。反対に変数名をクォーテーションで囲うと文字列として扱われます。

この表示結果からも変数vに演算の結果が保管されていることが分かります。では、この変数vを使って、残りの30km進むのに掛かる時間を計算しましょう。

これで無事、プログラムで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公式ドキュメントで調べられます。

予約語 – Python 3.6 ドキュメント

2. 3 変数へのデータの上書き

一度データを代入された変数は、新たに別のデータで「上書き」することができます。実際に、次のコードをターミナルで実行してデータが上書きされていることを確認しましょう。

最初は、変数aには5が代入されていましたが、後から10で上書きされたため、print()で表示すると、10という結果になっています。

また、変数は現在代入されているデータを利用した演算結果で上書きすることもできます。次のコードを実行して確認しましょう。

このコードでは、100が代入された変数fに、「変数fの中身(100)にさらに100を足したもの(200)で上書きする」演算処理を行っています。そのため、最終的に変数fの中身は200に変わっています。

変数のデータ型

前のレッスンでも出てきた、数値や文字列などの「データ型」は変数にも関係しています。変数の場合は、代入したデータの型がそのまま変数のデータ型になります。変数のデータ型を調べるときも同じくtype()が使えます。

  • 整数を保管した変数の型を調べる
  • 文字列を保管した変数の型を調べる

3. 1 別の型のデータで変数を上書きする

Pythonの変数はとても柔軟です。プログラミング言語によっては、最初に代入したデータで変数のデータ型が固定され、他の型のデータを代入できなくなる性質がありますが、Pythonでは別の型のデータで上書きすることができます。

上のコードでは、同じ変数dataに「整数(int)⇒ 浮動小数点数(float)⇒ 文字列(str)」と順番に代入していますが、見事にそれに合わせてデータ型が変化しています。

変数を利用したプログラム例

学習したことのおさらいとして、変数を使った2つのプログラムを実際に書いて実行してみましょう。

4. 1 消費税を含む価格の計算

消費税の税率を変数に保管しておくことで、複数の品物の価格計算に利用できます。

print()は「,(カンマ)」で区切ることで、複数のデータを一度に表示することができます。

4. 2 共通の文字列をもつ複数の文章の表示

共通の文字列を変数に保管し、「+」演算子でつなぐことでプログラムを簡略化できます。下の例では、データが読み込み中であること示すときの「… を読み込み中(… is now loading.)」という共通の文章を変数に保管して利用しています。

課題:Studuino:bitから音を鳴らそう

レッスンの最後に、変数を使ってStuduino:bitのブザーを制御してみましょう。

5. 1 プログラムの作成

下のコードは「カエルの合唱」の始めの4小節を演奏するプログラムです。今は、このプログラムの意味を完全に理解する必要はありません。すべての行を選択してコピーし、Muのエディタエリアに貼り付けましょう。
(コピーした後、エラーとなったらシングルクオーテーションを書き換えてください)

【サンプルコード 5-1-1】
  1. from pystubit.board import buzzer
  2. import time
  3. duration = 600
  4. buzzer.on(‘C4’)
  5. time.sleep_ms(duration)
  6. buzzer.on(‘D4’)
  7. time.sleep_ms(duration)
  8. buzzer.on(‘E4’)
  9. time.sleep_ms(duration)
  10. buzzer.on(‘F4’)
  11. time.sleep_ms(duration)
  12. buzzer.on(‘E4’)
  13. time.sleep_ms(duration)
  14. buzzer.on(‘D4’)
  15. time.sleep_ms(duration)
  16. buzzer.on(‘C4’)
  17. time.sleep_ms(duration)
  18. buzzer.on(‘C4’)
  19. time.sleep_ms(duration)
  20. buzzer.off()

変数は4行目のduration = 600で定義しています。「duration」は、英語で「継続する時間」の意味です。この変数durationでブザーから、ある高さの音を継続して鳴らす時間を制御しています。

6行目から続くbuzzer.on(...)は、ブザーから指定した高さの音を鳴らす命令です。()の中の文字列C4D4は音の高さを表しています。その下に続くtime.sleep_ms()は、次の行の処理を開始するまでに、()内に指定された時間(単位はミリ秒)だけ待つ命令です。ここでは、変数durationに代入した時間(単位は秒)だけ次の高さの音を鳴らすのを待つために使っています。

※ミリ秒は、1秒の1000分の1の時間の長さを表す単位です。そのため、0.6秒は600ミリ秒と表すことができます。

そして、最後の行のbuzzer.off()でブザーの音を止めています。

コード全体の中で注目して欲しいのは、time.sleep_ms()での時間の指定を、すべて変数durationで行っている点です。これによって、変数durationに代入する値を変更するだけで、すべての音を鳴らす時間を変えることができます。

5. 2 プログラムの実行

画面上方の「実行」ボタンをクリックして、プログラムを実行し、動作を確認しましょう。また、変数durationの値を自由に変更してプログラムを実行し、曲のテンポが変わることも確認しましょう。

おわりに

6. 1 このレッスンのまとめ

このレッスンでは、データを保管する「変数」について学びました。変数には数値や文字列の他にも様々なデータを保管できます。この後のレッスンでも繰り返し出てきますので、しっかりと復習しておきましょう。

6. 2 次回のレッスンについて

次回のレッスンでは、プログラムを簡潔にまとめるために使われる「関数」について学習していきます。

TOP