新しい年はドリルから~ドリルで基礎力をつけよう~

1月10日(金)は、6割ほどの出席でした。

  • 18時00分~18時30分 タイピング練習
  • 18時30分~19時50分 Pythonドリル
  • 19時50分~20時00分 あとかたづけ

タイピング練習

タイピングの練習は、「寿司打」です。

年末年始の休みの間に、今後のタイピング練習の方針について色々考えました。まずは寿司打でスコア10,000を超えたら、別のことをさせようかと考えています。スコア10,000あれば、ひとまず十分なタイピング速度です。

それも勝ち抜け方式にします。タッチタイピングは基礎体力です。基礎体力をつけたら、次は何をなすかが重要です。

Pythonドリル~コーディングの基礎力をつける~

電卓プログラムの製作に進みたいのですが、人数も少ないので本日はドリルをやります。出題については、スタッフに一任しています。このスタッフがいい問題を出します。

1問目はこちら。

変数aに5を代入し、aが偶数ならTrue、そうでなければFalseを出力してください。

出力例

False

オーソドックスにif文を使ってもできます。TrueとFalseの使い方に注目すれば、いくつか書き方があります。さて、答えは下の方です。

答えは、下のとおり。

a = 5
if a%2 == 0:
    print('True')
else:
    print('False')
a = 5
if a%2:
    print('False')
else:
    print('True')
a = 5
print(a%2 == 0)

以上3つの答えは、どれも正しい結果を返します。しかし、コードの長さが違います。ans1-3.pyが一番短いので、一番優れたコードと言えます。

ans1-1.pyとans1-2.pyには、自力でたどり着けたメンバーがほとんどです。ans1-3.pyの完答はいませんでした。あと少し、おしい!ところまででした。

ifに条件式として指定している「a%2 == 0」が、「True」「False」を返すことを気づけば、そんなに難しくないはずです。まだ、そこまでたどり着いてないか。

ans1-2.pyでif文に「a%2」だけを指定しているのは、Pythonが内部的に「0以外→True」「0→False」としているからです。これを理解してans1-2.pyにたどり着いたなら100点。書いてみて、結果が正しかっただけなら50点です。

ともあれ、ゆくゆくはans1-3.pyのように2行で書いてほしいとおもいます。というのは、if文はコードを読む人間にとって理解しにくいからです。if文を多用するとコードが複雑になります。随分昔に、if文で3段4段ネストしたプログラムを書いた覚えがあります。今考えるだけで、顔をおおいたくなるほど恥ずかしい記憶です。どうかあのプログラムは、陳腐化して破棄されていますように……。

ドリル2問目はスタッフオリジナル

2問目も良い問題でした。あとで聞いたら、スタッフが即興で作ったそうです。スタッフも力をつけてきました! その問題はこちら。

1から1000までを合計して表示しなさい。

表示例

500500

はじめは100までで出題したら、「1+2+3+……」とはじめたメンバーがいたので急遽1000までに変更です。さあ、お考えください。

こういった繰り返しの問題はコンピューターの得意とするところです。今回はfor文を使ってみましょう。

a = 0
for i in range(1, 1001):
    a += i
    #a = a + i
print(a)

コメント行を除いて、4行で書けたらOKです。3行目をコメントアウトした4行目と入れ替えてもOKですが、「+=」を使ったほうが短くベターです。

ちなみにリスト内包表記を使って、以下のようにも書けます。

a = [i for i in range(1, 1001)]
print(sum(a))

こっちのほうがPythonicな感じがします。ただ、基礎段階でこれをやると混乱しそうな気もします。これは、ご参考です。

美しいコードを書くこと

ところで、わたしがあまりにも「美しくない!」と連呼するものだから、メンバーが「正しく動けば、美しいとかどうでもいいじゃないですか」との指摘を受けました。

コードの美しさとは、「短かくて読みやすく、無駄がないこと」だと考えています。「美しい」とは抽象的な表現であるものの、実は「実利的な」意味があるのです。初学者のときに、肌感覚で美しいコードが何たるかを身に着けてほしいと思います。