Casio Python - CGモデルとFXモデルのPythonモードの違い

Python Casio Python
 Casioグラフ関数電卓の Python を使ってみる
     - CGモデルとFXモデルのPythonモードの違い 
目次


初版:2020/10/25
前の記事 - 13. 10進数除算の出力と精度 |  次の記事 - 15. RGB値による色設定


14. CGモデルとFXモデルのPythonモードの違い 

これまでの記事では、fx-CG50 OS3.40 以降を前提として Casio Python のスクリプトを検討してきました。

Casio Python で使い勝手の良いスクリプトに仕上げるには、casioplot モジュールの存在が不可欠で、グラフィック画面 (描画画面) へテキストやドットを自由に出力することがポイントになります。それをサポートするためにユーザーモジュール u.py も作ってきました。

2020年10月15日に公開されたOSアップデートファイルにより、カラー高精細液晶モデル fx-CG50 のOSがアップデート可能になりました。これと同時に、2つのモノクロ液晶モデルのOSがアップデートされ casioplot モジュールが追加されました。

- fx-CG50 OS3.40 から OS3.50 にアップデート   ⇒ アップデートサイトはここを参考に
- fx-9750GIII OS3.21 から OS3.40 にアップデート  ⇒ アップデートサイトはここを参考に
- fx-9860GIII OS3.21 から OS3.40 にアップデート  ⇒ アップデートサイトはここを参考に


さて、Pythonモード搭載のモノクロ液晶モデル (fx-9750GIII, fx-9860GIII) をここでは FXモデルと、そして高精細カラー液晶モデル (fx-CG50) を CGモデルと呼ぶことにします。

結論から言えば、FXモデルPythonモードはCGモデルよりも制限があることが判りました。

この違いは、これまでにCGモデルで作ったスクリプトをFXモデルに移植する作業を行う際に見つかりました。


14.1 CGモデルからFXモデルへのスクリプトの移植
CGモデルで作成した下記2つのスクリプトをFXモデルに移植しました。以下のスクリプトファイルは、 CGモデルとFXモデルの両方に対応し、異なる解像度の画面で互換動作します。

モンテカルロ法 ver 3.1 - montec31.py      ⇒ ダウンロード
15桁対応高速素因数分解 ver 7.1 - FactorG7.py  ⇒ ダウンロード
ユーザーモジュール ver 1.5 - u.py        ⇒ ダウンロード

※ モンテカルロ法 - montec31.py - 1000回実行時の出力画面
  Monteca31_CG_1000_s  Monteca31_FX_1000_s 
  FXモデルでは1ドットが大きいので、1000回実行時のドットでかなり画面を埋めてしまいます。
  
15桁高速素因数分解 ver 7.1 - FactorG7.py - 素因数分解の出力画面
  FactorG71_CG_1_s  FactorG71_FX_1_s  
  CGモデルでは見やすくするために縦横の線分を描画しますが、FXモデルでは線分描画をせずにフォントを見やすくしました。そもそもFXモデルでは Mediumサイズのフォントは見づらいですね。

この2つのスクリプト例で CGモデルとFXモデルの両方に対応するために、以下の2点に留意しました。
1. CGモデルかFXモデルかを判定する。
2. モデル判定結果に応じて、テキストやドットの表示位置を場合分けする。

14.1.1 CGモデルからFXモードへのスクリプト移植のポイント
CGモデルとFXモデルの主な違いは、出力するグラフィック画面の解像度、つまり縦と横のドット数です。
- CGモデル: 384 ドット × 192 ドット
- FXモデル: 128 ドット × 64 ドット

従って、画面の中で同じ位置にテキストやドットを表示するためには、CGモデルとFXモデルでは指定する座標が異なります。そこで、CGモデルで作ったスクリプトをFXモデルで動作させるには座標の設定を変更すれば良いことになります。
CGモデルでの座標 (X, Y) は、FXモデルで (X//3, Y//3) と記述すれば、ほぼ同じ位置に表示できます。

演算子 // は、X//3 としたとき X を3で割った商、つまり除算結果の整数部を得る Python の演算子です。

1つのスクリプトで、CGモデルでもFXモデルでも正しく動作させるためには、CGモデルかFXモデルかを判定する必要がります。判定できれば、if 文で場合分けすれば目的を達成できます。

14.1.2 CGモデルとFXモデルの判定方法
この解像度の違いを利用して、CGモデルかFXモデルかを判定できます。casioplot モジュールで提供されている get_pixel() 関数を使う方法を考えました。get_pixel() は指定した座標の色を返します。

get_pixel() は、指定した座標が画面の範囲外の場合は None を返します。そこで、CGモデルでは存在するがFXモデルでは存在しない座標、例えば (128, 64) を指定すると、CGモデルでは意味のある値を返しますが、FXモデルでは None を返すことを利用します。

管理人は以下の関数を作って利用しました。

モデル判定関数
def isCG():
 if get_pixel(128,64)==None:
  return 0
 else:
  return 1


CGモデルで isCG() を実行すると1を返し、FXモデルでは0を返します。


14.2 FXモデルのPythonモードの制限 - バッファサイズ

上で紹介したスクリプト FactorG7.py, u.py は、スクリプトをFXモデルで開こうとすると、エラーメッセージ "Invalid Data Size" が表示されスクリプトを開けず、電卓上で編集ができません。これは、CGモデルにはない FXモデルの制限 です。編集を行うには、一旦PCに転送し、エディタでスクリプトを開いて編集できます。


14.2.1 編集できるスクリプトファイルの行数の制限 
CGモデルでは300行を超えるとスクリプトファイルを開けず、FXモデルでは150行を超えるとスクリプトファイルを開けません。
従って、上の3つのスクリプトファイルのうち、FactorG7.py と u.py は、FXモデルで開けず、電卓上で編集できません。PCに転送してエディタで編集してから電卓で動作確認を行う必要があり、かなり不便です。
オープンできるスクリプトファイルの行数は、FXモデルは最大150行、CGモデルの最大300行の半分に制限

u.py への対策
u.py からコメントの1部を削除して150行以内にしてFXモデルで開いて編集できるようにした ufx.py も同梱しました。

FactorG7.py への対策
FactorG7.py は、必要なスクリプト自体の行数が多く、コメント削除で150行以内にできないので、FXモデルで開いて編集できません。PCへ転送してエディタで編集するしかありません。


14.2.2 print() 出力のスタックサイズ
以下のスクリプトをCGモデルとFXモデルで実行してみます。

n=123
lst=list(range(n))
print(lst)


CGモデルでは n=123 までは print() でリスト lst[] を出力できますが、123を超えると MemoryEror となります。
FXモデルでは n-66 まではリストlst[] を出力できますが、66を超えると MemoryError となります。
print() 出力のスタックは、CGモデルは123バイト、FXモデルは66バイトとCGモデルの約半分に制限


14.2.3 Shell 画面出力のスタックサイズ
以下のスクリプトをCGモデルとFXモデルで実行してみます。

n=200
for i in range(n):
 print(str(n))


CGモデルでは n=200 までは shell 画面に全て表示されますが、200を超えても 200行しか出力されず、スタックの底のデータは表示されません。
FXモデルでは n=100 までは shell 画面に全て表示されますが、100を超えても 100行しか表示されず、スタックの底のデータは表示されません。
Shell 画面のスタックは、CGモデルは200行、FXモデルは100行とCGモデルの半分に制限


14.3 Casio Python自体の機能の違い

CGモデル (fx-CG50) のOSが 2020年10月15日に OS3.40 から OS3,50 へのアップデートファイルが公開されました。
同じ日に FXモデル (fx-9750GIII と fx-9860GIII) は、OS3.21 から OS3.40 へのアップデートファイルが公開されました。
そこで、CGモデルOS3.40OS3.50Casio Python の違いを調べ、次に CGモデルOS3.50FXモデルOS3.40Casio Python の違いを調べます。


14.3.1 CGモデル OS3.40 と OS3.50 の違い
実装されているクラス、オブジェクト、関数は全く同じです。
[SHIFT]-[F4] で現れるカタログ機能で OS3.40 ではリストになかった clear_screen() のみが OS3.50 で追加されました。


14.3.2 CGモデル OS3.50 と FXモデル OS3.40 の違い
実装されているクラス、オブジェクト、関数は全く同じです。

以下のスクリプトで確認できます。

ObjName.py  ダウンロード

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

print(repr(list))
for i in dir(list):
 print(i)

print(repr(dict))
for i in dir(dict):
 print(i)

print(repr(set))
for i in dir(set):
 print(i)

import casioplot
print(repr(casioplot))
for i in dir(casioplot):
 print(i)

import math
print(repr(math))
for i in dir(math):
 print(i)

import random
print(repr(random))
for i in dir(random):
 print(i)

CGモデルでは全てが出力されますが、FXモデルでは出力スタックが100行に制限されるので、スクリプトを適当にコメントアウトして複数回に分けて出力する必要があります。


FXモデルのPythonモードは、Pythonの開発環境としては制限が強くかなり使いづらいのですが、Casio Pythonとしての機能はCGモデルと同じです。



目 次

前の記事 - 13. 10進数除算の出力と精度

次の記事 - 15. RGB値による色設定





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


 


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

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


関連記事

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

コメントの投稿

非公開コメント

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

やす (Krtyski)

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


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

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

なお管理人はカシオ計算機の関係者ではなく、Casio Basicが面白いと感じる1ユーザーです。


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

リンク
月別アーカイブ
Sitemap

全ての記事を表示する

ブロとも申請フォーム

この人とブロともになる

QRコード
QR