Casio Python Casioグラフ関数電卓の Python を使ってみる
- Casio Python のポテンシャル
初版:2020/06/07
更新:2020/06/29
更新:2020/11/03
更新:2021/03/25
修正:2023/04/21
▼ 次の記事 -
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-CG50、
fx-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 とは? [2023/04/21 修正]Casio Python は、カシオグラフ関数電卓にある
Pythonモードを指します。ある程度の関数があらかじめビルトインされていますが、追加ビルトインするモジュールはカシオから提供されていません。自分で作った関数をモジュールとして使うことはできます。
Casio Basic では自分で関数を作って使うことはできないので、その分
Casio Pythonは使い勝手が良いと言えます。
Pythonモードが公開された当初は、
mathモジュールとrandomモジュールが追加された状態でした。その後
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 Basic の
Getkey と
Locate に相当するものが
Casio Python にはありません。
※ Getkey ⇒ これは、どうにもなりません。カシオさんお願い...
※ Locate ⇒
locate() 関数を自分で作り使用中 ⇒
ユーザー関数 locate()ところで、
Python はオブジェクト指向言語の一種で、
object クラスのメンバーを呼び出す
object.method といった記述が必要なケースもありますが、クラスやメソッドをあまり意識しないで、手続き型言語のように使える側面もあると思います。特に
Casio Python ではほとんど手続き型言語のように使っても、とりあえずスクリプトが書けると思います。マニュアルの記述にもオブジェクトやメソッドという単語が殆ど出てこず、関数という表現が多用されています。
▋Casio Python の潜在能力 - fx-CG50 OS3.40以降
純正Casio Basic のプログラムから移植可能なものを 実際に
Casio Pythonで書き直してみました。すると、
Casio Basic に比べて実行速度が圧倒的に速い!以下で紹介しますが、その爆速っぷりは、チョット驚きです!
俄然
Casio Python に興味を持ち、詳細を調べたくなりました。
先ずは、その速さを紹介します。
▍純正Casio Basic と Casio Python の処理速度の比較 Casio Python でグラフィックス描画、関数計算、加算計算をさせて、純正
Casio Basic と比較してみます。
▶ グラフィック描画の比較 - フラクタルでシダの葉
これは、以下の記事で取り上げたフラクタル図形の描画プログラムです。
⇒ fx-CG50 でフラクタル - シダの葉そこで作成した
純正Casio Basic のプログラム SHIDACG.g3m を
Python に移植しました。
⇒ Casio Basic プログラムファイルと Python スクリプトファイルのダウンロードフラクタル図形描画時間の比較純正Casio Basic | 40 分 |
Casio Python | 24.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 スクリプトを以下に示します。できる限り忠実に再現していることが分かると思います。
▶ 関数計算の比較 - sin と cos の繰り返し計算
⇒ TSTFUNC2.g3m と tstfunc2.py のダウンロードN に1000 を入力した時 (1000回ループ) の関数計算の比較純正Casio Basic | 6.5 秒 |
Casio Python | 0.6 秒 |
アドイン版Casio Basic - C.Basic for CG Ver 1.45β | 0.38 秒 |
Pythonでの関数計算が10倍速いことが分かります。
▶ 加算計算の比較 - 加算とループ
⇒
TSTSIM2.g3m と tstsum2.py のダウンロードN に1000 を入力した時 (1000回ループ) の加算計算の比較純正Casio Basic | 2.2 秒 |
Casio Python | 0.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. はじめに:電卓で作る初めてのスクリプト応援クリックをお願いします。励みになるので...
ジュリアン様
> 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、
管理人さんこんにちは。
CG-50ーNに付属しているPythonの入門書はどれがいいですか?
それではよろしくお願いいたします。
管理人さんこんにちは。
わざわざありがとうございます。
ブラザー製の複合機なので機能が無いです。
メーカーからPDFファイルを印刷したクリップで止めている分厚いマニュアルが届きました。
連立方程式を解いて楽しんでいます。
それでは失礼いたします。
ジュリアン様
> PDFファイルのマニュアルを製本するアプリです。
> メーカーに注文しましたがどんな物が来るかわからないです。
製本アプリについては知りません。
自分で使うプリンタをパソコンにインストールする際は、専用のドライバやアプリがインストールされます。私がパソコンにプリンタをインストールしたら、そこに有った製本しやすい印刷をする機能を使いました。有ったから使ったわけで、アプリを持っていたわけでも、探して使ったわけでもありません。
このような便利な機能は、プリンタの種類やメーカーにより様々です。プリンタについてこれ以上詳しいことは判りません。マニュアルのPDFファイルを印刷するときに使いました。
印刷物の製本については、全く判りません。
管理人さんこんにちは。
PDFファイルのマニュアルを製本するアプリです。
メーカーに注文しましたがどんな物が来るかわからないです。
ジュリアン様
何のご質問なのか??
ひょっとして、製本用の印刷アプリのことでしょうか?
私はプリンタに付いている機能を使いました。大手メーカーのプリンタなら、このような機能は付いているのではないかと思います。
詳しくは判りませんが、もし付いていないのなら、普通に印刷して綴じるのでも良いかとは思います。
管理人さんこんにちは。
何というソフトですか?
ダウンロードしてインストールして作りたいのでよろしくお願いします。
ジュリアン様
初めて買ったグラフ関数電卓が、fx-9860GII でした。
これを買った時は、マニュアルのPDFを各チャプターごとに製本するフォーマットでプリントアウトし、13分冊(だったっけ)の紙のマニュアル本を作って、読み物として読んだり、辞書的に使ったり、結構ボロボロになるまで愛用しました。
fx-CG50については、大きな違いがなかったので、変化したっぽいところだけPDFのまま拾い読みしました。
知りたい項目にアクセスする速度は、紙のマニュアルの方が圧倒的に速いかも知れません。
もっとも、PDFにもしおり機能がありますが、そもそも端末の電源を入れて、PDFを起動して...は煩わしいですよね。
管理人さんこんにちは。
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桁以下となっていて、処理も速いので、電卓内蔵機能を確実に超えました。
管理人さんこんにちは。
カシオに問い合わせたら、「因数分解は出来ない」と回答がありました。
CG50では無理で、JP900では出来ます。
それでは失礼いたします。
管理人さんこんばんは。
CG-50で「因数分解」が出来なくて困っています。
どう計算式を立てたらよいか?考え込んでいます。
それでは失礼いたします。
管理人さんこんにちは
今日届きました。
マニュアルが無くてPDFファイルでしかないです。
紙のが欲しいです。
ゲームをインストールして遊んでいます。
勉強していきますのでよろしくお願いします。
ジュリアン様
関数グラフの出力につては、純正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 を使っては如何でしょうか?
管理人さんこんにちは。
まだ届いていないですが、勉強して「バイオリズム」のサインカーブを表示するプログラムを作りたいです。
PythonかBasicで作りたいです。
それでは失礼します。
通りすがりの方へ、
お名前が無いので、通りすがりの方とさせて頂きます。
貴重な情報を頂き、大変ありがとうございます。
dir() が隠れていたのですね!
お陰で隠しオブジェクトが結構あることが分かりました。
casioplotに clear_screen() があるのも確認できました。
隠しコマンドを試してみるのも楽しそうえす。
管理人様、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のコードに依存するように書くと良い、という傾向があるようです。実際のところは実機で確かめないとどうなるかわからないところではあると思います。
要はいろいろプログラムで試してみてというところなのですね。
お名前が空欄なので、どうお呼びしていいのか分からないのですが、
貴重なコメントをありがとうございます!(^^)
すみません、先ほどの命令文は2行目を
for i in dir(builtins): print(i)
としてください。お目汚しすみません。
横やりすいません。
モジュール内の関数や変数などの名前だけであれば、dir()という組み込み関数(これも隠されていますね)を使うとわかります。
組み込み関数自体の一覧が欲しい場合には、
import builtins
for i in dir(builtins)
とするとズラズラ出てきます。
(直接print()しないのは、文字列が長すぎてエラーが出てしまうためです)
他、高速化については、できるだけpythonのインタプリタが出力するCのコードに依存するように書くと良い、という傾向があるようです。実際のところは実機で確かめないとどうなるかわからないところではあると思います。
管理人様、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" です。
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 アドインで何かしらコマンドの名前を検索に掛けて前後のメモリ領域を調べれば、隠し関数は簡単に見つけられそうですね。
>
> 暗号化されていると使えない方法ではありますが。(^^;
これって、以前どこかで聞いたような気がするのですが、どこから入手できますか?
管理人様、sentaro様、こんにちは!
> ここのところ、電卓にじっくりと触れない状態がちょっと続いてます。
> ということで、C.Basic更新の方はもうしばらくお待ちくださいませ。m(_ _)m
了解しました。
コメントが埋まりそうなので、バグの報告は sentaro様のほうが落ち着いてからまとめて行います。
> C.Basicは言語的には旧世代なので速度面しか利点は無いですが、結構いい勝負してますね。(^^)
グラフィックは Python のほうが高速ということでびっくりしています。
ここまで速いとは思いませんでした。
数値計算のループは C.Basic のほうが速いのですね。
計算自体の速度差なのかループの速度差なのか分からないので、
空のループのみの比較もあると良いと思います。> 管理人様
> 最近思ったのですが、教育市場がメインなので、学校の先生にだけこっそりと詳細マニュアルや詳細リファレンスを配っているのではないか? 配っていないとしても、公開リファレンスを出さないことによって、先生の仕事を作ってあげているのではないかという疑惑です。
CASIO のサイトには教育関係者のみ入れるページもあるっぽいので、先生のみリファレンスをダウンロードできる、とかはあるかもですね。
> [SHIFT][4] で現れるカタログにある関数やメソッドの80%程度は使ってみました。隠しパラメータもいくつか見つけました!
> 残念ながら隠し関数は、まだです(^_^;
INSIGHT アドインで何かしらコマンドの名前を検索に掛けて前後のメモリ領域を調べれば、隠し関数は簡単に見つけられそうですね。
暗号化されていると使えない方法ではありますが。(^^;
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ならではのプログラミングスタイルが見つかりそうではあります。
管理人様、皆様、こんにちは!
ここのところ、電卓にじっくりと触れない状態がちょっと続いてます。
ということで、C.Basic更新の方はもうしばらくお待ちくださいませ。m(_ _)m
e-Gadget初のPython記事は、純正CasioBasicとPythonとC.Basicの比較がとても興味を引く記事ですね。(^^)
C.Basicも比較対象に加えていただきましてありがとうございます!
C.Basicは言語的には旧世代なので速度面しか利点は無いですが、結構いい勝負してますね。(^^)
Python版シダの葉グラフィックスは劇的ですね。
さらにPythonでもC.Basicでの高速化と同じ整数処理をすればさらに10倍くらい速くなりそうな気がします。(^^)
CasioPythonはグラフィックスが可能になって一気に実用度というか遊べる度が広がった感じですね。
これであとは、Getkey相当の機能が加われば…以下略(^^;