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のように関数を自分の関数内でコールする方法がわからなかった(できない?)ので、回りくどいブロック・コードとなった。
このブロック・コードが正しいかどうかはわからないが、一応当方が意図したようにアプリは動いてくれた。
※コメント投稿者のブログIDはブログ作成者のみに通知されます