Casio Python - はじめに

Python Casio Python
 Casioグラフ関数電卓の Python を使ってみる
     - はじめに:電卓で作る初めてのスクリプト 
目次


初版:2020/06/13
追記修正:2020/10/20
修正:2023/04/21

前の記事 - 0. Casio Python のポテンシャル 次の記事 - 2. Casio Python とは?


対応機種:fx-CG50, fx-9750GIII, fx-9860GIII


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

先ずは、カシオのプログラム電卓を使って実際に Pythonスクリプトを作ってみます。


1.1 Casio Python での初めてのスクリプト
半ばお約束のようですが、画面に Hello Casio Python と表示させるスクリプトを作ります。

Casio Python では(一般の Python でも)、

 print('Hello Casio Python')

と1行だけで文字列の出力ができます。

ところで、カシオ電卓搭載の Casio Basic では、
 "Hello Casio Basic"
あるいは
 Locate 1,1,"Hello Casio Basic"
と、1行書くだけで、文字列を表示できます。アドイン版超高速Casio Basicである C.Basic も同様です。


さて、他の多くの言語では、標準出力(コンソール)に文字列を出力するコードは、シンプルに1行で書けないのです。
例えば、C言語でコードを書いてみます。

#include <stdio.h>
int main(void) {
 printf("Hello C");
 return 0;
}


C# で書くと、

using system;
namespace Hello
{
 class program
 {
  static void Main()
  {
   System.Console.WriteLine("Hello C#");
  }
 }
}

まぁ、C# は、実際はに全て自分でコーデイングしないで、殆どが開発環境で自動作成されるので、これを引き合いに出すと C# に申し訳ないとは思いますが、いずれにせよオブジェクト構造を意識して、様々なメソッドや関数を繋いでコーディングする必要があります。

このように、Python は1行でシンプルに記述できます。Python のシンプルさを強調したいので、驚かすために意図的に上の例を出しました。眺めて「わっ、大変そうだ」と感じて頂くだけで結構です(^_^;

Casio Python は、本来の Python (CPython) のサブセット版で、提供されている機能が大幅に制限されています。やりたいことができないもどかしさを感じますが、逆に考えると Casio Python は覚えることが少ないので、覚えやすいと言えます。

以下では、文字列を出力するシンプルな1行のスクリプトを書くため、電卓の操作方法を説明します。初めて電卓でスクリプトを書くことを前提にして、とても細かく書いてゆきます。


1.1.1 fx-CG50 の準備
このグラフ関数電卓が必要です。
ちなみに各モデルの価格動向を何年もモニターしてきていますので、参考になさってください。
 ⇒ Casio プログラム電卓の価格動向
1~2万円程度の買い物になります。

あるいは、モノクロ液晶のグラフ関数電卓 fx-975GIIIfx-9860GIII でも Casio Python が使えますが、これらは日本国内では正規品として販売されておらず、Amazon USA / Amazon France や eBay / セカイモンなどで海外から取り寄せる必要があります。


1.1.2 Casio Pythonの起動
電源を入れ、[MENU]キーを押してメニュー画面を表示して、Python を選んで [EXE]キーを押します。
menu_python
   ↑
 これを選択


Casio Python の最初の画面
このように スクリプトファイル専用フォルダの作成を推奨します。
Python_folder 

Casio Pyhton を開くと、最初にルートが表示されます。そのままスクリプトファイルを保存すると、保存先はルートになります。ところが、ルートにはアドインプログラムのファイル(拡張子が g3a のファイル)もあります。

もし C.Basic を使っていると、プログラムファイルの保存先は、デフォルトでルートになります。管理人は C.Basic プログラムファイル専用のフォルダをルートに作って、そこに保存するように設定しています。

PCとリンクして、電卓内のファイルをPC上で整理するとき、それぞれのファイルが専用フォルダに保存されていると、間違いが起きません。ルートにあるのはアドインファイルのみというのが、理想的だと思います。

これから色々と多くのスクリプトを書いてゆくので、スクリプトファイル(pyファイル)を保存する専用フォルダを作るのをお勧めします。管理人は @Python フォルダを作っています。

さて、電卓内に新たにフォルダを作るのは、電卓だけではできず、PCを利用しなければなりません。
まず、電卓をPCとリンクします。すると、エクスプローラ(ファイルマネージャー)では電卓が新たなドライブとして認識されます。電卓のドライブを開いて現れるのが電卓のルートで、そのルートに新たなフォルダを作ります。

スクリプト専用フォルダを作ったら、Casio Python のファイルリスト画面で専用フォルダにカーソルを合わせ、[EXE]キーを押すと、スクリプトファイルの一覧が現れます。初めての場合は、フォルダの中は空です。

in_the_python_folder 

このように多くのファイルができてくると、カーソルキーでファイルを探すのが面倒になります。そこでAPHAモードにしてから、探したいファイル名の頭のアルファベットを1文字押すと、それから始まるファイルにジャンプするので便利です。


1.1.3 スクリプトファイルの作成
ここで、[F3] (NEW) を押して、新しく hello というファイル名を入力します。
create_hello_file2  

そして[EXE]キーを押せば、スクリプト編集画面が表示されます。
blank_script_editor2  


1.1.4 スクリプトの作成
ここに、以下の1行を入力します。

print('Hello Casio Python')

Casio Python では、アルファベットや数字記号を1つづつ入力します。
画面下にファンクションメニューがあり、これが役立ちます。[F6] (▷) を押すことで2組のファンクションメニューが切り替えられます。なかでも SYMBOL と OPERT が役立ちます。

さて、1文字づつ入力するよりも楽な入力補助機能があります。
何も入力が無い状態で、[SHIFT][4] (CATALOG) を押すとカタログ機能が現れます。
catagog_1 

print() を探すために、[4] (P) を押すと 右上の [   ]に p と表示され、p で始まるキーワードにジャンプするので、print() にカーソルを合わせます。
catalog_2 

ここで、[F1] (INPUT) を押せば、print() が入力できます。

print_1_2  

今の目的は、print('Hello Casio Python') と入力することでした。あとは、( ) の中に
'Hello Casio Python' と追記すれば完成です。

ファンクションメニューで [F3] (SUMBOL) を押し、さらに [F6] (▷) を押すと、ファンクションメニュー[F2] ( ' ) が見つかりますので、これを2回押せば ' ' と入力できます。
print_2_2  

ファンクションメニューの SYMBOL は、使ってみると便利です。
アルファベットを入力するときは、[SHIFT][ALPHA] を押して ALPHAモードにします。その時 ALPHAモードを解除しないと入力できない記号が、SYMBOL で入力できるようになっています。

あとは、'' の間に Hello Casio Python と入力します。アルファベットの入力は慣れるしかありません。

ALPHAモード
 小文字モード

  ↓
hello_1_2 hello_2_2 

ALPHAモードになると、画面左上に赤い小さなアイコンで ALPHAモードであることを示してくれます。さらに 小文字の a が表示されていれば小文字モード、大文字の A が表示されていれば大文字モードだと分かります。

Casio Python ではデフォルトで小文字モードになります。[F5] (A⇔a) を押せば 大文字と小文字の切り替えができます。


1.1.5 スクリプトの実行
これで、スクリプトの入力が終わったので、これを実行してみます。
[F2] (RUN) を押せば、スクリプトが実行されます。

スクリプトを新たに書いたり、変更した後に [F2] (RUN) で実行しようとすると、ファイルを保存するかどうかを尋ねるポップアップが現れます。
save_popup2  

ここで、[F1] を押して保存します。すると実行画面が現れます。
hello_run2  

なんだか、ゴチャゴチャした画面になっています。
今回の hello.py を実行した結果は、4行目にあります。

1行目と2行目では、Casio PythonMicroPython ver 1.9.4 をベースに作られていることを示しています。オリジナルの著作権表示のようなものでしょう。

この画面は、シェルと呼ばれる Python の標準的な出力画面です。Windows のコマンドプロンプト画面のようなもので、コマンドを入力すれば結果を出力する対話型画面になっています。

>>> がプロンプトで、ここにコマンドを入力すると、結果が表示される仕様になっています。

矢印キーで3行目にカーソルを持って行くと、
>>>from hello import *
と出力されていることがわかります。
これは、"hello.py をインポートする" という意味で、その下の4行目に実行結果である
Hello Casio Python
が出力されていることがわかります。

[2020/06/15 追記修正]
では、シェルから hello.py を起動してみましょう。
@python フォルダにカーソルを合わせて[EXE}キーを押して、hello.py が一覧で表示されるようにします。
そして、[F4] (SHELL) を押してシェルを表示します。

ここで、プロンプト >>> のあとに
from hello import *
と入力してみます。
ファンクションメニューが使えないので [F5] (A⇔a) と [F6] (CHAR) のみを使って入力します(できます))。

そして、[EXE} を押すと 
Hello Casio Python
と出力されるので、シェルから hello.py を実行できることが分かりました。

起動したスクリプトのあるフォルダに移動してからシェルを起動すると、そのフォルダにあるスクリプトが実行できます。
=== [2020/06/15 追記修正 ここまで ===

文字列出力のスクリプトが正しく動作したことが確認できました。hello.py の完成です!


1.2 シェル画面
シェルで、プロンプトに続いて、
>>>print('Hello Casio Python')
と直接入力し、
prompt_hello_1_2 prompt_hello_2_2 

[F1] (RUN) を押すと、Hello Casio Python と出力されます。
prompt_hello_output2   

但し、シェルで入力するのは、ファンクションキーが無いのでちょっと面倒です。[SHIFT][4] (CATALOG) の入力補助機能は使えます。

このようにシェルは、1行入力し、結果を出力する対話機能を提供していることが分かります。

ところで、スクリプト一覧の画面(スクリプト リスト画面)のファンクションキーに [F4] (SHELL) があります。
in_the_python_folder 

[F4] (SHELL) を押すと、先ほどのシェル画面に切り替わります。

何も知らない状態で初めて使う時は、Casio Python の操作は、結構面倒に感じるかも知れません。そこで今回は、できる限り詳しく解説してみました。何か分からなければ、もう一度読めば思い出せると思います。

操作に慣れてくれば、Casio Python の操作自体は簡単に感じるようになると思います。

一方、スクリプトを書く時の英数記号の入力も慣れるまでは面島に感じるでしょう。PCなどのキーボードを初めて使った時も、おそらく忘れているとは思いますが、大変だったはずです。Casio Python のスクリプトを毎日少しづつでも、繰り返し入力すれば、慣れると思います。管理人自身がそうやって慣れました。


1.3 スクリプト作成と編集の2つの方法
Casio Python のスクリプトは、英数記号のアスキー文字だけで構成される仕様になってます。スクリプトが実行されるとき、アスキー文字の文字列を読み取り、字句解釈が行われCPUが理解できる内容に変換しています。これが一般的に Python の特徴です。なので同じスクリプトが PCでもMACでもLinuxマシンでも、Rasberry Pi のようなボードコンピュータでも、Python を組み込んだ機器でも動作するわけで、その流れの中で 電卓でも動作するわけです。

ちなみにCasio Basic (C.Basic 含む) では、コマンドや構文を入力するにはメニューから選んで入力しなければならず、アルファベットを1つづつ入力するとコマンドや構文として認識されません。これは Casio Python との大きな違いです。

Note: Python スクリプトファイルの正体
Casio Basic ではプログラムコードに直接Operation Codeを書き込む仕様になっているので、メニューから選んで Operation Codeを書き込む必要があります。一方、Casio Python は実行時にOperation Codeに変換するので、スクリプトファイルにはアスキーコード(テキストファイルで表示可能な英数記号) のみを書き込む仕様になっています。

Casio Python のスクリプト作成で、入力を楽にする方法が2つあります。1つはカタログ機能の利用で、もう1つはテキストエディタを利用することです。PCでテキストエディタを使う時は、キーボード入力が楽である上に、カット&ペーストが使えるので便利に感じることでしょう。

カタログ機能による入力補助
スクリプト編集画面で [SHIFT][4] (CATAGOL) と押すと、Casio Python で使うワードの一覧がアルファベット順に現れます。[F6] (CAT) を押すとカテゴリ一覧になるので、そこで入力したワードのカテゴリを選ぶと検索が楽になります。検索したいワードの頭から順に入力してゆけば、絞り込みが行われるので便利です。目的のワードにカーソルを移動してから [F1] (INPUT) を押せば、スクリプト編集画面にそのワードが入力されます。

PCでスクリプトファイルを編集する
Casio Pythonスクリプトファイルはアスキー文字しか含まないので、テキストファイルとしてPCで編集できます。Windows標準の "メモ帳" はテキストエディタですが、拡張子が txt でないとダメです。スクリプトファイルの拡張子 py を一旦 txt に変更し、スクリプト編集後保存し、最後に拡張子を txt から py に戻す手間が必要になります。拡張子が py のままで編集・保存ができるテキストエディタは豊富にあるので、そのようなものがお勧めです。

とにかくPCで編集できるのは大変便利です。管理人は ある程度まとまった Casio Python のスクリプトを新たに作るとき、PCで書き始めることが多いです。

そして、Microsoft が無償提供している Visual Studio Code をとりあえずお勧めします。Pythonで使う様々なキーワードを、種類ごとに色分けしてくれる機能を簡単に設定できるのが良いところです。他のテキストエディタでも同様の機能があれば、それが良いと思います。

余計な機能がたくさんありすぎて、Casio Pythonスクリプトの編集のためだけに使うには下記の2つの拡張機能をインストールするだけで十分です。
 Python - IntelliSense (Pylance), Linting, Debugging (multi-thread, remopte),
  Jupyter Notebooks, code formating, refactoring, uinit tests and more.
 Japanese Languare Pack for Visual Studio Code
特に InteliSense 機能は、スクリプトの色分け、入力補助、エラー表示など、便利なものが多いです。

Casio Python 独自の casioplot モジュールがあり、比較的よく使うと思います。この独自モジュールに含まれる関数は一般のPython (CPython や uPython) では使わないので Visual Studio Code の拡張機能は、casioplot モジュールをサポートしていません。そうはいっても、casioplot 以外には InteliSense 機能はとても助かります。

そもそも Visual Studio Code から casioplot モジュールを使ったスクリプトを実行することはできず、上記2つの機能以外に導入しても意味がありません。

少々オーバースペックかも知れませんが、Visual Studio でのプログラミング経験がある方には良い選択でしょう。

Note: Visual Studio Code について
  • Visual Studio Code のダウンロードはここからどうぞ。ダウンロードのページにある "Download for Windows / Stable Build" のアイコンやその右にある矢印ボタンをクリックすればダウンロードできます。引き続いてインストールできます。
  • 当然日本語化できます。詳しい方法はこちらからどうぞ。
  • 最初に起動したとき、あるいは Help - ようこそ を選ぶと ”ようこそ" 画面が現れます。ここで、カスタマイズ - ツールと言語 から Python を選んでインストールしておくと良いと思います。理由はいくつかありますが、少なくとも Python のキーワードを色分けして表示する機能は便利です。色分けは Casio Python の編集画面とは異なりますけど...また、編集後に保存する際、スクリプトファイルで推奨されるテキストファイル形式にしてくれるのも安心です。
  • 管理人は、カスタマイズ - 配色とテーマ から、配色テーマを選択して使っています (下記参照)。
  • Visual Studio Code を使っていると "このファイルの種類は、'Python' 拡張機能をお勧めします" というポップアップが頻繁に現れますが、Casio Python スクリプトに編集には必要ないと思うので毎回 × を押してポップアップを消しています。
  • Casio Pythonスクリプトの編集のためだけに使うのなら、上記2つの拡張機能だけで十分。いちいちポップアップが現れてうるさいでしょうが、それ以上は敢えて何も導入しないのが良いと思います。
  • Visual Studio Code には InteliSense 機能があり、Pythonスクリプトを書いている時に色々とアドバイスが貰えるので、これは便利だと思っています。
  • Visual Studio Code に関する詳しい説明は ここ が分かりやすいと個人的に思います。
  • 管理人は Visual Studio Code 推しですが、皆様が良いと思うテキストエディタを使えば良いでしょう。
VS_Code_example 
管理人が使っている Visual Studio Code の配色テーマ:Solarized Light 



目 次

前の記事 - 0. Casio Python のポテンシャル

次の記事 - 2. Casio Python とは?





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


 


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

リンク集 | ブログ内マップ

関連記事

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

Casio Python のポテンシャル

Python 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-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 とは? [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 BasicGetkeyLocate に相当するものが 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 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プログラム関数電卓

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

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

プログラミング経験者のための Casio Python

Python Casio Python
 プログラミング経験者のための Casio Python
     目次


初版:2020/06/13
更新:2023/03/19
更新:2023/04/21

プログラミング経験者のための Casio Python


はじめに

本連載は、プログラミング経験があるが Python はあまり知らなくて、さらにCasio プログラム電卓の Python モードでプログラムを作りたい人を想定したものです。ここまでマイナーでニッチな世界は無いでしょう。

管理人自身、電卓の Pythonモードでのコーディングが Python との初めての出会いで、電卓の Python モードの学習の過程を記事にしています。マイナーでニッチな体験を皆様と共有しようというのが、この連載です。ちなみに Pythonモードで使う言語を Casio Python と呼ぶことにしています。

管理人は C# を使ってプログラムを作ったことがあるので、その経験を元にネットで Python について検索し、自分の手で Casio Python でコーディングしながら詳しく仕様を調べるのは、さほど難しくなくて、むしろ楽しい作業です。このように調べて学習しながら 特定のプログラムを完成させる過程を記事にします。

学習しながら記事を書いてるので、読者の方々から様々なアドバイスを頂きながら、修正や書き直しを行っています。アドバイスは大歓迎なので、よろしくお願い致します。

Casio Python は 通常の Python (CPython) よりも大幅に機能が制限されています。必要だけど不足している機能もあります。それなりのプログラムとして仕上げるにはチョットした工夫が必要です。Casio Python の問題点や 工夫のポイントも紹介します。

当ブログでは、これまで Casio Basic をメインテーマにしてきたので、以前作った Casio Basicプログラム を Casio Python に移植する過程を紹介する記事から始めます。その際、汎用的に使える関数を作成してユーザーモジュールを作ってゆきます。さらに、面白そうなプログラムを最初から Casio Python で作る過程を紹介する記事も追加してゆきます。

色々なプログラムを作る際に、有ったら便利だと思う汎用的な関数を複数作成して、それらを効率的に使うためのユーザーモジュール u.py も紹介します。

e-Gadgetオリジナルユーザーモジュール





0. Casio Python のポテンシャル
Casio Python のグラフィックス描画は Casio Basic より100倍以上速い


1.
はじめに: 電卓で作る初めてのスクリプト
Pythonモード (Casio Python) でのスクリプト作成/編集の概要
  1.1 Casio Python での初めてのスクリプト
   1.1.1 fx-CG50 の準備
   1.1.2 Casio Python の起動
   1.1.3 スクリプトファイルの作成
   1.1.4 スクリプトの作成
   1.1.5 スクリプトの実行
  1.2 シェル画面
  1.3 スクリプト作成と編集の2つの方法
    Note: Python スクリプトファイルの正体
    Note: VIsual Studio Code について


2. Casio Python とは?:MicroPython と CPython
Casio Python は、組み込みPython - microPython をCASIOがカスタマイズしたもの
  2.1 Casio Python の素性
   2.1.1 MicroPython 1.9.4
    Note: Casio Python へのライセンス
   2.1.2 CPython 3.5.4
  2.2 Casio Python に組み込まれているオプジェクト名の一覧
    Note: CGモデルとFXモデルでの出力の違い
  2.3 Casio Python の学習方法


3. Casio Python の入出力:プログラムのデザイン
Casio Python (OS3.4/3.5) は入出力機能がとても限定的
  3.1 入力 - input()
    Note: Casio Python の制限
  3.2 出力 - print() とグラフィックス出力関数
    Note: シェル画面とグラフィックス画面の切替
  3.3 Casio Pyhton で作るプログラム


4. Casio Python への移植:モンテカルロ法 (1)
Casio Python でスクリプトを書くための最低限の知識
    Note: モンテカルロ法による円周率の計算方法
  4.1 コメントの書き方
    Python公式: Comments
    Note: PEP 8
    Python公式: Docummentation Strings (Docstrings)
  4.2 モジュールの呼び出し - import
  4.3 メニュー機能の作成
    Reference: ⇒ input( )
    Note: Pythonでの文字列 - ' ' と " "
    Note: int( )
    Note: if 文
    Note: Python のデータ型
    Note: str( )
  4.4 circle() 関数の作成
    Note: continue
    Reference: ⇒ range( )
  4.5 グラフィックス出力
    Note: Casio Python 組み込み関数を調べる
   4.5.1 自作関数 circle() で円を描画
    Note: 文の句切り文字 - ;
   4.5.2 draw_string() 関数で文字列を出力
    Note: while 文
   4.5.3 while 文により繰り返し
   4.5.4 random() 関数により正方形内の座標(x, y)を取得
   4.5.5 set_pixel() 関数で (x, y) に点を描画
   4.5.6 点の座標から円周率を計算
    Note: モンテカルロ法による円周率の計算方法 (再掲)
    Note: 累乗演算子 - **
    Note: 累算代入演算 (+=, -=, *=, /=, %=)
    Note: 四捨五入 - round( )
   4.5.7 draw_string() 関数で回数と円周率を表示
   4.5.8 draw_string() 関数でシミュレーション終了の表示


5. 関数の作成と活用:grp_color() 関数の作成
Casio Python での関数の作り方と使い方の基本
  5.1 関数の引数について
  5.2 関数内の変数の有効範囲 - 変数のスコープ
  5.3 circle() 関数の拡張
  5.4 色指定関数を追加
   5.4.1 RGBによる色指定
   5.4.2 タプル型
   5.4.3 色指定方法の拡張
   5.4.4 グラフィック画面での色指定関数 grp_color() 関数の作成
    Note: type( )
    Note: リストの定義
    Note: タプルの定義
    Note: Python の比較演算子
    Note: 帰属検査の in
  5.5 circle() 関数拡張の書き換え
  5.6 モンテカルロ法(2) - monteca2.py


6. グラフィックス出力関数の追加:line() とユーザーモジュールの作成
ユーザーモジュールの作り方と使い方
  6.1 line() 関数の作成
  6.2 グラフィックスユーザーモジュールの作成
  6.3 line() 関数の動作確認 - ckLine.py
  6.4 line() 関数の動作確認 - ckLine2.py
    Note: 除算の余りを求める - %


7. テキスト出力関数の追加:locate() をユーザーモジュールに追加
Casio Python では必須の locate( )関数の作成と使い方を紹介 - 辞書型シーケンスの活用
  7.1 locate() 関数の作成
   7.1.1 フォントピッチ dx, dy の設定
   7.1.2 column から x を、row から y を算出
   7.1.3 フォントサイズ指定の処理
   7.1.4 locate() の完成 
  7.2 locate() をユーザーモジュールに追加
  7.3 locate() の動作確認 - ckLocate.py
  7.4 モンカルロ法(3) - monteca3.py


8. シェル画面入力の工夫:高速素因数分解(1)
Casio Basic から Casio Python へロジックを変えずに移植
  8.1 高速素因数分解プログラム - FactorG のざっくりした分析
  8.2 入力と入力値のチェック
    エラーを検知し制御を取り戻す - Try / except
  8.3 変数の初期化
  8.4 素数が素因数かどうかをチェック
    Note: Python の単文と複文
  8.5 "エラストテレスの篩い" で素因数の探索
  8.6 ckpwr() 関数の作成
  8.7 disp() 関数の作成 


9. Python らしい反復処理:高速素因数分解(2)
オプジェクト指向言語 Python ならではの for の使い方
  9.1 frac() 関数をユーザーモジュール (u.py) に追加
  9.2 不要な処理を削除
  9.3 disp() 関数のスリム化
    Note: range( ) の書式
  9.4 素数が素因数かどうかをチェックする部分のスリム化
  9.5 素因数を探索する残りの部分のスリム化
  9.6 スリム化したスクリプト - FactorG2.py
    Note: Casio Python スクリプトファイルのサイズ制限


10. 大きな数の計算:高速素因数分解(3)
Casio Python では15桁の精度が得られることを利用する事例
  10.1 変更箇所の洗い出し
  10.2 増加する素因数に合わせて表示桁数を拡張する - disp() の変更
  10.3 入力桁数の制限を拡張し、それに合わせてエラー表示を変更する
  10.4 素因数探索回数の表示を追加する
  10.5 素因数が10桁を超えるときの表示の変更 - disp() の変更


11. 関数呼出オーバーヘッド:高速素因数分解(4)
Casio Python は関数呼出が比較的速い - 関数を無くしてさらに高速化
  11.1 関数呼出あり (ver 3) となし (ver 4) の実行速度の違い
  11.2 Casio Python の関数呼出オーバーヘッド


12. 要素数の多いリスト:高速素因数分解(5)
Casio Python で巨大リストを処理するスクリプト実行時に派生するスタックサイズエラー
⇒ CPythonではジェネレータで対処。本事例では処理速度優先のためジェネレータ使わず...
  12.1 増分リストを拡張する
  12.2 要素数480個の探索数増分リスト
  12.3 探索数を拡大して15桁対応高速素因数分解のスクリプト
  12.4 探索数拡大による高速化
  12.5 増分リストをさらに拡張する


13. 10進数除算の出力と精度:高速素因数分解(7)
Casio Python 内部演算精度15桁が原因で、割り切れる整数の除算が浮動小数点になる
  13.1 Casio Python での除算結果のデータ型
  13.2 Casio Python での関数計算結果のデータ型
  13.3 Casio Python での除算計算の精度
    Note: Windows版 Python のインストール
    Note: 浮動小数点演算 - その問題と制限 (Python 公式サイト) 参照
  13.4 0 および負の整数入力の処理
  13.5 入力ルーチンの修正
   13.5.1 入力委が小数点以下 0 の小数の場合に処理を追加 
   13.5.2 入力値が負の数値の場合の処理
   13.5.3 入力が 0 の時の処理
  13.6 完成した FactorG7.py の動作確認


14. CGモデルとFXモデルのPythonモードの違い
CGモデルとFXモデルを判定する関数の作成と使い方
  14.1 CGモデルからFXモデルへのスクリプトの移植
   14.1.1 CGモデルからFXモデルへのスクリプト移植のポイント
   14.1.2 CGモデルとFXモデルの判定方法
  14.2 FXモデルのPythonモードの制限 - バッファサイズ
   14.2.1 編集できるスクリプトファイルの行数制限
   14.2.2 print() 出力のスタック・バッファサイズ
   14.2.3 Shell 画面出力のスタック・バッファサイズ
  14.3 Casio Python自体の機能の違い
   14.3.1 CGモデル OS3.40 と OS3.50 の違い
   14.3.2 CGモデル OS3.50 と FXモデル OS3.40 の違い


15. RGB値による色設定
fx-CG50 のカラー液晶は16bitカラーであることを理解した上で、RGB値で色指定
⇒ ピクセルの色指定と色読取りの実験を CGモデルとFXモデルで実施
  15.1 RGB値の色を確認するプログラム
  15.2 fx-CG50 の高精細カラー液晶 - 実は 16bit カラー
  15.3 モノクロ液晶モデルでのRGB値による色設定
  15.4 RGB値でのピクセル色設定と読取りの実験 - CGモデルとFXモデル


16. circle() 関数のFXモデルへの拡張
画面の画素数が異なる CGモデルとFXモデルの両方に対応したスクリプト
  16.1 CGモデルとFXモデルの場合分け
  16.2 circle() 関数を使ってみる



17. shell 画面とグラフィック画面の活用:コラッツ問題
出力先としてグラフィックス画面とシェル画面の両方を活用する
  17.1 コラッツ問題 (Collatz Problem) とは?
  17.2 コラッツ数列の計算
  17.3 出力の工夫ポイント
   17.3.1 input() での入力
   17.3.2 フォントサイズを変えて添え字の描画
   17.3.3 リアルタイムに変わる数値の表示
   17.3.4 グラフの描画
   17.3.5 数列の最大値を求めて表示
   17.3.6 shell 画面でのスクロール出力
  17.4 コラッツ問題で遊んでみる

xx. Casio Pyhton - turtle / matplotl モジュール 
Casio Pyhton用 turtle / matplot モジュールの入手
[準備中]





e-Gadgetで作成したユーザーモジュール
最新バージョン: ver 1.5 <ダウンロード>
サポートモデル / OS:
  ・CGモデル - fx-CG50 / OS3.40以降
  ・FXモデル - fx-9750GIII
/ OS3.40以降
  ・FXモデル - fx-9860GIII
/ OS3.40以降

ファイル名: u.py / ufx.py
  全サポートモデルに対応 - CGモデル/FXモデルの自動判定機能あり
  ・ufx.py は FXモデルで開くために、u.py から一部コメントを削除して150行以下にしたもの
実装オブジェクト
  isCG(): CGモデルかFXモデルかを判定
  grp_color(): グラフィック描画関数の様々な色設定をタプル型に変換
  circle(): グラフィックス画面に円を描画
  line(): グラフィック画面に線分を描画
  locate(): グラフィック画面にテキストを出力
  frac(): 浮動小数点型数値の小数部を取得




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


 


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

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

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

Casio Python - ユーザー関数 locate()

Python Casio Python
 Casioグラフ関数電卓の Python を使ってみる
     - リファレンス 
目次
locate()

ユーザーモジュール u.py に含まれる関数 u.py ver 1.5 ダウンロード

初版:2020/12/09
修正:2023/04/21

[対応モデル] - fx-CG50 OS3.20 以降、fx-9750GIII / fx-9860GIII OS3.21 以降

文字(列)  や 数値を、桁と行で位置を指定してグラフィック画面に描画します。
併せて、描画の色とフォントサイズを指定することもできます。
さらに、画面に転送するか、VRAMのみに転送するかの選択も可能です。

書 式locate(column, row, obj, color=1, size='m', show=1)

引 数
- 第1引数 - column: 描画する文字(列) / 数値 の座標 (桁, 行) の 桁座標、0 以上の整数
- 第2引数 - row: 描画する文字(列) / 数値の座標 (桁, 行) の 行座標、0 以上の整数
- 第3引数 - obj: 描画する文字(列) / 数値
- 第4引数 - color: 色を指定するパラメータ引数で、省略可能でデフォルトは 1 です。
       この引数は、内部で使っているユーザー関数 grp_color() に渡されます。
       引数の具体的な設定については grp_color() のリファレンスを参照。
- 第5引数 - size: フォントサイズを指定するパラメータ引数で、'l', 'm', 's' のいずれか。
       これは省略可能で、省略時は 'm' になります。
       'l' - 大フォント、'm' - 中フォント、's' - 小フォント
- 第6引数 - show: 1 のときは液晶に出力し、0 のときはVRAMへ転送するだけです。
       これは
パラメータ引数で、省略時は 1 になります。

引数を5つ、値だけを指定するとエラーになります ⇒ 関数の引数は こちら を参照。
引数を5つだけ設定する場合は、パラメータと共に設定します。
  例) locate(5, 10, 'Wao', 3, color=4) / line(5, 15, 'Wao' 2, show=0)
フォントサイズの詳細 (CGモデル)
   ・'l' (大): 桁は 0~21、行は 0~7  | フォントピッチは 横16 dot、縦24 dot
   ・'m' (中): 桁は 0~31、行は 0~11 | フォントピッチは 横12 dot、縦16 dot
   ・'s' (小): 桁は 0~47、行は 0~17 | フォントピッチは 横 8 dot、縦12 dot
 フォントサイズの詳細 (FXモデル)
   ・'l' (大): 桁は 0~20、行は 0~7 | フォントピッチは 横 6 dot、縦 8 dot
   ・'m' (中): 桁は 0~31、行は 0~9 | フォントピッチは 横 4 dot、縦 6 dot
   ・'s' (小): 'm' と同じ (↑)


関数定義:

from casioplot import *

def locate(column, row, obj, color=1, size='m', show=1):
 #set fontsize & pitch
 if isCG(): #CG model
  dx={'s':8, 'm':12, 'l':16}
  dy={'s':12, 'm':16, 'l':24}
 else: #FX model
  dx={'s':4'm':4, 'l':6}
  dy={'s':6, 'm':6, 'l':8}
 #from 5th argument(size)
 sz={'s':'small', 'm':'medium', 'l':'large'}
 #data transfer to VRAM
 draw_string(column*dx[size], row*dy[size], str(obj), grp_color(color), sz[size])

 if show: #data transfer to screen
  show_screen
()



スクリプトの解説:
 実行しているモデル(FXモデルかCGモデルか)の判定は自動で行います - ユーザー関数 isCG() 利用 
  テキスト出力関数の追加:locate() をユーザーモジュールに追加 ⇒ こちら
  isCG() ユーザー関数 [CGモデルとFXモデルの判定方法] ⇒ こちら
  grp_color() ユーザー関数 ⇒ こちら



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


 


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

リンク集 | ブログ内マップ

関連記事

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

最新記事
検索フォーム
最新コメント
カテゴリ
C# (3)
Online Counter
現在の閲覧者数:
プロフィール

やす (Krtyski)

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


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

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

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


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

リンク
月別アーカイブ
Sitemap

全ての記事を表示する

ブロとも申請フォーム

この人とブロともになる

QRコード
QR