Python学習【365日チャレンジ!】358日目のマスターU(@Udemy11)です。
久しぶりにアウトレットを覗いてみると、流石に人がガラガラ状態でした。
まえから履いているECCOのシューズは履き心地がいいので、もう一足欲しくて店舗を覗いてみました。
とはいえ、かなりの割引率がないと靴を購入しないたちなので、気に入ったのがありましたが、残念ながら今回は、元値の高さと割引率の低さで購入には至りませんでした。
アウトレットには、昨年「香水」で知名度が上がった【Dolce & Gabbana】も入っていたので、足を踏み入れてみたものの、外見で購入しない人だということがわかるのか、店員さんは全く近づいてきませんでしたので、ちらっと値段を見て、速攻店を出ました。
ほんとあんなお店の高額な商品って、どんな人が購入するんでしょうね。
それでは今日もPython学習を始めましょう。
昨日の復習
昨日は、GoogleスプレッドシートをPythonから操作するプログラムをMac用アプリにしてみました。
Google Cloud Platformとスプレッドシードの初期設定はもちろん必要ですが、スプレッドシートキーと秘密鍵ファイル名、値を入力フォームから取得して、計算結果をスプレッドシートに書き出すアプリをMac用で動くアプリにすることができました。
以前作成したCSVファイルにデータを書き出すアプリは、Mac用アプリだとうまくCSVにデータを書き出すことができませんでしたが、今回作成したアプリは、きちんと計算した値をスプレッドシートに書き出すことができました。
詳しくは、こちらの記事をごらんください。
今日は、久しぶりにPythonistaを使って、割引の計算ができるアプリを作ってみようと思います。
お店で、値札に値段と割引の%シールがはられている商品を見ると思いますが、シンプルに、割引率から商品の価格を計算して、10%の消費税を加えた額、元値に消費税10%を掛けた額と割り引いた金額に消費税10%を加えた額の差額、つまりお得になった金額を表示できるアプリです。
おまけでテキストフィールドの値をすべてクリアするボタンも付け加えています。
Script with UI
Pythonistaの画面の左下の【+】をタップして、Script with UI
を選び、保存場所を指定して名前を入力して、【Create】をタップします。
今回は、【cal】という名前にしたのでcal.py
とcal.pyui
という2つのファイルが作成されました。
cal.pyui
まずは、入力フォームとなるcal.pyui
を作成していきます。
最初は、240×240サイズのキャンパスが作成されているので、画面に収まるような大きさに変更し、そこに上部のの+
ボタンをタップして、次のアイテムを配置していきます。
ラベルとテキストフィールドとボタンの3種類で、右上の【i】アイコンをタップして、アイテムの情報を入力します。
変更する項目は【Name】、【Background Color】、【Tint Color】、【Text】、【Alignment】で、必要な文字などを入力したり変更したりして配置します。
ポタンだけは、【Action】に、cal.pyの割り当てる関数を入れますが、clear
には、clear
関数、taxcal
には、cal
関数を割り当てています。
これらの関数は、このあと記述するcal.py
の中に記述する関数になります。
名前と配置が完了すれば、cal.pyui
は完了です。
引き続いて、実行するコードを書いていきましょう。
cal.py
最初のコードは次のようになっているのでimport ui
の次の行にコードを書いていきます。
import ui
v = ui.load_view()
v.present('sheet')
この状態で、一度右上の三角アイコンをタップしてコードを実行すると、先に作った入力フォームが表示されますが、ボタンに割り当てたコードはまだできていないので、ボタンをタップするとエラーが起こります。
記述するコードは次のようになります。
import ui
def cal(sender):
try:
price1 = sender.superview['price1']
rate = sender.superview['rate1']
price3 = sender.superview['price3']
price4 = sender.superview['price4']
price5 = sender.superview['price5']
ans1 = int(price1.text) * (1 - float(rate.text)/100)
ans2 = int(ans1) * 1.1
ans3 = (int(price1.text) * 1.1) - ans2
price3.text = str(ans1)
price4.text = str(ans2)
price5.text = str(ans3)
except:
pass
def clear(sender):
price1 = sender.superview['price1']
rate = sender.superview['rate1']
price3 = sender.superview['price3']
price4 = sender.superview['price4']
price5 = sender.superview['price5']
price1.text = ''
rate.text = ''
price3.text = ''
price4.text = ''
price5.text = ''
v = ui.load_view()
v.present('sheet')
3行目から19行目が割引計算をする関数cal
です。
try-except
で、テキストフィールドに値が入力されていないなどのエラーが怒らないようにしています。
計算の元になる商品の金額はprice1
に入力し、割引率は数値でrate
に入力し、計算した値をans1
ans2
ans3
に代入しています。
21行目から32行目がすべてのテキストフィールドを消去する関数clear
にしています。
プログラムの実行
cal.pyui
とcal.py
が完成したら、cal.py
を実行するとcal.pyui
で作成したフォームが表示され、【商品の価格】と【割引率(%)】を入力して、【お得感を計算】ボタンをタップすれば、【割引後の価格】、【税込価格(10%)】、【値引き(税込)】の値が表示されます。
まとめ
入力フォームから取得した値を使って計算して表示するという単純なコードなので、簡単にできると思っていたところ、なんだかよくわからない小数点の数字が表示されてしまいました。
これは浮動小数点のせいようで、コンピュータの計算では、小数点の計算が私たちが見るようなぴったりの数字にならないのが原因のようです。
でコードをいじりながらたどり着いたのが今回のコードなのですが、やっぱりおかしな数値になってしまう計算もあって、完璧な状態ではありません。
結果も小数第一位まで表示してますしね。
ということで、プログラマーにすれば当たり前のこともまだまだわかっていないため、実践を繰り返しながら、いろいろと吸収していきたいと思います。
それでは、明日もGood Python!