Lesson03 変数と if 文を組み合わせよう(復習)
これまでの復習をしよう
本日は新しく学ぶことはありません。変数、関数、代入、if 文といったこれまでにならった内容を復習します。
今使うソースコードはここからまとめてダウロードできます。 ダウンロードfile_download
前回の復習
前回は if 文について学びました。これによって、コンピュータが受け取る値によって処理をわかる(分岐する)ということがわかりましたね。
今回は、変数と if 文の復習をします。
前回出た重要キーワード
- if
- else 節
- if はある条件を判定します。その判定は条件に合致するとき「真」で、ifの後にインデントして書くのでした。
- 合致しないときはelifで条件を加えるか、elseで同じようにインデントしてそれぞれの条件のときの処理を書きます。
- ifの後、elifの後、elseの後には必ずインデントした何か書かれた行がなければいけません。何も書くことが無い場合はインデントして pass という何もしない文を書きます。
演習の時間
演習の解答はここからダウンロードできます。ダウンロードfile_download
演習1
7の倍数かどうか判定機械
キーボードから数字を入力してその数字が7の倍数であるかどうかを判定するプログラムを書いてください。
期待される動作
7の倍数であるかどうかを判定します。 6987654321 Enter を押す 6987654321は7の倍数ではありません
ヒント①
キーボードからの入力はどのようにプログラムにセットしましたか?
ヒント②
7の倍数かどうかは剰余を計算するとわかります。
演習2
上底と下底と高さをキーボードから入力し、台形の面積を求めるプログラムを書きましょう。
これまで長さは整数に限定してきましたが、小数でもいいようにします。小数はfloat()関数で文字列を小数に変換できます。
期待される動作
上底の長さを入力してください 3.5 Enterを押す 下底の長さを入力してください 2.5 Enterを押す 高さを入力してください 5 Enterを押す この台形の面積は、15 です。
演習3
みなさんは、世界のナベアツという芸人さんの 3 の倍数と 3 が付く数字のときだけアホになるというネタを知っていますか?
これは、外国の fizzbuzz という遊びが元になっています。
FizzBuzz とは順に数字を増やしていうだけなのですが、3 の倍数の時にFizz、5 の倍数の時にBuzzと叫ぶのです。3 の倍数でも 5 の倍数でもあったら FizzBuzzと叫びます。間違ったらその間違った人がアウトになります。
例えば、4 人でこんな感じで数字を 1 つずつ繰り上げて行きます。
太郎君 : 1
次郎君 : 2
花子さん: Fizz
有紀さん: 4
太郎君 : Buzz
次郎君 : Fizz
花子さん: 7
有紀さん: 8
太郎君 : Fizz
次郎君 : 10
花子さん: 11
有紀さん: Fizz
・・・
ちょっと教室でもやってみましょう。
そこでプログラムで FizzBuzz 判定器を作ります。キーボードから数字を入れたらなんと答えるべきかを表示するプログラムです。このようなプログラムを作ってください。
期待される動作
数字を入れてください
45 Enterを押す
FizzBuzz
時間があまったあなたに
演習1,2のプログラムの改良と、ランダムな数字の扱い
演習4
【演習1】では、7 の倍数かどうかプログラムで判定しました。もし 7 の倍数でなければ入力した数字よりも大きくて一番近い 7 の倍数を表示するプログラムにしてみましょう。
Lesson04でこの問題を取り上げますが、先取りします。
期待される動作
7の倍数であるかどうかを判定します。 6987654321 Enter を押す 6987654321は7の倍数ではありません。 これより大きい一番近い7の倍数は9876543215です。
ヒント
まずは、もし 7 の倍数でなければ入力した数字を超えない、入力した数字に一番近い 7 の倍数を表示するプログラムを考えてみましょう。
演習5
三角形は三辺の長さが定まると形状が決まるので、面積も決まります。つまり、三辺が決まるとそれから面積が求められるはずです。実際、三辺の長さが a,b,c である三角形の面積 S と a ,b,c の間には、次の関係があることが知られています。なお、S² は S を2回かけたもの、つまり S×S を表しています。これをSの二乗(にじょう)といいます。
$$ S^{2} =\frac{1}{16}(a+b+c)(-a+b+c)(a-b+c)(a+b-c)$$
このことを知った太郎君は、三辺の長さを入力し、三角形の面積の2乗を求めるプログラムを書きました。しかし、3 辺として 8,3,4 を入れましたが、値は負の数になってしまいました。なぜでしょうか?またそれに対応する処理を考えてソースコードを改良してみたください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
print("このプログラムは3つの辺の長さから三角形の面積を計算します。") print("1つの辺の長さを整数で入力してください") hen_a = input() hen_a = float(hen_a) # キーボードからの入力は文字列なので、小数型に変換します。 print("もう1つの辺の長さを整数で入力してください") hen_b = input() # hen_b = float( hen_b )# キーボードからの入力は文字列なので、小数型に型を変換します。 print("残りの1つの辺の長さを整数で入力してください") hen_c = input() hen_c = float( hen_c )# キーボードからの入力は文字列なので、小数型にを変換します。 menseki2 = ( (hen_a + hen_b + hen_c) * (-hen_a + hen_b + hen_c) * (hen_a - hen_b + hen_c) * (hen_a + hen_b - hen_c) )/16 #面積という変数を用意します。 menseki2 = str(menseki2) print("この三角形の面積の2乗は"+ menseki2 + "です") |
---|
ヒント①
人は間違いをおかすというのがプログラミングの基本的な考え方です。実際にはありえない数字を誤って人が入力する時があります。ここでのありえない数字とはどんな場合でしょうか?
ヒント②
三角形の成立条件
大人のあなたへ
ある生徒に「インデントしても何も書きようがないときはどうする?」と質問したところ「passという関数を使います。」という回答が返ってきました。この答えはこちらの期待した回答に近いのですが、正確ではありません。
passは正確には「文」であって、「関数」ではありません。もし関数ならPythonはpass() という風に()を付けなければならないからです。
文とは何か、関数とは何かというのは難しい問題ですが、ひとまず次のように覚えておきましょう。
- if , elif else などの文章の骨格をつくるものは文である。
- 関数は()が付く。例えばprint()など。
- この後に出てくる for , while なども文です。