Python学習【365日チャレンジ!】358日目のマスターU(@Udemy11)です。

久しぶりにアウトレットを覗いてみると、流石に人がガラガラ状態でした。

まえから履いているECCOのシューズは履き心地がいいので、もう一足欲しくて店舗を覗いてみました。

とはいえ、かなりの割引率がないと靴を購入しないたちなので、気に入ったのがありましたが、残念ながら今回は、元値の高さと割引率の低さで購入には至りませんでした。

アウトレットには、昨年「香水」で知名度が上がった【Dolce & Gabbana】も入っていたので、足を踏み入れてみたものの、外見で購入しない人だということがわかるのか、店員さんは全く近づいてきませんでしたので、ちらっと値段を見て、速攻店を出ました。

ほんとあんなお店の高額な商品って、どんな人が購入するんでしょうね。

それでは今日もPython学習を始めましょう。

昨日の復習

昨日は、GoogleスプレッドシートをPythonから操作するプログラムをMac用アプリにしてみました。

Google Cloud Platformとスプレッドシードの初期設定はもちろん必要ですが、スプレッドシートキーと秘密鍵ファイル名、値を入力フォームから取得して、計算結果をスプレッドシートに書き出すアプリをMac用で動くアプリにすることができました。

以前作成したCSVファイルにデータを書き出すアプリは、Mac用アプリだとうまくCSVにデータを書き出すことができませんでしたが、今回作成したアプリは、きちんと計算した値をスプレッドシートに書き出すことができました。

詳しくは、こちらの記事をごらんください。

今日は、久しぶりにPythonistaを使って、割引の計算ができるアプリを作ってみようと思います。

お店で、値札に値段と割引の%シールがはられている商品を見ると思いますが、シンプルに、割引率から商品の価格を計算して、10%の消費税を加えた額、元値に消費税10%を掛けた額と割り引いた金額に消費税10%を加えた額の差額、つまりお得になった金額を表示できるアプリです。

Pythonistaで割引計算

おまけでテキストフィールドの値をすべてクリアするボタンも付け加えています。

Script with UI

Pythonistaの画面の左下の【+】をタップして、Script with UIを選び、保存場所を指定して名前を入力して、【Create】をタップします。

今回は、【cal】という名前にしたのでcal.pycal.pyuiという2つのファイルが作成されました。

Pythonistaで割引計算アプリ

cal.pyui

まずは、入力フォームとなるcal.pyuiを作成していきます。

最初は、240×240サイズのキャンパスが作成されているので、画面に収まるような大きさに変更し、そこに上部のの+ボタンをタップして、次のアイテムを配置していきます。

Pythonistaで割引計算

ラベルとテキストフィールドとボタンの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に入力し、計算した値をans1ans2ans3に代入しています。

21行目から32行目がすべてのテキストフィールドを消去する関数clearにしています。

プログラムの実行

cal.pyuical.pyが完成したら、cal.pyを実行するとcal.pyuiで作成したフォームが表示され、【商品の価格】と【割引率(%)】を入力して、【お得感を計算】ボタンをタップすれば、【割引後の価格】、【税込価格(10%)】、【値引き(税込)】の値が表示されます。

Pythonistaで割引計算

まとめ

入力フォームから取得した値を使って計算して表示するという単純なコードなので、簡単にできると思っていたところ、なんだかよくわからない小数点の数字が表示されてしまいました。

これは浮動小数点のせいようで、コンピュータの計算では、小数点の計算が私たちが見るようなぴったりの数字にならないのが原因のようです。

でコードをいじりながらたどり着いたのが今回のコードなのですが、やっぱりおかしな数値になってしまう計算もあって、完璧な状態ではありません。

結果も小数第一位まで表示してますしね。

ということで、プログラマーにすれば当たり前のこともまだまだわかっていないため、実践を繰り返しながら、いろいろと吸収していきたいと思います。

それでは、明日もGood Python!