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)

よければ、挑戦してみてください。