見出し画像

活動報告07(2021年5月)

プロジェクト薬箱「Python編(入門)」
 最初の教材として京都大学のPythonプログラミング演習教材を選択した訳だが、思春期を大阪で過ごした身としては、感慨深いものがある。というのも、少なくともその頃関西圏の高校生にとって憧れは、京都大学だった。なぜか大阪大学ではないんだよね、不思議。実際に一時期は京大の理学部志望で、量子力学を学びたかった。人間としても科学者としてもファインマンを尊敬していた。結局、紆余曲折あって東京の大学に進学したので、「京都で勉強して、大阪で食事して、神戸で遊ぶ」という生活を果たせなかったのは、心残りではある。

 さて、Pythonについての勉強の進め方だが、この演習教材以外にも6冊の参考書を選んだので、アマゾンのセールを待って順次購入していく方針。プログラム言語は、所詮名詞と動詞のみで構成された語学だし、3冊も読めば理解できるだろうと、強気で臨む。
それでは、教材に取り掛かる。数学のイメージが抜けなくて、「=」が等号ではなく代入演算の意味であることに慣れない。プログラムの順次実行下で、次々に上書き代入していくというイメージで捉える。

 平方根の近似値を求める例題では、計算に複数の変数が登場して面食らう。自力ではこの式を導き出すのは無理だな。以下、関数の引数、返り値から始まって、for文、range関数、while文、if文、この辺はよく理解できる。課題も自力で処理可能。ただ、while文の課題で、なぜ後続の処理が進まないのか分からなかったが、while Trueで無限ループに入り込んでいたことに気づき、break。
 Turtleは描画するカメだ。プログラム即描画が始まるので、直感的に理解しやすい。フラクタル図形は、ユーザー定義した式の値を順次小さくして繰り返し処理するということだな。課題の作品制作も面白い。ネット上では知らない関数で魔法陣やイデオンのゲージ等の複雑な図形を描いているが、習った関数を組み合わせるだけでも相応に描画できるので、楽しくこの章を終えることができた。

 しかし、順調だったのもここまでで、その先は茨の道だった。tkinterでGUIアプリケーションを作成するにあたり、ウィジェットの作成やgrid配置等の外形面だけなら問題なかった。しかし、例題の2項計算機のソースコードが意味不明。なぜこれで計算動作できるのか見当もつかない。ネット上で見つかる計算機も、別の関数を使ってシンプルに処理しており参考にならない。さらにFrameクラスを拡張する箇所は、そもそも普通のクラスの理解が不十分なのに拡張って何って感じ。抵抗したが素通りせざるを得なかった。
 例題のアナログ時計については、文字盤の描画は三角関数なので理解できたが、なぜ拡張したクラスの引数が、この表記なのか分からない。super、start、toggledとなぞの関数が続々と登場。もはやどれがシステム関数かユーザー関数なのか遭難している。別の参考書も確認するが、つまみ食いでは理解できず。オブジェクト指向の概念は理解できるが、クラスの書き方と使い方は、ここの説明だけでは全く理解できない。_main_を横目に先に進む。

 リストとファイル入出力については理解が進んだが、例題の周期関数のソースコードが直感的に理解できない。三角関数の近似は、単なる数学なので易しい。しかし、range関数が入れ子になる箇所では、どんなループになっているのか分からなくなる。
 そこで、理解のために編み出した方法が、ソースコードを分割し、節目毎に適宜print関数で出力するというもの。時間はかかったが、これでコード処理の見える化ができた。一方、課題ではリスト化してcsvファイルへの書き出しで苦戦した。普通にやると数値が文字情報で書き出されてしまう。結局、splitで得られた最初のリストをmap関数でfloat化して、再リスト化することでシングルクォートが外れた。それでも、まだリストの前後にある[]が残ってしまうが、これはcsv.writerで処理してようやく解決。

 とりあえず今回はここまで。いつも報告は遅れ気味なので、ここで仕切り直して、次回からは翌月の第1週にはアップすることを決意。

この記事が気に入ったらサポートをしてみませんか?