Lesson01 変数を使おう
変数を使って図形の面積などを計算させるプログラムを作ろう
- 四則演算の方法
- 変数とは何か。変数の使い方
- 関数とは何か。
- print関数の使い方
- input関数の使い方
今回の授業では、変数や関数といったプログラミングの基本となる考え方を学びます。これらの知識を使って、キーボードから数字や文字をコンピュータに渡し、図形の面積などを計算させるプログラムを作ります。
今使うソースコードはここからまとめてダウロードできます。 ダウンロードfile_download
前回の復習
前回、プログラミングとは、プログラムの設計図であるソースコードを書くことだと学びました。ソースコードを書く上で注意することをもう一度復習しましょう。
前回出た重要キーワード
- ソースコード
- Pythonインタプリタ 、インタプリタ
- コメント
- Enterキー、リターンキー
- 実行、ソースコードを実行する
- シンタックスエラー、文法エラー
- プログラムの命令は半角の英数字でかかねばなりません。
- プログラムは上から下に処理が行われます。つまり、上に書かれている命令のほうが、下に書かれている命令よりも先に処理されます。
- プログラムの単語と単語の間には半角のスペースを自由にはさむことができます。
- 命令の行と行との間には空行をいくつも挟むことができます。つまり、空行は処理上、無視されます。
- 先頭が#で始まる行は処理されず無視されます。これを利用してソースの中にメモを書くことができます。ソースの中に書くメモをコメントと言います。
- pythonというプログラミング言語はコンピュータの中のpythonインタプリタが解釈します。pythonインタプリタが理解できない文法で命令した場合、シンタックスエラーを返ます。
プログラミングは、pythonという言語を使ってpythonインタプリタと対話することです。
多くのプログラミング言語はキャラクターを持っています。
Pythonとはニシキヘビという意味の英語です。右のヘビはpythonインタプリタを表しています。
1四則演算について
この章のキーワード
- 四則演算
- 演算
- 演算子
- 剰余の演算
- べき乗(るい乗)の演算
- REPL
- 真偽
コンピュータは数字の処理は大変得意です。数字の処理について、基本的な四則演算について学びましょう。
四則演算で使うプログラミング記号
足し算、引き算、掛け算、割り算の4つを四則演算といいます。算数では、これらは+,ー,×,÷ の記号を用いますが、一般的なプログラミング言語では、×、÷では別の記号を使います。
算数での記法 | pythonでの記法 | |
---|---|---|
足し算(加算) | 4 + 2 | 4 + 2 |
引き算(減算) | 4 – 2 | 4 – 2 |
かけ算(乗算) | 4 × 2 | 4 * 2 ★ |
割り算(除算) | 4 ÷ 2 | 4 / 2 ★ |
★掛け算と割り算だけ記号が小学校でならった算数と異なり、半角の記号である * と / を使います。
×→*
÷→/
四則演算以外によく使う記号
四則演算以外に、プログラミングではよく使う記号があります。
剰余 % |
整数a を整数 b で割った余りを求める記号です。 a % bで表します。 4% 2 は0です。 4 %3 は1です。 |
---|---|
べき乗(るい乗) ** |
aをb回掛け合わせたものをaのb乗と言い、 a ** bで表します。 例えば 3の5乗は、Pythonでは 3 ** 5 と表し、 3×3×3×3×3 = 243 になります。 |
加算、減算、乗算、除算、剰余、べき乗(るい乗)などは代表的な数字同士の演算です。このほかにもたくさんの演算があります。数学では「演算」とは計算することを指すことが多いのですが、プログラミングでは、演算はデータとデータとの間でなにかの操作をすることを指します。演算ごとに決まった記号があり、演算子といいます。例えば足し算の演算子は + です。剰余の演算子は % です。
REPLで四則演算で遊んでみよう
REPLは、Read-Eval-Print Loopの頭文字をとった機能で、電卓のようにPythonに順々で処理させるモードです。muのターミナルで実行できます。In [1]:のような[]の中の数字は命令の順番で、この番号はそれぞれのラズパイで異なります。
REPLでの入力
In [1]: 1+3+5+7+9+11
Out [1]: 36
REPLでの入力
1 2 |
In [2]: 1+1*3 Out [2]: 4 |
---|
REPLでの入力
1 2 |
In [3]: 1 > 2 Out [3]: False |
---|
REPLでの入力
1 2 |
In [4]: 1 == 2 Out [4]: False |
---|
数字の大小を比較する演算子
x == y | x と y が等しい |
---|---|
X != y | x と y が等しくない |
x > y | x は y よりも大きい |
x < y | x は y よりも小さい |
x >= y | x はy以上。(x は y と等しいか大きい) |
x <= y | x はy以下。(x は y と等しいか小さい) |
これらは真偽(しんぎ)を判定することに使われます。真偽とはコンピュータでよく使われますが、普段の生活ではつかいませんよね。
真 = 正しいこと , True
偽 = まちがっていること , False
と覚えましょう。
例えば、Pythonに聞いてみましょう。1 は 2より大きい数字であるが、これは正しいかな?まちがっているかな?
>>> 1 >2
>>> 1 >2
False
False 、つまりPythonは、1は2より大きい
という式は間違っていると判定できました。
すごいですね!(えっすごくない?)
2変数について
この章のキーワード
- 変数の代入
- 変数の型
- 予約語、pythonの予約語
変数はどんなプログラミング言語にもあり、プログラミングをする上で重要なものです。変数というデータをセットする入れ物を使ってプログラミングをします。
2.1 変数のセット(変数の代入)
数学では文字式で文字をつかいますが、この文字にあたるものをプログラミングでは、変数と言います。例えば
a = 3 というプログラムの式は、
a という変数を用意し、それに 3という値をセットすることを示します。
変数には数字だけでなく文字もセットできます。
ただし、数字のときと違って、
a = “あいうえお”
のように文字を “ と ” で囲みます。
よく変数は箱にたとえられます。a=3 という式は、a というラベルのついた箱の中身を 3 にすると言う意味になります。
変数に値をセットすることを代入と言います。数学と同じですね。ただし、変数が必ず左(これも数学とおなじで左辺といいます)にきます。
つまり
a = 1 は正しいPythonの代入の式ですが、
1 = a はPythonの代入の式としては間違っています。
2.2 変数同士の代入
次に変数に変数をセットするa=bは、bの箱の中身をaの箱の中に入れるという意味になります。右辺のbはこの代入によって影響を受けません。aという代入される変数に、bの値をセットします。
a = 1
b = 2
a = b
という3つの処理を考えましょう。最後の行で a は 2 で、b は 2 です。
変数の代入について
変数に値をセットするときは、左側、つまり左辺に変数を書き、右側にセットする値を入れます。
数学の記号の=と同じ記号を使いますが、等しいという意味ではなく、「値をセットする」という意味です。数学では代入も=を使うので似ていますが、プログラミングの代入と数学の代入は違います。とても重要なポイントです。
2.3 変数の型
データには文字列など様々なデータがあり、データの種類を表す型というものがあります。演算は異なる型では行えないことが多々あります。
例えば、 1 + 1 は結果がすぐに 2 だとわかります。
また、
“吾輩は” + “ねこである” の結果は ”吾輩はねこである” とわかります。
つまり、+という演算子は、数字同士では足し算を行い、文字列では文字列どうしを連結するという機能を持っています。
では、 1 + “吾輩” はどんな結果になるでしょうか?これはPythonインタプリタも困ってしまいます。実はシンタックスエラーになります。
そこで、型を統一する必要があります。
文字列を整数に変更する場合:int (文字列)
整数を文字列に変更する場合:str (整数)
lesson_10.py
1 2 3 |
a = 10 b = 20 print(a+b) |
---|
これは30が表示されます。
型が違う場合、例えば文字と数字は + つなげません。文字としてつなぐか、数字として足すのかPythonインタプリタが分からないからです。
1 2 3 |
a = "10" b = 20 print(a+b) |
---|
エラーになります。
… line 3, in
print(a+b)
TypeError: can only concatenate str (not “int”) to str
一方の型をそろえるとエラーは出ません。ここでは文字を数字にそろえましょう。型を変えることを「型をキャスト」すると言います。
1 2 3 4 |
a = "10" a = int(a) b = 20 print(a+b) |
---|
30 と表示されます。
2.4 変数のルール
変数は適当な文字や文字列を使うことができます。
例えば、価格であれば(英語で価格はprice) price やローマ字で kakaku でもよいです。
price と書いてあっても、これで1つの変数であり、数学のように p * r * i * c * e を表すのではないことに注意してください。
変数は適当な文字や文字列を使うことができますが、次の制約があります
- 数字から始めることはできない。 a1 はいいが、 1aはダメ。
- 日本語は使わない kakaku はいいが、価格 はダメ。 (注1)
- +や - や * や / や % などの記号は使えません。ただし、記号のなかでも_ は使えます。(アンダースコア、Shiftのとなりにあるキーです。)
- 次の言葉は予約語と行ってPythonでは特別な意味があり、使えません。
- False
- None
- True
- and
- as
- assert
- async
- await
- break
- class
- continue
- def
- del
- elif
- else
- except
- finally
- for
- from
- global
- if
- import
- in
- is
- lambda
- nonlocal
- not
- or
- pass
- raise
- return
- try
- while
- with
- yield
- 変数には型があります。違う型同士は演算などができません。
注1)本当は日本語を変数にすることはできるのですが、m.PIMEでは使わないというルールにします。Pythonとしては利用は禁止していません。
3関数について
この章のキーワード
- 引数、関数の引数、関数への入力
- 関数の戻り値、返り値、関数の値、出力
- 関数の副作用
すでに第0回でまなびましたが、print は、文字を画面に表示する機能を持っていました
このようにプログラミングは、たくさんの命令を使って、コンピュータに仕事をさせます。この命令の単位を関数と言います。関数はPythonが用意したもの、Pythonのモジュールというものに含まれるもの、自分で自作したものの3つに大別されます。
3.1 関数とは
関数は、何か仕事をする箱で例えられることがあります。
例えば、文字数を教えてくれる機能は、文字の数を数える関数です。
これは何文字かな => 文字の数を数える関数 => 8
箱に入れるものを 引数 とか 関数の入力といいます。
関数によって処理されたあと結果を 関数の戻り値、出力、関数の値などといいます。
文字数を数える関数はlen です。
ソースコード(lesson_20.py)
1 | len(“これは何文字かな”) |
---|
結果
1 | 8 |
---|
関数の戻り値を変数にセットすることもできます。
1 2 3 |
a = “寿限無寿限無五劫のすりきれ” b= len(a) print(b) |
---|
結果
1 | 13 |
---|
print関数は値を返しません。画面に表示するだけです。画面に表示すること自体は戻り値ではありません。
1 2 |
a = print("あいうえお") print(a) |
---|
結果
1 2 |
あいうえお None |
---|
printは画面に文字を表示します。文字を表示することは戻り値ではなく、値を出す過程でうまれる副産物と考えられます。これを「副作用」といいます。副作用が重要な関数もあります。
3.2 print関数とinput関数
先ほど、関数は値を返すと書きましたが、値を使うことはほとんどない関数があります。
それは文字を表示するprint 関数と キーボードから文字や数字を受け取る input 関数です。
print は文字を画面に表示しますが、画面に文字を表示してもこれは戻り値ではありません。このような画面に表示したり、キーボードから値をうけとることは「副作用」といいます。関数の戻り値は使わず捨てることが多いけれどもその副作用をよく使う関数がprintやinput です。
print 関数の使い方
画面に文字を出力する関数printの使い方を学びましょう。
print 関数はPythonにあらかじめ組み込まれている関数です。
ソースコード
1 | print(“表示したい文字”) |
---|
のような使い方をします。
input関数の使い方
input関数はキーボードからリターン(エンターとも言います)を押すまでの文字を受け取る関数です。
ソースコード
1 | input() |
---|
という使い方をします。
ソースコード
1 | input(”文字数を数えたい文字列を入力してEnterを押してください”) |
---|
結果
1 | 文字数を数えたい文字列を入力してEnterを押してください |
---|
のようにinput に引数を入れると、その引数を事前に表示します。
演習の時間
演習の解答はここからダウンロードできます。ダウンロードfile_download
演習1
次のように、キーボードから正方形の1辺の長さを入力し、その対角線の長さを計算するプログラムを書いてください。入力する数字は整数とします。対角線は一辺の1.414213…倍であるという知識を使いましょう。enshu_lessson01_01.pyというファイル名で保存してください。
期待される動作
正方形の一辺の長さを入力してください。
100
対角線の長さは
141.4
です。
演習2
三角形の高さと面積をコンピュータに与え、その情報から底辺の長さを求める次のように動作するプログラムを書いてください。ただし、入力する数字は整数のみとします。enshu_lessson01_02.pyというファイル名で保存してください。
期待される動作
三角形の面積を入力してください。
100
三角形の高さを入力してください。
25
この三角形の底辺の長さは
8.0
です。
演習3
中学3年生でPythonでプログラミングを学び始めたばかりの太郎君は、下記のような税抜き金額を入力すると 1.1 をかけて消費税を計算するプログラムを書き、実行しました。ところが、シンタックスエラーが表示されて動きませんでした。どこが間違っているか、指摘し修正してください。enshu_lessson01_03.pyというファイル名で保存してください。
1 2 3 4 |
zeinuki = input("税抜き金額を入力してください") zeikomi = zeinuki * 1.1 print("消費税込み金額は") print(zeikomi) print("です") |
---|
時間があまったあなたに
おみくじを作ろう
次のLesson02では条件分岐というものを学習します。if文という構文(英語でも構文がありますよね!?)を使うのですがこれを先取りしましょう。
これは条件を分岐する機能があり、
使い方の疑似コード
1 2 3 4 |
if 条件 : その条件の時の処理 else : その条件にあてまはまらない処理 |
---|
のような使い方をします。
if と else の間のそれぞれの条件に合ったときの処理と合わなかったときの処理はインデントします。インデントとは、「TAB」キーを教えて字下げをすることです。
サンプルコード
1 2 3 4 5 |
a = 100 if a < 50 : print(“aは50未満です”) else : print(“aは50以上です”) |
---|
これと、実行するたびに数字がランダムに出てくる次の命令を使って、おみくじを作ってみましょう。
ランダムに変数 moji に数字がセットされるサンプルコード
1 2 3 |
import random moji = random.randint(0,10) print(moji) |
---|
random.randint()関数は2つの引数をとります。始めの引数と後の引数の間の整数をランダムに返します。この例では0 ~10 のどれかの数字が返ります。
結果(この例では5ですが、0~10のどれかの数字が返ってきます)
5 |
if とランダム関数のrandom.randint() を使って次のようなおみくじプログラムを作ってください。
期待される動作
1 2 |
Enterを教えてください やったね!大吉です! |
---|
おみくじのメッセージは以下の4種類とします。
「やったね!大吉です!」「なかなかいいよ。中吉です」
「いいよ、吉です。」「がーん、凶です…明日があるさ」
大人のあなたへ
『=』は代入の意味。慣れるのみ!
今回は、プログラミングの初歩である変数について学びました。数学で言えば中学1年生でならう文字式のようなその科目の基本となる概念です。コンピュータは様々なデータを扱いますが、これを変数に入れて処理することがしばしばあります。
代入は数学の=と同じ記号なので混乱する生徒がいるかもしれません。
たとえば、次のコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 |
a = 1 b = 2 c = 3 c = b b = a print(a) print(b) print(c) |
---|
こんな風に考えた生徒がいました。
cはbと等しい。
bはaと等しい。
三段論法で、これはa,b,cが等しい。???
これは数学でおなじみの=という記号をプログラミングの代入で使っているので混乱するのです。
もし、xという変数にyをセットするのを
x ☜ yと書けば数学の = と違うと混乱しないかもしれません。
c ☜ b
b ☜ a
こんな風に。でもこのような記法は存在しません。
=になれるしかありません。
さて、コンピュータサイエンスでは「等しいとはなにか!?」ということがしばしば重要になります。
a = a1
a1 = b
実は、これで aと b が同じになってしまうような代入もあります。ポインタやリファレンスやオブジェクトといった概念が出てくると、データとはなにか変数とは何かということをあらためて問われる場面が出てきます。それはこの先に…