小さい字は補足説明なので、読み飛ばしてもいいです。
ただ長方形の面積を求めるだけでは面白くないので、 短辺を長辺より長く入れたら警告を表示して計算してくれないプログラム (menseki2.py)を作ってみよう。
tanpen = float(input("長方形の短辺を入力して下さい: "))
tyouhen = float(input("長方形の長辺を入力して下さい: "))
if tanpen < tyouhen:
menseki = tanpen * tyouhen
print("長方形の面積は:", menseki)
else:
print("短辺が長辺より長いので計算しません")
ここで登場する
if 条件A:
処理B
else
処理C
という構文は、条件Aを満たす場合は、処理Bを実行し、
満たさない場合は処理Cを実行しなさいということ。
処理Bと処理Cは、(左端に半角スペースを入れて)インデントして書かなければならない
(ifの下の行でインデントがそろっている行が処理B、
elseの下の行でインデントがそろっている行が処理Cと解釈される)。
「条件Aを満たす場合は、処理Bを実行しなさい」ということだけを指定し、
条件Aを満たさない場合は、特になにもしないということであれば、
以下のように else以下 は書かなくていい。
if 条件A:
処理B
さて、上のmenseki2.pyの場合、
if tanpen < tyouhen:
menseki = tanpen * tyouhen
print("長方形の面積は:", menseki)
もし「tanpen < tyouhen」が「真」であれば、 インデントでそろえられた行に書いてある処理を実行しなさいということで、 ここは、インデントをそろえて1文字以上のスペースを入れて書く必要がある。 インデントは半角スペース4文字が推奨されているようなので、 半角スペース4文字としておこう。
else:
print("短辺が長辺より長いので計算しません")
else: の下の行は、 もし「tanpen < tyouhen」が「偽」だったときにする処理で、 この処理もインデントして書く必要がある。 処理が複数行ある場合はインデントをそろえなければならない。
if文の中の条件文に使う比較演算子は、以下のように書く。 「BをAに代入する」ときは、A=Bを用いたが、 if文で「AとBが等しい」ことを表すのは、A==Bを用いて代入を表す=とは 区別しているので注意すること。
| a==b | aとbが等しいならば |
| a!=b | aとbが等しくないならば |
| a > b | aがbより大きいならば |
| a >= b | aがb以上ならば |
| a < b | aがbより小さいならば |
| a <= b | aがb以下ならば |
複数の条件を「かつ」や「または」で組み合わせたいときは、 andや orを使う。 例えば、 a<x かつ x<b なら if a<x and x< b: と書くし、 x<a または b<x なら if x<a or b<x: と書く。 簡潔に書く場合は、 if a < x < b:や if not (a <= x <= b):のような書き方もできる。
aとbが整数型であれば、a==b は意味を持つが、 aとbが実数型の場合、a==b というのは、 高精度の数値計算を行っている場合は、ほぼ起きないことである。 計算の結果、ちょうど a==10になるときといっても、 実数型の場合、 実際には、a=9.99999999999だったり、a=10.000000001だったりなわけである。 だから、例えば小数第1位を四捨五入して 10.0であれば、10とみなして処理する ということであれば、 if 9.95<a<10.05: とかif abs(a-10)<0.05: みたいに書くのが厳密である。 とはいえ、floatで実数化された変数に対して==で判定したとしても、 ある精度内で等しいと判定してくれるようだ (動画の後半で実験してみた)。
さて、短辺を長辺より長く入れたら計算しないで終わってしまうのでは 今ひとつ面白みがないので、 短辺を長辺より短く入れてくれるまでデータ入力を繰り返す プログラム(menseki3.py)を作ってみよう。
while True:
tanpen = float(input("長方形の短辺を入力して下さい: "))
tyouhen = float(input("長方形の長辺を入力して下さい: "))
if tanpen < tyouhen:
break
print("短辺は長辺より短くして下さい")
menseki = tanpen * tyouhen
print("長方形の面積は:", menseki)
ここで登場する
while True:
処理A
if 条件B:
break
処理C
処理D
という構文は、 まず、処理Aを実行し、条件Bを判定して「真」だったら、処理Cを実行せずに、 処理Dに進むが、 条件Bを判定して「偽」だったら、処理Cを実行してから、また上に戻って、 処理Aから順番に実行していくということ。 つまり、条件Bが満たされない限りはいつまでも処理A, 処理Cを繰り返し、 処理Dには進めないということ。
menseki3.py を参考にして、 ある条件 (例えば「体積が1000以上になる」とか) を満たすまでデータ入力を繰り返し、 三角形・台形などの幾何学図形の面積や、 円錐・球などの立体の体積を求めるプログラムを作りなさい (長方形の面積はここに書いてあるのでダメ)。 WebClassの「プログラム課題2」から、 プログラム本体(例えば kadai2.py とか)を提出し、 こんな感じの 実行画面 (仮にエラーが取れずにどうしても実行できなかった場合は、 エラーが出ている画面) をテキストエディター(gedit等)に貼り付けて保存したファイル(kekka.txtとか)を 提出する。
以下は、参考までに動画内で作っていたクイズのプログラム。 「#」から改行までは、コメントとなるのでプログラムと関係ないことを書ける。 プログラムの一部を無効にしたい場合に、 その行頭に「#」をつけて、その部分を無効にすることを 「コメントアウトする」と言ったりする。
#クイズのプログラム
print("次の作曲家で最も生誕年が早いのは?")
print("1. バッハ ") #(1685-1750)
print("2. ビバルディ ") #(1678-1741)
print("3. ブラームス ") #(1833-1897)
print("4. ベートーベン") #(1770-1827)
print("5. ボロディン ") #(1833-1887)
while True:
n = int(input("番号を入力してください: "))
if n == 2:
print("正解です!")
break
else:
print("不正解です!")
print("選び直して下さい")