for文とif文の組み合わせ
1月31日(金)は、大学院生の講師が担当し、pythonのドリルをやりました。
- 18時00分~18時30分 タイピング練習
- 18時30分~19時50分 Pythonドリル
- 19時50分~20時00分 あとかたづけ
タイピング練習
タイピングの練習は、「寿司打」です。
スコア10,000を超えたメンバーには、別課題のプログラミングも用意しています。
前回超えたメンバーにもやってもらっているのですが、なかなか難しいようです。
Pythonドリル~コーディングの基礎力をつける~
今日のドリルは、前回勉強したfor文の復習と、for文とif文の組み合わせを勉強しました。
まずは、for文の復習から。
九九の8の段を、改行で以下のように出力しなさい。
>8
>16
>24
>32
>40
>48
>56
>64
回答は、下のとおり。
for i in range(1,10):
print(i*8)
[print(i*8) for i in range(1,10)]
問題文の「改行」という部分が気になる人が多かったようですが、pythonではprint関数を使うと、勝手に最後に改行が入るので、あまり気にしなくていい部分です。
1-1はfor文を使ったシンプルなプログラム、1-2は1-1をリスト内包表記を使って一文にしたものです。
1-2もできた人が数人いました。いずれは全員出来るようになってほしいですね。
ただ、前回習ったものをコピペすると、下記のようにリスト表記になったまま出力されるので要注意です。
kuku2 = []
for i in range(1, 10):
kuku2.append(i * 8)
print(kuku2)
>[8, 16, 24, 32, 40, 48, 56, 64, 72]
3で割り切れるかどうかの判定
次はif文のシンプルな問題です。
変数 a に 8 を代入して、a が 3 で割り切れるなら「Yes」割り切れないなら「No」を出力しなさい。
if文の基本的な使い方もそうですが、あまりの計算の時に使う「%」を覚えているかどうかも大事です。
回答例はこちら。
a=8
if a % 3 == 0:
print("Yes")
else:
print("No")
ifを使って、もし変数 a を 3 で割った余りが 0 なら「Yes」を出力
elseを使って、上の条件に当てはまらないなら「No」を出力するようにします。
「割り算のあまり」という考え方は、意外と忘れているメンバーが多い気がします。
おそらく学校で習う算数は、「分数」が出てくると、「あまり」の考え方」を使わなくなるからかなと思っています。
プログラミングではそこそこ使う考え方なので、覚えてもらえるとうれしいですね。
3で割り切れるか ~for文とIf文を使って~
さて、今回の目玉である、for文とif文の組み合わせ問題です。
1から30までの数字を改行で出力し、
3 で割り切れる時は、数字の代わりに「Yes」を出力しなさい。
難しいかなと思っていましたが、結構あっさり出力できるメンバーもいて、びっくりしました。
回答はこちら。
for i in range(1,31):
if i % 3 == 0:
print("Yes")
else:
print(i)
問題文では、少々意地悪な書き方をしてしまいました。
実際にプログラムを書く際には、まずfor文を使って1~30の数字を変数 i に代入していきます。
if を使って、もし 3 で割り切れるなら「Yes」を出力し、
elseを使って、上の条件に当てはまらなければ、「No」を出力するように書きます。
こうしてfor文とif文を組合せることでたくさんの数字を判定すことができます。
とはいえ、インデントの位置が悪かったり、数字を出力するprint(i)が if文の前にあると、思わぬ出力結果になってしまいます。
試行錯誤していくうちに理解してもらえたらいいなと思い、あまりヒントを出さずにやってもらいました。
おまけ
余った時間でビートル山本先生が出題する難問に挑戦してもらいました。
1
2 3 4
5 6 7 8 9
・
・
・
のように続く数字のうち、100段目の10番目の数字を出力しなさい。
数学の問題で、ちょっと難しいですが、解答例はこんな感じになります。
ans=0
for i in range(1,100):
ans+=2*i-1
print(i,ans)
print(ans+10)
よければ、挑戦してみてください。