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

プログラミング経験者のための Casio Python
<目次>
初版:2020/06/13
更新:2023/03/19
更新:2023/04/21
更新: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(): 浮動小数点型数値の小数部を取得
応援クリックをお願いします。励みになるので...
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(): 浮動小数点型数値の小数部を取得
応援クリックをお願いします。励みになるので...
- 関連記事
-
-
Casio Python - はじめに 2023/04/21
-
Casio Python のポテンシャル 2023/04/21
-
プログラミング経験者のための Casio Python 2023/04/21
-
Casio Python - ユーザー関数 locate() 2023/04/21
-
Casio Pyhton - 目次 2023/03/19
-