75才からのモバイルアプリ作成

MIT App Inventor 2 を使ったアプリ作成

MIT App Inventor 2でもできるかやってみた (Convert a number to words 1)

2025-01-07 18:07:10 | 日記

YouTubeやX上では、いろいろなプログラミング言語のチュートリアル(1分未満から数十時間まで)がある。

そんな中で、Xに、Python Codingというアカウントがあり、「入力した数字を文字に変換する」というコードの紹介があった。Python自体全くわかっていないが、グーグル先生もいるので見よう見まねでMIT App Inventor2 で可能かやってみた。

入力する数字が1000未満まで対応できるようになったが、これ以上は根気が続かずギブアップ。

また、今回は、Xの記事内容に沿ってMIT App Inventor2で再現しようとしたが、記事の内容にとらわれることなくブロック・コードを考えたらどうなるのか、機会があれば考えてみたい。

アプリ実行のビデオ:

スクリーン・デザイン:

                                                             

ブロック・コード:

変数units:数字が20未満の場合の対応する文字をリストにまとめたもの

変数tens:20より10ずつ増加していく数字の対応する文字をリストにまとめたもの

スクリーンの初期化の際にリストの内容を変数に格納。(Python Codingの記事の通りに設定)

なお、変数tensのindex 1および2は、変数unitsで対応済みのzeroとtenに相当するものなので空白文字。

変換ボタン「Convert」をタップした時の動作を設定。

=>入力した数字に対応する文字を表示するLabelを配置しているHorizontalArrangement5の背景色をピンクに設定。

=>数字を文字に変換する関数convertToWords(パラメーターとして入力された数字を受取る)を実行。

消去ボタン「Clear」の動作を設定=>clear関数の実行=>キーボードを非表示とする

関数clearの機能を設定

=>入力用TextBoxおより数字に対応する文字を表示するLabelに空白を設定して初期化=>HorizontalArrangenment5の背景色を白色に設定して初期化=>変数onesPlace(1のくらいの数字を格納)及び変数tensPlace(10の位の数字を格納)に0を設定して初期化

変数onesPlace(1のくらいの数字を格納)及び変数tensPlace(10の位の数字を格納)を設定(0で初期化)

関数convertToWords:

パラメーターとして受け取る入力数字(num)が20未満の場合=>変数unitsのリスト中から、indexが入力数字+1の文字を取り出しLabelに表示する。unitsのリストは「zero」から始まるので1を加算する。例えば、入力された数字が「1」の場合、「one」はindexで言えば「2」となる。

   14を入力=>20未満の数字=>unitsリストのindexが15(14+1)の文字 (fourteen) を表示

数字(num)が100未満の場合(20から99まで)=>入力された数字を10で除算した余りが0の場合は、1位の数字が0なので、変数tensのリストより10で除算した商の値+1をindexとして当該の文字を表示。=>余りが0でない場合は、さらに1位の数字に対する文字を取得する必要がある。変数unitsのリストから入力された数字を10で除算した余り+1をindexとして文字を取得し、それぞれjoinブロックで結合して表示する。

   40を入力=>20以上で100未満=>40/10 = 4 =>tensリストのindexが5 (4+1) の文字(forty) を表示。

   68を入力=>20以上で100未満=>67/10 = 6 余り 8=>tensリストのindexが7 (6+1) の文字(sixty)と

                   unitsリストのindexが9 (8+1) の文字(eight)を” ”を挿入して結合の上、

                   文字 (sixty eight) を表示。

数字(num)が1000未満の場合(100から999まで)=>上記と同じ考えで数字に対応する文字をリストより取得して、joinブロックで結合して表示する。

説明がまどろっこしいため意味不明かもしれないが。。。

最後に、1000以上の数字を入力した場合は、入力数字は1000未満とするよう促すポップアップを表示する。

Pythonでは、//という演算子を使えば、除算の商を取得することができるらしいが、MIT App Inventor2にはそのような演算子は見当たらないので floor ブロックを代用した。また、Pythonのように関数を自分の関数内でコールする方法がわからなかった(できない?)ので、回りくどいブロック・コードとなった。

このブロック・コードが正しいかどうかはわからないが、一応当方が意図したようにアプリは動いてくれた。

 



コメントを投稿