超セレブな携帯向け割り勘電卓をPythonで書いてみた
携帯電話向け「割り勘電卓」を公開します - 頭ん中
さんを見て、PythonでCGIを書く勉強に書いてみました。
本体:
http://ama-ch.com/cgi-bin/warikan.cgi
均等割り電卓と同じ「ような」動作をします。携帯向けとか言いながら携帯向けにWebを作ったことなどないので、ただ携帯からも使えますっていうだけです。あ、テキストエリアにistyle="4"という値を与えると携帯の入力モードが最初から数字になることは弄ってて知りました。勉強になりました。
使いどころ:
せっかく作ったので使いどころを解説します。
一見パクリ低機能な電卓ですが、Pythonで書いているので通常のint型での最大値2^31=2147483647より大きい値でも正確に計算することができます。メモリが許す限り計算できます。
なので、お会計が21億4748万3648円以上の時に、ぜひ使ってください。まさにセレブ向けですね!
ちなみに僕の携帯の電卓では9999億9999万9999まで計算できました。
ソース:
相変わらず汚い><
http://gist.github.com/9649
#!/usr/bin/python # -*- coding: utf-8 -*- """ warikan.cgi 飲み会で使える割り勘電卓 """ import cgi import cgitb; cgitb.enable() print "Content-type: text/html" html = """ <html><title>割り勘電卓</title><body> <form action="warikan.cgi"> <p> 総額: <input name="amount" type="text" istyle="4" size="6" value="%s" />円<br /> 人数: <input name="persons" type="text" istyle="4" size="2" value="%s" />人<br /> </p> <input type="submit" value="計算する" /></form> <p>%s</p> </body></html> """ form = cgi.FieldStorage() #CGIに渡されたデータを取得 try: amount = int(form.getfirst("amount", "0")) persons = int(form.getfirst("persons", "1")) except: amount = 0 persons = 1 def calc(amount, persons): if not (amount % persons): warikiri = "一人あたり%d円です。<br />" % (amount / persons) # ぴったり額 else: warikiri = "" payment1 = (amount / persons) / 100 * 100 # 多め額 payment2 = (amount / persons) / 100 * 100 + 100 # 少なめ額 while payment1 * persons < amount: payment1 += 100 while payment2 * persons > amount: payment2 -= 100 return "%s一人あたり%d円だと、%d円余ります。<br />一人あたり%d円だと、%d円足りません。" % (warikiri, payment1, payment1*persons-amount, payment2, amount-payment2*persons) if persons and (amount / persons): result = calc(amount, persons) else: result = "" print html % (amount, persons, result)