星田オステオパシー

プログラミング学習日記 2024/02/13〜

2024/02/22 Pythonやってく
 インスタンス名にくっつくカタチで使用される・・これは確かにインチキっぽいw
 なるほど「それだけの事」だったのか〜と。難しく考えてました


 コピペだけどCametanさんのところからドラクエ戦闘コードをいただいてエディタで見てみる。

 Classの種明かしを聞いた後なので以前のように身構えることはなくなった


 Msgsの部分がオッ?ポイントでしょうか。Msgsは辞書で文字列のキーを持ってて、Str.formatメソッドでメッセージを組み立てると。辞書の書式を完全に忘れてました


 実際にインスタンスを作ってみて


 おお〜・・じゃあマルチリンガル目指してやっていきますか!(Ocaml、既に忘れてるけどw)

 

2024/02/21
話題その1 Cametanさんの記事のリンク先を読んでいく

 まず英語を学習しろ!とあったんでリンク先を英語で読めば一石二鳥だな!けど時間がな〜・・ということで結局Claudeに頼んで節ごとに日本語訳してもらう。まずHow to learning Hacking。ふーん、練習先のコードを探さないといけないな。さすがに50行とかのレベルは飛ばして次の500行レベルが良いかな・・とか。とりあえず文書は一通り目を通そうか。やる気湧いてくるんですよね!

話題その2 ラムダの記事を読む
 Cametanさんの記事を読んでコードを拝見、気軽な気持ちで読み始めたが・・
 えっ・・?Racketのコードなのに動作が分からない。実行のコードも試してみてようやく理解したが・・クロージャ分かったつもりなってて全然分かってなかったわ〜・・さらに先があったのか (・。・;
 表現しにくいけど、こういう多段技みたいなのが出来るとは考えてなかった

 で、Python版も拝見する。まずNonlocalを調べて・・DepositMoneyとWithdrawalMoneyは補助関数でDispatchがメインとなってクロージャを返して引数待ちの状態になっとると。で、Msgによって場合分け、それぞれの補助関数というか補助クロージャを呼び出して引数待ち状態になると・・ほぇ〜・・面白い。そして書かれている通りでクラスのありがたさが良く分かりました〜


話題その3 高校数学!
 正確には今朝拝見したんですが・・あ、やっぱり問題ありましたか・・以前からコードの書き方参考にならない!と指摘していただいてたんで「せめてコードはリスト内包表記とかで書こう」と思ってたんですが、そもそものコンセプトがヘンテコリンだったとは・・すでに3分の1くらい進んでるのに、この調子で高校数学を網羅出来るのか?とも思ってたんですが。余計な出費をさせてしまいまして申し訳ないですm(_ _)m

 数学に関しては以前、佐藤優さんがやり直しで勧めてらして買ってた本があるんで、そっちをやろうかと。佐藤さんいわく、数学は身体学習なんで手を使って行うべきって話で、ちょうど使いみちの無かったA4/A3のコピー用紙と大量のボールペンがあるんで、この際ちゃんとやってみようかと。

 そして例の東大気分が味わえるであろう数値計算の本も早速購入しました。まあ、メルカリなんですけど。数値で色々と遊ぶのはコッチでやろうかと。

 そしてPythonはチュートリアルと前に教えて頂いてたDive into Pythonで・・あれ?リンク切れてる?ブックマークにはDive into Python日本語版ってなってるのに。もしかして
 アマゾンで日本語版が売られてるからか?

 PDF版、保存してなかったかなぁ〜・・後で調べてみよう





2024/02/20 Cametanさんの記事のリンク先を読んでいく

 リンク先の文書をまずは日本語になってる部分から読んでいく。いや〜以前読んだのもあるけどやる気出ます。
 特にこれね!僕のどうせ趣味だしずっとRacketで良いか〜とか一瞬思ったんだけど、いくつかパラダイムの違う言語をやるべき!という事を読んだ記憶もあったし、いつかはPythonを・・と、思ってたら高校数学のやり直しが中途半端になってたのもあったし

 と、思ってたらまさしくこの文書だった。そしてここで言及されてたか〜マクロ。うーん、こう書かれてたら絶対にモノにしないとなぁ・・という気になってくる。けど、とりあえずは数学やり直し(というか事実上初見みたいなものだが)と一緒にPythonの初級編をやろう。その後また戻ってもよかろう



 こちら、確かに衝撃的。そして興味深いですねぇ、こういう思想的な話。アイデアとか発想が面白がりポイントなのかも知れないな


 ハッカーに有利かも知れない素養か・・SF映画は好きだな。格闘技は漫画で読むのは好きだけど・・一応小学生の時には超イヤイヤ空手を習っていたけど、それでも良いのかな。瞑想は苫米地博士も激推だったなぁ〜・・博士の機能音源とか・・持ってるけど本当に効果あるんだろうか(^_^;)

 LISPに出会えたのは、多少苫米地英人博士の影響はありましたけど、やっぱりCametanさんの一見チョイ推し、実は激推しのNudgeが決定的でしたよ〜。ホントありがとうございます、おかげさまで一生楽しめる趣味に出会うことが出来ました(^o^)

 夜は宿直先で文書の続きを読んでたんだけど、入れてるOSが32BitのBodhi-Linuxのため、現在Chromeから移行中のBrave-Browserが入れられ無かったので、思い切ってZORIN-OS・17を入れました。定番のソフトをインストールしてたんですが、ソフトウェアセンター(15の時にはこれがちゃんと動かなかったが動くようになってる)からRacketを入れたらちゃんと最新版になっていた!

 UIもいいし、最低スペックの2台以外のLinuxは全部ZORIN-CORE17にしてしまうかな



2024/02/19 Pythonやってく

ちなみに昨日はバイト先の痴呆研修をEラーニングで一気に済ませてて出来ませんでした。ま〜これから僕らの世代が死に絶えるまで大変だよなぁ・・防止のためにもプログラミング学習続けるで!


 Cametanさんのクラス入門を改めて拝見する。うわ〜全てここに書かれていた(^_^;) 
 そして読める・・読めるようになっている!いかに今まで「へぇ〜」ってノリで読んでたかってことです、申し訳ありませんm(_ _)m


 心得ました!



 更にCametanさんの記事内リンクからPythonドキュメントの「クラス」部分を読む。すごく丁寧に書いてある!Racketドキュメントを経験してるとありがたみがよく分かる。
 イテレータの部分で見慣れない記述を発見、ファイルからも入力できるのか


 グーグルコラボではこういう感じでファイルの読み込みも出来るという


 おお〜



 ふーん、Iterはイテレータ属性を、Nextはイテレーションするときの動作を設定してるわけか〜

 明日は引き続きCametanさんの記事とリンクを追って行きます、ありがとうございます〜

2024/02/17 Pythonやってく
 Cametanさんに書いてもらったUnfoldのクラス、そう言えばクラスって何だろう?と思ったのでClaudeに解説してもらって読解していく。まあ、解説に関してはそこそこ信用が置けると思ってるので。GPT4を使いたいけど出先に持ってったのが期限切れのChromebookだったんでClaudeしか使えないのだ。

 Defでクラス内の関数であるメソッドが定義されるので、Initは必ず書かねばならない初期化メソッドってことだな?引数で持ってきた値をインスタンス変数なるものに束縛すると


 同様にイテレータを扱うためには必須のメソッドってことだな?


 ふーむ・・Self.seedを破壊的変更してるということか?メソッドはインスタンス内をスコープ出来るということかな?



 なんとなく分かってきたけどメソッドの定義を聞く。

 うーん・・Instance = Myclass() でMyclassを元にしたInstanceが実際に生成されて
 Instance.x = 10 でself.xに10を代入するということ?
 で、実際に呼び出すと? 具体例が欲しいな



 おいおい、一つ上のと書き方が違うよ。Cl = Circle(5)でInit部分が呼ばれて初期化が行われて、インスタンス.メソッドで関数発動、引数部分は1つ目は必ず省略のSelfが入ってると。もういっちょクレ


 子クラスで内容を定義するってのなら親クラスに(わざわざPassって書くために)作る必要なくない?文法的に必要なのか?


 あ、やっぱり不要か。んでDog(Animal)で分かった、1つ目の引数はクラスの指定だったのか


 ふーん、別にインスタンス変数必須でも無いのか

 一緒にEnumerateの挙動も確認する


 変数を複数使いたい場合はどうすれば良いんだ? 
 えっ?変数を複数用意しても良いし、単数にしてIndex取っても良いの?

 じゃあ変数の数を更に増やしたら?さすがにダメか。Expected 2ってあったからEnumerateは2つの値を返してくるけど、受ける側は1つだったら自動でタプルにされて、2つあったらそれぞれに返してくれるということか・・

 ちなみにIndexタイプの方も変数を増やしたらエラーになった。なるほどねぇ


 後はコラボでグラフを表示させたり。ライブラリを使って行列で方程式を解くんだとか・・はぁ〜まあ、まんま式を入れるだけだから便利と言えば便利なのかな?
 ところでグーグルコラボ、実行環境としてもなかなか良いなぁ。

 Racketも実際に何か動くものを・・って思って作り始めてから自分なりにだけど理解が進んだので、テキトーなところで今度はPythonで何か動くものをつくろうかなぁ・・クラスもそうしないとちゃんと理解出来へん気がする。

 あ、そのためのハングマンか!次回、この時点でハングマンの記事読ませていただきます(^o^)
 

2024/02/16
話題その1 Cametanさんからリスト内包表記の解説
 うーん、これは保存版!ブックマークしました
 わざわざスタック・オーバーフローのページまで出向いていただいたようでm(_ _)m 最初からリンク貼っておけば良かった

 何ィ!?全く気づかなかったですw
 うーん、しかしこのタイミング・・これはしっかりと身に付けろよ!って天の導きやも知れない。しっかりやろう


 おお〜スマート・・そしてnumber->stringがこういう動きをするとも知らなかったですw


 これ!しっかりと覚えよう!そしてこうやって見るとリスト内包表記内だけでお願いします・・ってのは「なんでやねん!」って感じだったでしょうね、スタック・オーバーフローの方々(^_^;) ありがとうございます〜


話題その2 グーグルコラボ
 グラフ描画の単元に入ったのでMatplotlibの使えるWEBサービスを探す。あ、グーグルコラボで使えるのか!そして手持ちのChromeBookでも普通に使えるのだった、やったぜ!


 こういうのが最初から入ってるらしい。そして無料!エエやん・・


 ほぉ〜・・こりゃ手軽だ〜


 とりあえず例題はちゃんとリスト内包表記で書くようにしてグラフで遊ぶ


 適当に指数を変えたりして遊ぶ。ふーん・・偶数だと円弧で奇数だと馬のシルエットみたいになんのか。指数ってのは次元の数ってことなのかな?もしかして平面で表現してるから基本的な形は変わらんけど8次元人とかだったら8次元のグラフは全く別物として認識できるんやろか。

 とりあえずグラフ関係で困ることは無さそうで安心した!ChromeBookで使えるとバッテリーが生きてるからスマホのテザリングを使ってどこでも出来るのが良いんですよねぇ



2024/02/15
 今日は結果的にはちょっとだけ。基数変換で2進数から10進数に戻すコード。入れ子じゃなくて変数を複数使いたい場合どうすんの?ということでWRTNに作法を教えてもらってリスト内包表記で。Zipの提案もしてくれたりしてやりますねぇ!
 イテラブルの意味がようやく分かったのだった 



2024/02/14 無理矢理リスト内包表記
 ありがたいことに3件も回答があったのでそれぞれ読解していこう。
 まずはコチラ・・いきなり<<が分からない。そもそも明らかに元のアルゴリズムである、2で割って商を残して余りをリストにしていく・・ってのになってないだろう。
 Claudeに尋ねてみると(コードを作るのはテキトーだけど解説はそこそこ信用できる・・ような気がする)、ビットを移行するためのものだという。2進数1を100にって感じで。ふんふん・・で、Rangeの中身は10進数TargetのBitの長さを返す関数?なのだとか。最後の::-1は逆向きってことで分かるから問題はどこで正解の2進数にしてるかだけど・・And 1ってところで、その前のm個分ずらしたTargetのBit変換されたものと比べて1なら1、0なら0を返すという。うーん、申し訳ないけどちょっとこちらの狙いとは違うな~(^_^;)
 質問にはちゃんと「リスト内包表記内で対象となる値が更新されて次の対象となるように・・」と書いし、元になってる2で割って・・のコードも載せたんだけど。まあ、まさかこんな非効率な実験につきあわされてるとは思ってないかw。10ー>2進数変換が出来る機能があるんだから使って当然と。ま、そうなんですけどね~


 続いて2つ目。一見して分かるけど1つ目と基本的な考え方は一緒と思われる。リストの反転を最初にやってるくらいかな?うーん・・


 そして最後。おっ!これは・・なんかいい感じの表記がある divmod(n, 2)ってのはいかにも2で割ってます!って感じ。ただ、全体が一体どういう意味なのか分からない。よってここでリートン先生に頼る。Claude先生はちょっとついてこれない模様。リートン先生の中身はGpt4だからもしかして・・と淡い期待を掛けてみたのだ。


 最後の注意点はコードを書いてくださった方も「本当は良くないんですが」と書かれてました。:= ってのは何だろうか?


 ははぁんlet*みたいなもんか。


 Orが分からない。えっ、Pythonって0も#fなのか・・Nullも#fと。
 で、#tなら左側#fなら右側が評価・・なんかややこしない?



 あ、PythonのIfってそういう仕組になってるのか・・そう言えば前にCametanさんのところで三項演算子の話があったけどコレか~。
 なるほどDivmodは多値を返すってことね、うまい仕組み!これで商と余りをそれぞれ格納できる。
 ただ、(r := divmod(n, 2))[0] else r[1]が分からない。なんで[0]はr[0]じゃないのか?



 あ、分かった。なるほど・・余りがあってもなくても余りをリストに入れて、商(Index0)がある場合には参照する側の数値に更新してくれてるのか・・
 [0]はIfで返るタプルのIndex0をチェックするためのものだったのね。うおー!めちゃくちゃスッキリした。

 という訳で結論!リスト内包表記でも非推奨な書き方であれば書ける!いや、なかなか勉強になりましたわ~。Culade先生はリストラしてリートン先生に乗り換えよう。


2024/02/13 基数変換からやってみるか・・
 途中でストップしていた
 こちらを再開する。最初からってのもアレだし基数変換からやってみる


  例によってPaizaで実行していく。が!ビックリするほど忘れてて書き方や実行方法も分からないレベル。インデントのルールももちろん忘れているのだった



 あ、こうだったか、と。はいはいから始めるって感じで。
 ところでPythonと言えばリスト内包表記・・ということで、これも可能なんだろうか?


  無駄と知りつつAIに依頼してみる。まずはClaude。ライブラリとか使わずに生のアルゴリズムでお願いしますと依頼したが・・なんか妙なの使ってるね?そして実行も出来ないのであった


 続いてGoogleのBARD。むっ!なんかそれっぽいのを出してきた。
 が、正解は[1, 1, 1, 1, 1, 0, 0, 1, 1]になるはずなので・・こちらも問題外。

 しょうがないのでスタックオーバーフローに書いてみる。今回はメジャーなPythonということで日本語版で。

 ありがたいことにしっかり回答をいただけたのだが・・・!続きは明日
名前:
コメント:

※文字化け等の原因になりますので顔文字の投稿はお控えください。

コメント利用規約に同意の上コメント投稿を行ってください。

 

※ブログ作成者から承認されるまでコメントは反映されません。

  • Xでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

最近の「プログラミング」カテゴリーもっと見る

最近の記事
バックナンバー
人気記事