Casio Python のポテンシャル

Python Casio Python
 Casioグラフ関数電卓の Python を使ってみる
     - Casio Python のポテンシャル
目次


初版:2020/06/07
更新:2020/06/29
更新:2020/11/03
更新:2021/03/25

 次の記事 - 1. はじめに:電卓で作る初めてのスクリプト



カシオ・グラフ関数電卓にある Pythonモード - Casio Python

[2020/11/03 更新]
カシオグラフ関数電卓に Pythonモード <パイソン・モード> が搭載されるようになり、casioplot モジュールが追加されたので、それで遊んでみようと思います。Casio Basic やPCでのプログラミング経験があれば、Casio Python は意外に敷居が低いかも知れません。

管理人はネットでチョコチョコっと調べながら、結構使えています。そこで、 プログラミング経験はあるが Python 初心者の人向けに Casio Python のサンプルプログラム作成の連載をしばらくやってみようと思います。Casio Basic プログラムを Casio Python へ移植することからスタートし、Python らしいスクリプトの書き方の紹介へ進んでゆく予定です。併せて、Casio Python のリファレンス情報、特に Casio Python 特有の仕様があれば、それを公開してゆこうと思います。

本連載の全体像は 目 次 をご覧ください。

さて、Casio Python の連載は、管理人がそのポテンシャルの高さに驚いたことが全ての始まりなので、今回はそのあたりを紹介します。
==== 2020/11/03 更新ここまで ====


0. Casio Python のポテンシャル

Python の準備

Casio Python 搭載モデルの準備
Casio Python
搭載電卓を入手して、必要に応じてOSのアップデートをします。
現時点では casioplotモジュールが追加された fx-CG50 OS3.40 以降を強くお勧めします。

ちなみに、Casio Python が搭載されているのは、以下のモデルです (2020/06/07 現在);
fx-CG50, OS3.20 以降
fx-9750GIII, OS3.21 以降 (北米限定発売モデル)
fx-9860GIII, OS3.21 以降 (ヨーロッパ限定発売モデル)
GRAPH 90+E, OS3.20 以降/ GRAPH 35+EII, OS3.21 以降 (フランス専用モデル)
 それぞれが fx-CG50fx-9860GIII と同じ

[2020/10/22 追記]
Pythonモードで実用的なプログラムにするにはグラフィックモジュール casioplot が不可欠です。casioplot は OSアップデートで追加するしかありませんが、それが可能なのは下記のモデルとOSバージョンです (2020/10/15 現在)
 fx-CG50, OS3.40以降     このモデルの概要 
fx-9750GIII, OS3.40以降    このモデルの概要 
fx-9860GIII, OS3.40以降    このモデルの概要 
 GRAPH 90+E, OS3.40以降
 GRAPH 35+EII, OS3.30以降

fx-CG50 のOSは、2020/10/15 時点で OS3.50 にアップデート可能です。OSアップデートは、それぞれのモデルが発売されている地域のカシオサイトからアップデートファイル と アップデートされたマニュアルが入手できます。具体的なアップデートサイトについては上記の "このモデルの概要" ページで紹介しています。

Pythonモードでは、casioplotモジュールを使わないと、思うような出力ができる実用プログラムになりません。本連載は主に fx-CG50 OS3.40以降を前提にして進めてゆくつもりです。但し、モノクロ液晶搭載モデル fx-9750GIII や fx-9860GIII の Pythonモードに casioplot を追加するOSアップデートファイルが 2020/10/15 に公開されたので、これらをアップデートした Casio Python についても紹介する予定です (目次参照)。

 fx-CG50, OS3.40以降: 日本語マニュアルがあり国内どこでも入手できます。
 fx-9750GIII, OS3.40以降: 最安値のモデルです。国内でもAmazon USAで購入可で安価(英文マニュアル)。
fx-9860GIII, OS3.40以降: ヨーロッパ専用モデル。ほぼ同じ機能の fx-9750GIII をお勧めする。

モノクロ液晶搭載モデルのうち、現状最も安価に入週できる fx-9750GIII も無視できないとことがあります。これらモデルの Pythonモードはメモリの制限が強く、使い勝手が fx-CG50 よりも悪いのは残念です。

さて、Pythonモードのアップデートにより新機能や新モジュールが追加された場合は、随時 対応することにします。


Python スクリプト保存フォルダの作成
工場出荷状態では、ストレージメモリのルートにスクリプトファイルが保存されるようになっています。

これから多くのスクリプトファイルを作ってゆくので、ストレージメモリ直下に専用フォルダ、例えば @Python フォルダを作ると良いと思います。電卓内に新たなフォルダを作るには、PCとリンクしてからエクスプローラで電卓の内部を表示して、そこでフォルダを作ります。もし C.Basic を既にお使いの場合は、C.Basicプログラム専用フォルダを作り、そこへ移動しておくことも合わせてお勧めします。これで Python スクリプトと C.Basicプログラムが混在することを防げます。


Python スクリプトファイルの正体
スクリプトファイルは、アスキー文字で書かれたテキストファイルです。Python の構造制御に不可欠なインデントは半角スペースです。電卓上でスクリプトを書く場合、自動インデント機能によりスペース2個が付加されます。また、改行は Windows標準の CR LF (0x0d 0x0a)になっています。

PCに転送すれば、テキストエディタを用いて、スクリプトの確認や編集ができます。PCで編集する場合は、アスキーコード以外を入力しないように留意しましょう。



Casio Python とは? [2020/06/09 の夜に大幅改訂]

Casio Python は、カシオグラフ関数電卓にある Pythonモードを指します。ある程度の関数があらかじめビルトインされていますが、追加ビルトインするモジュールはカシオから提供されていません。自分で作った関数をモジュールとして使うことはできます。Casio Basic では自分で関数を作って使うことはできないので、その分 Casio Pythonは使い勝手が良いと言えます。

Pythonモードが公開された当初は、mathモジュールとrandimモジュールが追加された状態でした。その後 casioplotモジュールが追加されて、ようやくグラフィック描画が可能になりました (fx-CG50, fx-9750GIII, fx-9860GIII)。但し、ピクセル単位でドットを描画すること、ピクセルの色を得ること、テキスト文字を表示することのみができる程度で、Casio Basic のようにグラフを自在に描く機能はまだ公開されていません。今後カシオからさらに新しいモジュールが提供されることを期待しています。汎用的に使える自作関数を複数まとめて1つのモジュールにして、それを使うことも紹介してゆきます。

ところで、Casio Basic で書いたものはプログラムと言い、そのファイルをプログラムファイルと言っています。一方、Python については、取扱説明書の表現によれば、スクリプトを書いて、スクリプトファイルに保存する、と言っているので、本連載でもこの表現を使ってゆきます。

Python は機械学習やDeep Learningで多用されている言語で、"1つのことをするには1つの書き方しかない" といったポリシーで、分かりやすく使いやすいことを目指して作られた言語です。様々な専門分野に特化したライブラリ(=モジュール)が様々な人によって多く提供されるようになり、初心者でも専門家でも使いやすい言語して大きな広がりをみせています。また、Webサービスでも使われています。Pythonを使えるようになるのは、今後を考えると有意義なことだと思います。

Casio Python は組込用Pythonである Micro Python Ver 1.94 がライセンスされ、カシオがカスタマイズして電卓に組み込んだものなので、一般にPCで使われている Python (CPython) に比べて Casio Python は機能が限定されています。

実際に管理人がCasio Pythonを使い始めて感じるのは、提供されている機能が限定されているので、覚えることが少なくて、理解が容易だということです。カシオ電卓に搭載されている Python は、一般のPythonのサブセット版ではありますが、最近のソフトウェア技術のパラダイムに沿った基本仕様は損なわれていませんので、Python の味見用のお試し版、学校での学習用として使えると思います。

Casio Basic を使いこなして作ったプログラムを Casio Python に移植しようとすると、機能不足、関数不足のために、どうしても移植できないプログラムがあります。Casio Basic と同じ事を実現するために必要不可欠な機能が Casio Python にはまだ揃っていないのは残念なことですが、それなりに工夫すれば使いこなせると思います。
例えば、Casio BasicGetkeyLocate に相当するものが Casio Python にはありません。
Getkey ⇒ これは、どうにもなりません。カシオさんお願い...
Locate ⇒ locate() 関数を自分で作り使用中 ⇒ ユーザー関数 locate()

ところで、Python は本来オブジェクト指向言語です。ライブラリ(=モジュール)を呼び出して使う時に、オブジェクト指向特有のobject.method といった記述が必要なケースもありますが、オブジェクトとメソッドをあまり意識しないで、関数型言語のように使える側面もあると思います。特に Casio Python ではほとんど関数型言語のように使っても、とりあえずスクリプトが書けると思います。マニュアルの記述にもオブジェクトやメソッドという単語が殆ど出てこず、関数という表現が多用されています。



Casio Python の潜在能力 - fx-CG50 OS3.40以降

純正Casio Basic のプログラムから移植可能なものを 実際にCasio Python書き直してみました。すると、

Casio Basic に比べて実行速度が圧倒的に速い!

以下で紹介しますが、その爆速っぷりは、チョット驚きです!
俄然 Casio Python に興味を持ち、詳細を調べたくなりました。
先ずは、その速さを紹介します。


純正Casio BasicCasio Python の処理速度の比較 
Casio Python でグラフィックス描画、関数計算、加算計算をさせて、純正Casio Basic と比較してみます。

グラフィック描画の比較 - フラクタルでシダの葉

shida_py_s 

これは、以下の記事で取り上げたフラクタル図形の描画プログラムです。
fx-CG50 でフラクタル - シダの葉

そこで作成した 純正Casio Basic のプログラム SHIDACG.g3m を Python に移植しました。
Casio Basic プログラムファイルと Python スクリプトファイルのダウンロード

フラクタル図形描画時間の比較
純正Casio Basic40 分
Casio Python24.4 秒
アドイン版Casio Basic - C.Basic for CG Ver 1.45β43.0 秒
※ C.Basic for CG Ver 1.45βについては こちらを参照
※ C.Basic は、コードの最適化により、さらに10倍近く高速化可能です。
 比較のため下記の純正Casio Basic コードを走らせました。

Python は100倍速い!

Casio Basicオリジナルコードと Python スクリプトを以下に示します。できる限り忠実に再現していることが分かると思います。

shida_g3m_py_src3


関数計算の比較 - sin と cos の繰り返し計算

tstfinc2_g3m_py_src
TSTFUNC2.g3m と tstfunc2.py のダウンロード

N に1000 を入力した時 (1000回ループ) の関数計算の比較
純正Casio Basic6.5 秒
Casio Python0.6 秒
アドイン版Casio Basic - C.Basic for CG Ver 1.45β0.38 秒

Pythonでの関数計算が10倍速いことが分かります。


加算計算の比較 - 加算とループ

tstsum2_g3m_py_src2  
TSTSIM2.g3m と tstsum2.py のダウンロード

N に1000 を入力した時 (1000回ループ) の加算計算の比較
純正Casio Basic2.2 秒
Casio Python0.15 秒
アドイン版Casio Basic - C.Basic for CG Ver 1.45β0.02 秒

Pythonでの加算計算が15倍程度速い結果になりました。


Python が速い理由
加算計算や関数計算で10~15倍程度速いだけでなく、グラフィックス描画がさらに10倍程度速いことが分かりました。

ちなみに、シダの葉描画のPhytonスクリプトの最下行にある show_screen() を for ループの外に出すと、VRAM上で全てのデータが揃ってから一気に画面転送を行うことになり、この時は 20.8 秒とさらに速くなります。つまり、show_screen() による画面転送速度が極めて速いことが、シダの葉描画の爆速の原因と言えます。

複雑な計算やグラフィックスやグラフ表示には極めて役立つという、Casio Pythonの潜在能力が明らかになったと思います。今後のグラフィックおよびグラフ描画のためのモジュール追加が期待されます。

なお、シダの葉描画で利用した clear_screen() メソッドは、OS3.40では隠し機能でマニュアルやカタログ機能にありませんでしたが、OS3.50 で公開機能となりました。但し、マニュアルやカタログ機能で見つからない隠し関数がまだ多くあり、これらを探索する方法があります。
Casio Python とは? の "2.2 Casio Python に組み込まれているオブジェクト名の一覧" を参照してください。



Casio Python 探索

Casio Python の潜在能力が意外に高いことが分ったので、これから色々と詳細を調べながら探索を進めたいと思っています。

fx-CG50 や fx-9750GIII のマニュアルを読むと Python モードでの操作法は書かれていますが、関数やメソッドの使い方は殆ど書かれていません。幸いなことにネットで PCの Python (CPython) について簡単に調べて参考にできますが、Casio Python 独自仕様や制限があり、悩むことがあると思います。

そこで、Casio Python を探索しながら、使いこなしの記事を書こうと思います。



 目 次

次の記事 - 1. はじめに:電卓で作る初めてのスクリプト




応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ


 


keywords: fx-CG50Pythonfx-9750GIIIfx-9860GIIIプログラム関数電卓

リンク集 | ブログ内マップ
関連記事

テーマ : プログラム関数電卓
ジャンル : コンピュータ

コメントの投稿

非公開コメント

Pythonの入門書

ジュリアン様


> CG-50ーNに付属しているPythonの入門書はどれがいいですか?


fx-CG50に実装されている Python は、パソコンで使う Python に近いものですが、大幅に機能が制限されています。パソコン用に普及しているPythonは、CPython とも呼ばれております。

fx-CG50 の Python は、機器組込用の microPython のライセンス下で実装されているもので、microPython よりも機能が制限されたものです。microPython は、uPython とも呼ばれています。

fx-CG50 の Python は、CPython でも uPython でもありません。これらよりも大幅に機能制限され、さらに CASIO が電卓用にカスタマイズしたものです。

従って当ブログでは CASIO の電卓に搭載されている Python を Casio Pythonと呼んで区別しています。


Casio Python の入門書は、世の中に存在しません。

一方で、CPython については色々と入門書があると思います。uPython の入門書は、あるかどうか調べたことが無いので、よくわかりません。


私自身の話を致しますと、fx-CG50 の Casio Python を使う前は、Python を使ったことがありませんでした。Python を実際に使ったのは、fx-CG50 でした。

ではどのように勉強しているかと言えば、ホームページで公開されている 多くの CPython の入門講座を色々と探した結果、私にとって分かりやすいと感じたものを、最初から順に読んで勉強しました。

https://atmarkit.itmedia.co.jp/ait/series/12963/

この講座は、CPython について説明しています。

そして、この CPython の入門講座を勉強しながら、実際に fx-CG50 で Casio Python スクリプトを書きながら、その違いを理解、検証しながら、Casio Python の記事を書いてきました。


今アドバイスができるとすれば、上記の CPython の入門講座を読み、Casio Python との違いを受け止めながら、学習を進めることです。上の入門講座が判りにくいとお感じならば、ご自分でネット上で色々な入門講座を読んでみて、良さそうなものを探しになると良いと思います。

ここまでは無料です。


実は、fx-CG50 で使うことを前提にして、書店でPython入門の書籍を多く調べてみましたが、私がスグに判ることを冗長に説明していて、逆に知りたいことが殆ど書かれていないものが極めて多く、お金を払ってまで購入する気になれませんでした。

Casio Basic は、特有のとても大きな癖があるので、当ブログの Python の記事もご参考になると思います。
https://egadget.blog.fc2.com/blog-entry-726.html

No title

管理人さんこんにちは。
CG-50ーNに付属しているPythonの入門書はどれがいいですか?
それではよろしくお願いいたします。

No title

管理人さんこんにちは。
わざわざありがとうございます。
ブラザー製の複合機なので機能が無いです。
メーカーからPDFファイルを印刷したクリップで止めている分厚いマニュアルが届きました。
連立方程式を解いて楽しんでいます。
それでは失礼いたします。

Re: No title

ジュリアン様


> PDFファイルのマニュアルを製本するアプリです。
> メーカーに注文しましたがどんな物が来るかわからないです。

製本アプリについては知りません。

自分で使うプリンタをパソコンにインストールする際は、専用のドライバやアプリがインストールされます。私がパソコンにプリンタをインストールしたら、そこに有った製本しやすい印刷をする機能を使いました。有ったから使ったわけで、アプリを持っていたわけでも、探して使ったわけでもありません。

このような便利な機能は、プリンタの種類やメーカーにより様々です。プリンタについてこれ以上詳しいことは判りません。マニュアルのPDFファイルを印刷するときに使いました。

印刷物の製本については、全く判りません。

No title

管理人さんこんにちは。
PDFファイルのマニュアルを製本するアプリです。
メーカーに注文しましたがどんな物が来るかわからないです。

Re: No title

ジュリアン様

何のご質問なのか??
ひょっとして、製本用の印刷アプリのことでしょうか?

私はプリンタに付いている機能を使いました。大手メーカーのプリンタなら、このような機能は付いているのではないかと思います。
詳しくは判りませんが、もし付いていないのなら、普通に印刷して綴じるのでも良いかとは思います。

No title

管理人さんこんにちは。
何というソフトですか?
ダウンロードしてインストールして作りたいのでよろしくお願いします。

紙のマニュアル

ジュリアン様

初めて買ったグラフ関数電卓が、fx-9860GII でした。
これを買った時は、マニュアルのPDFを各チャプターごとに製本するフォーマットでプリントアウトし、13分冊(だったっけ)の紙のマニュアル本を作って、読み物として読んだり、辞書的に使ったり、結構ボロボロになるまで愛用しました。

fx-CG50については、大きな違いがなかったので、変化したっぽいところだけPDFのまま拾い読みしました。

知りたい項目にアクセスする速度は、紙のマニュアルの方が圧倒的に速いかも知れません。
もっとも、PDFにもしおり機能がありますが、そもそも端末の電源を入れて、PDFを起動して...は煩わしいですよね。

No title

管理人さんこんにちは。
CG-50ーNの「紙のマニュアルはありますか?」とメーカーに問い合わせたら、「原本がないので、コピーしたものを送ります」と返事がありました。
今の時代も「紙のマニュアル」は必要だと思います。
スマホやタブレットやパソコンで見る事が出来ますが、「やっぱり紙のマニュアル」です。
それでは失礼いたします。

素因数分解

ジュリアン様

「因数分解」と「素因数分解」は似て非なるモノですね。

因数分解は、数式の変換でしかなく、数式変換機能 (CAS機能といいます) のある電卓でないとできないです。とはいっても、CAS機能があっても何でも因数分解できるのかどうかは、私も判りません。ちなみにカシオ製品では、 fx-CP400 や fx-CG500 がCAS機能搭載とされています。

カシオの方が言われているのは、「素因数分解」のことかと思います。与えられた任意の整数は、必ず素数の積で表現できて、その素数の積を求めるのが素因数分解です。

一部のスタンダード関数電卓には、素因数分解機能が内蔵されており、Casio Basicが使えるプログラム電卓には内蔵されていないので、カシオの方が言われたのは、「素因数分解」のことだと思います。

素因数分解機能が最初に内蔵されたカシオのスタンダート関数電卓は、fx-995ES で、その後 fx-JP900 など幾つかの電卓に内蔵されています。

fx-995ES に素因数分解機能が内蔵され、その処理がとても速いのに感心しました。但し扱える整数の桁数に限界があったり、算出される素因数の桁数にも制限があります。そこで、fx-5800P で素因数分解プログラムを作り、与える整数と素因数の桁数の限界をより大きく10桁以下としました。しかし、fx-5800P はそもそも処理速度が遅く、スタンダート関数電卓内蔵の処理速度にはとても叶いませんでした。

アルゴリズムの見直しと、Casio Python や C.Basic などの高速処理系そして、fx-CG50 といった速い電卓の組みあわせで、スタンダード関数電卓内蔵機能よりも速く計算できるようになりました。...というか、それを目指して何年かかけて、色々やってきました。

以下がそのまとめです;
https://egadget.blog.fc2.com/blog-entry-215.html

お持ちの fx-CG50 の Pythonモードで走る Pythonスクリプトや、C.Basic のプログラムもダウンロードできるので、お試し頂けると思います。

これらは、入力する整数や素因数の桁数制限は15桁以下となっていて、処理も速いので、電卓内蔵機能を確実に超えました。

No title

管理人さんこんにちは。
カシオに問い合わせたら、「因数分解は出来ない」と回答がありました。
CG50では無理で、JP900では出来ます。
それでは失礼いたします。

No title

管理人さんこんばんは。
CG-50で「因数分解」が出来なくて困っています。
どう計算式を立てたらよいか?考え込んでいます。
それでは失礼いたします。

No title

管理人さんこんにちは
今日届きました。
マニュアルが無くてPDFファイルでしかないです。
紙のが欲しいです。
ゲームをインストールして遊んでいます。
勉強していきますのでよろしくお願いします。

Re: No title

ジュリアン様

関数グラフの出力につては、純正Casio Basicが最も楽だと思います。既にグラフを描く関数が準備されているからです。

C.Basic には、純正Casio Basicにあるグラフ描画関数が殆ど実装されていません。

Pythonには、国内では公式にはグラフを描画するモジュールが提供されていないので、自分で点を描画しないとダメです。
但し、フランス市場では開発と公開が一足先に進んでいて、グラフ描画モジュールが公開されているので、それを使う手はあります。

Casio US が公開している YouTube があります。説明欄から turtle.py と matplot.py の2つのモジュールをダウンロードできます。私もボチボチと試してみようと思っています。
https://www.youtube.com/watch?app=desktop&v=7R2lO-uWeHs

これらが公開される前に作り始め、最近まで公開されているのを知らずにいたので、自作のユーザーモジュールで、円や直線を書く関数、Casio Basic のLocateと同等以上の機能の関数、モノクロモデルとカラーモデルの判定関数などを u.py としてブログで公開して、使っています。入力が楽なように u.py というモジュール名にして使っています。
https://egadget2.web.fc2.com/python/user_module/u_ver15.html

但しグラフ機能については、自分でモジュールを作るのも良いですが、グラフや図形を描画するには便利そうなのでジュリアン様も turtle.py や matplot.py を使っては如何でしょうか?

No title

管理人さんこんにちは。
まだ届いていないですが、勉強して「バイオリズム」のサインカーブを表示するプログラムを作りたいです。
PythonかBasicで作りたいです。
それでは失礼します。

dir() があったなんて...

通りすがりの方へ、

お名前が無いので、通りすがりの方とさせて頂きます。

貴重な情報を頂き、大変ありがとうございます。

dir() が隠れていたのですね!

お陰で隠しオブジェクトが結構あることが分かりました。

casioplotに clear_screen() があるのも確認できました。

隠しコマンドを試してみるのも楽しそうえす。

Re^5:Pythonパワー炸裂ですね!

管理人様、Colon様、皆様、こんにちは!

管理人様、
>ここのところ気温が高くなってきていますので、体調にはお気をつけくださいね。
>マスクによる熱中症のリスクも高まっていますので、なかなか厄介です。
>私は、広いところではマスクを外すようになりました。

>C.Basic はとりあえずは安定バージョンなので、どうぞごゆっくりと...

ありがとうございます!
猛暑とマスクの組み合わせはかなりきついですね。
うまく乗り切っていこうと思います。(^^)


>シダの葉グラフィックスの爆速っぷりを体験したことで、Casio Python を見る目がすっかり変わってしまいました。
>これはスゴイと思いました。

やはり言語系は処理速度があってこそですね。
ClassPadのように遅ければ高機能でも積極的には使う気にならないので、速度は大事です。(^^)


>Casio Basicのようにはいきませんが、ピンポイントで Casio Pythonを適材適所で使えば、グラフ電卓の活用の幅が広がるのではないかと思ったことから、先ずは自分の勉強のため、そして勉強したことを定着させるため、Casio Pythonプログラミングの連載を始めることにしました。

計算処理に関しては電卓のCPUパワーほぼ最大限引き出せますし、
グラフィックスが使えるようになったことで表現力も飛躍的に上がりました。
あとは入力系ですが、これもいずれは搭載されると期待したいです。(^^)


>グラフィック出力用に draw_screen()関数が追加されたのですが、これを使ったユーザー関数 locate() を作って使っています。出力先はグラフィックですが、フォントサイズを大中小の3通りが選べ、色もrgb指定できるとても便利な関数になっています。

コマンド数がやけに少ないとは思っていたのですが、基本的なところはしっかり押さえてありますね。
フォントの大きさが選べるのはやっと公式に内蔵フォントが活かせることになりますね。(^^)


>いずれ、やってみようと思います。
>備わっている関数やメソッドを一通り把握してみる段階が済んだら、Pythonスクリプト最適化の一貫で、ループ速度テストや、整数のみでの高速化の調査をやりたいと思っています。

楽しみにしています!(^^)




Colon様、

>了解しました。

>コメントが埋まりそうなので、バグの報告は sentaro様のほうが落ち着いてからまとめて行います。

>致命的なバグは見つけられないので、
>新しいコメントが追加される中で、遡らないと確認できないよりは sentaro様に余裕が出来てからコメントした方がよいかな、というつもりでした。(^^
色々とお待たせしてしまってすみません。
新たに発見されたバグがちょっと気になりますが、致命的な感じのバグでしょうか?(^^;



>グラフィックは Python のほうが高速ということでびっくりしています。
>ここまで速いとは思いませんでした。

>数値計算のループは C.Basic のほうが速いのですね。

以前試した感じでは、VRAMへの1ドットアクセスの比較だとC.BasicのMLコマンドが速い感じですが、
数値計算処理は、ガチガチに最適化を施したC.Basic≒Pythonという感じかなと思っています。


>INSIGHT アドインで何かしらコマンドの名前を検索に掛けて前後のメモリ領域を調べれば、隠し関数は簡単に見つけられそうですね。

さすがColon様!
コマンドを検索するというのは未だにやったことがなかったです。(^^;

ここまで来ると、そろそろ、Colon様もCG50を入手されませんか?(^^)





>モジュール内の関数や変数などの名前だけであれば、dir()という組み込み関数(これも隠されていますね)を使うとわかります。

>組み込み関数自体の一覧が欲しい場合には、

>import builtins
>for i in dir(builtins)

>とするとズラズラ出てきます。

Pythonは超初心者の私なので、これは全然知りませんでした(^^;

>他、高速化については、できるだけpythonのインタプリタが出力するCのコードに依存するように書くと良い、という傾向があるようです。実際のところは実機で確かめないとどうなるかわからないところではあると思います。

要はいろいろプログラムで試してみてというところなのですね。

お名前が空欄なので、どうお呼びしていいのか分からないのですが、
貴重なコメントをありがとうございます!(^^)

No title

すみません、先ほどの命令文は2行目を

for i in dir(builtins): print(i)

としてください。お目汚しすみません。

No title

横やりすいません。

モジュール内の関数や変数などの名前だけであれば、dir()という組み込み関数(これも隠されていますね)を使うとわかります。

組み込み関数自体の一覧が欲しい場合には、

import builtins
for i in dir(builtins)

とするとズラズラ出てきます。
(直接print()しないのは、文字列が長すぎてエラーが出てしまうためです)

他、高速化については、できるだけpythonのインタプリタが出力するCのコードに依存するように書くと良い、という傾向があるようです。実際のところは実機で確かめないとどうなるかわからないところではあると思います。

Re^4: Pythonパワー炸裂ですね!

管理人様、sentaro様、こんにちは!

>> コメントが埋まりそうなので、バグの報告は sentaro様のほうが落ち着いてからまとめて行います。

> ありゃ、そろそろですか?
> C.Basic for CG beta 用の Part 2 を作って、準備しておきます。

あ、すみません。(^^;

致命的なバグは見つけられないので、
新しいコメントが追加される中で、遡らないと確認できないよりは sentaro様に余裕が出来てからコメントした方がよいかな、というつもりでした。(^^;

Part 1 にはまだ書き込みできます。

> MicroPythonの標準組込モジュールからさらにそぎ落としたもので、この素材の良さがそのまま現れているかも知れないと勝手に思っています。まだ調べないと真相は分かりませんけど...

原型があるので幾分探索はしやすそうですね。

> カシオがオリジナルで作ったグラフィックスモジュールがようやく追加されたのが、fc-CG50 OS3.40で、あと getkey も是非追加して頂きたいと思うわけです。
> 問題は入力なんです。現在のところ入力は、標準入力の input() 関数しかありません。入力はSHELL画面を使うしかありません。そして、必ず入力待ちになります。これに折り合いを付けながら、スクリプトを書くしかありません。

Casio Basic でいうと入力が "?" しかないような感じですね。(^^;

> グラフィック出力用に draw_screen()関数が追加されたのですが、これを使ったユーザー関数 locate() を作って使っています。出力先はグラフィックですが、フォントサイズを大中小の3通りが選べ、色もrgb指定できるとても便利な関数になっています。
> あと、line() とか circle() なども作っていて、ユーザー関数を充実してゆけば、出力についてはグラフィック画面をうまく活用できそうです。

VRAM が 2 つあるとなると活用の幅が広がりますよね。(^^)


> これって、以前どこかで聞いたような気がするのですが、どこから入手できますか?

最新バージョンかは分かりませんが、(^^;
私が使っているバージョンはここからダウンロードできます。

http://www.casiopeia.net/forum/downloads.php?view=detail&df_id=153&sid=e0f6d58490c76caa6a263d236ce009da

多機能で色々と内部を見るなどできますが、電卓を壊す可能性もあるのでそこだけお気をつけください。


起動して [F1] を押すと Memory View に入ります。

起動したら [F1] (ADDR) で OS の先頭アドレスに移動し、[F4] (FIND) で目的の文字列やバイナリを検索します。
※ [F6] (SWAP) で文字列とバイナリの切り替えができます。

文字列検索の際は小文字の入力ができませんが、[SHIFT] + [9] (PASTE) は機能するので、
私はプログラムエディタからのコピペで乗りきっています。


他に内部調査によく使うのは "MCS view", "OpCodes", "SMEM" です。

Re^3: Pythonパワー炸裂ですね!

Colon様、sentaro様、

管理人のやすです。


> コメントが埋まりそうなので、バグの報告は sentaro様のほうが落ち着いてからまとめて行います。

ありゃ、そろそろですか?
C.Basic for CG beta 用の Part 2 を作って、準備しておきます。


> グラフィックは Python のほうが高速ということでびっくりしています。
> ここまで速いとは思いませんでした。

この驚きが、Casio Python を調べようというか、使いこなせないか?という気持ちに火を付けました。
MicroPythonの標準組込モジュールからさらにそぎ落としたもので、この素材の良さがそのまま現れているかも知れないと勝手に思っています。まだ調べないと真相は分かりませんけど...

カシオがオリジナルで作ったグラフィックスモジュールがようやく追加されたのが、fc-CG50 OS3.40で、あと getkey も是非追加して頂きたいと思うわけです。

グラフィック出力用に draw_screen()関数が追加されたのですが、これを使ったユーザー関数 locate() を作って使っています。出力先はグラフィックですが、フォントサイズを大中小の3通りが選べ、色もrgb指定できるとても便利な関数になっています。

※グラフィック画面にテキストを出力する関数
locate(column, row object, [, 'size'[, color]])
- column: 出力文字列左端の桁 - 0から始まる整数
- row: 出力文字列左端の行 - 0から始まる整数
- object: 整数、浮動小数点数、文字列
       計算式を1行以内に指定すればその結果を表示する
- 'size': 3択、's' / 'm' / 'l' - 's' small font, 'm': medium font, 'l': large font
  省略時は、'm' がデフォルト
- color: 3通りの指定が可能
  1) カラーコード指定、
    0 : 'white', 1: 'black', 2: 'blue', 3: 'red',
    4: 'magenta', 5: 'green', 6: 'cyan', 7: 'yellow'
  2) RGB指定、(r, g, b) の書式
  3) 色の名前で指定:
    'white', 'black', 'blue', 'red', 'magenta', 'green', 'cyan', 'yellow'
  省略時は、1 / (0,0,0) / 'black' がデフォルト


あと、line() とか circle() なども作っていて、ユーザー関数を充実してゆけば、出力についてはグラフィック画面をうまく活用できそうです。

問題は入力なんです。現在のところ入力は、標準入力の input() 関数しかありません。入力はSHELL画面を使うしかありません。そして、必ず入力待ちになります。これに折り合いを付けながら、スクリプトを書くしかありません。

グラフィックに"大"フォントでテキストを出力すると、SHELL画面のフォントと同じサイズになるので、SHELLとグラフィックスの画面切り替えが気づきにくい作りにすれば、面白いかも知れませんね。


> 計算自体の速度差なのかループの速度差なのか分からないので、
> 空のループのみの比較もあると良いと思います。> 管理人様

いずれ、やってみようと思います。
備わっている関数やメソッドを一通り把握してみる段階が済んだら、Pythonスクリプト最適化の一貫で、ループ速度テストや、整数のみでの高速化の調査をやりたいと思っています。


そうそう、

> INSIGHT アドインで何かしらコマンドの名前を検索に掛けて前後のメモリ領域を調べれば、隠し関数は簡単に見つけられそうですね。
>
> 暗号化されていると使えない方法ではありますが。(^^;

これって、以前どこかで聞いたような気がするのですが、どこから入手できますか?

Re^2: Pythonパワー炸裂ですね!

管理人様、sentaro様、こんにちは!

> ここのところ、電卓にじっくりと触れない状態がちょっと続いてます。
> ということで、C.Basic更新の方はもうしばらくお待ちくださいませ。m(_ _)m

了解しました。

コメントが埋まりそうなので、バグの報告は sentaro様のほうが落ち着いてからまとめて行います。

> C.Basicは言語的には旧世代なので速度面しか利点は無いですが、結構いい勝負してますね。(^^)

グラフィックは Python のほうが高速ということでびっくりしています。
ここまで速いとは思いませんでした。

数値計算のループは C.Basic のほうが速いのですね。

計算自体の速度差なのかループの速度差なのか分からないので、
空のループのみの比較もあると良いと思います。> 管理人様

> 最近思ったのですが、教育市場がメインなので、学校の先生にだけこっそりと詳細マニュアルや詳細リファレンスを配っているのではないか? 配っていないとしても、公開リファレンスを出さないことによって、先生の仕事を作ってあげているのではないかという疑惑です。

CASIO のサイトには教育関係者のみ入れるページもあるっぽいので、先生のみリファレンスをダウンロードできる、とかはあるかもですね。

> [SHIFT][4] で現れるカタログにある関数やメソッドの80%程度は使ってみました。隠しパラメータもいくつか見つけました!
> 残念ながら隠し関数は、まだです(^_^;

INSIGHT アドインで何かしらコマンドの名前を検索に掛けて前後のメモリ領域を調べれば、隠し関数は簡単に見つけられそうですね。

暗号化されていると使えない方法ではありますが。(^^;

Re: Pythonパワー炸裂ですね!

sentaro様、皆様、


管理人のやすです。


> ここのところ、電卓にじっくりと触れない状態がちょっと続いてます。
> ということで、C.Basic更新の方はもうしばらくお待ちくださいませ。m(_ _)m

ここのところ気温が高くなってきていますので、体調にはお気をつけくださいね。
マスクによる熱中症のリスクも高まっていますので、なかなか厄介です。
私は、広いところではマスクを外すようになりました。

C.Basic はとりあえずは安定バージョンなので、どうぞごゆっくりと...


> e-Gadget初のPython記事は、純正CasioBasicとPythonとC.Basicの比較がとても興味を引く記事ですね。(^^)
> C.Basicも比較対象に加えていただきましてありがとうございます!
> C.Basicは言語的には旧世代なので速度面しか利点は無いですが、結構いい勝負してますね。(^^)

> Python版シダの葉グラフィックスは劇的ですね。
> さらにPythonでもC.Basicでの高速化と同じ整数処理をすればさらに10倍くらい速くなりそうな気がします。(^^)

シダの葉グラフィックスの爆速っぷりを体験したことで、Casio Python を見る目がすっかり変わってしまいました。
これはスゴイと思いました。

Pythonの最適化は、チョット後回しです。

Casio Basicのようにはいきませんが、ピンポイントで Casio Pythonを適材適所で使えば、グラフ電卓の活用の幅が広がるのではないかと思ったことから、先ずは自分の勉強のため、そして勉強したことを定着させるため、Casio Pythonプログラミングの連載を始めることにしました。

標準組込モジュールについては、マニュアルでは殆ど何も説明がありません。いつもの事とは言え、困ったものです。
最近思ったのですが、教育市場がメインなので、学校の先生にだけこっそりと詳細マニュアルや詳細リファレンスを配っているのではないか? 配っていないとしても、公開リファレンスを出さないことによって、先生の仕事を作ってあげているのではないかという疑惑です。

[SHIFT][4] で現れるカタログにある関数やメソッドの80%程度は使ってみました。隠しパラメータもいくつか見つけました!
残念ながら隠し関数は、まだです(^_^;


> CasioPythonはグラフィックスが可能になって一気に実用度というか遊べる度が広がった感じですね。
> これであとは、Getkey相当の機能が加われば…以下略(^^;

はい、おっしゃる通りです。
Getkeyが無いと、欲求不満になります。

とりあえず、標準出力であるSHELL とグラフィック画面への出力をうまく使い分けるような、Casio Pythonならではのプログラミングスタイルが見つかりそうではあります。

Pythonパワー炸裂ですね!

管理人様、皆様、こんにちは!

ここのところ、電卓にじっくりと触れない状態がちょっと続いてます。
ということで、C.Basic更新の方はもうしばらくお待ちくださいませ。m(_ _)m


e-Gadget初のPython記事は、純正CasioBasicとPythonとC.Basicの比較がとても興味を引く記事ですね。(^^)
C.Basicも比較対象に加えていただきましてありがとうございます!
C.Basicは言語的には旧世代なので速度面しか利点は無いですが、結構いい勝負してますね。(^^)

Python版シダの葉グラフィックスは劇的ですね。
さらにPythonでもC.Basicでの高速化と同じ整数処理をすればさらに10倍くらい速くなりそうな気がします。(^^)

CasioPythonはグラフィックスが可能になって一気に実用度というか遊べる度が広がった感じですね。
これであとは、Getkey相当の機能が加われば…以下略(^^;
最新記事
検索フォーム
最新コメント
カテゴリ
C# (3)
Online Counter
現在の閲覧者数:
プロフィール

やす (Krtyski)

Author:やす (Krtyski)
since Oct 30, 2013


プログラム電卓は、プログラムを作って、使ってナンボ!

プログラム電卓を実際に使って気づいたこと、自作プログラム、電卓での Casio Basic, C.Basic そして Casio Python プログラミングについて書いています。

なお管理人はカシオ計算機の関係者ではありません。いつでもどこでもプログラミングができるプログラム電卓が好きな1ユーザーです。


写真: 「4駆で泥んこ遊び@オックスフォード郊外」

リンク
月別アーカイブ
Sitemap

全ての記事を表示する

ブロとも申請フォーム

この人とブロともになる

QRコード
QR