新しい年はドリルから~ドリルで基礎力をつけよう~
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な感じがします。ただ、基礎段階でこれをやると混乱しそうな気もします。これは、ご参考です。
美しいコードを書くこと
ところで、わたしがあまりにも「美しくない!」と連呼するものだから、メンバーが「正しく動けば、美しいとかどうでもいいじゃないですか」との指摘を受けました。
コードの美しさとは、「短かくて読みやすく、無駄がないこと」だと考えています。「美しい」とは抽象的な表現であるものの、実は「実利的な」意味があるのです。初学者のときに、肌感覚で美しいコードが何たるかを身に着けてほしいと思います。