Pythonプログラム 電卓
以下にPythonista3というアプリを使った電卓のプログラムを載せます。
import ui
import clipboard
import console
#calcdという変数 。「calc」キーで計算直後にcalcdをTrueにする
#計算した直後数字キーを押したら表示をクリアして入力するため
calcd = False
v = ui.load_view()
v.present('sheet')
#時間表示
import datetime
from datetime import datetime as dt
#tdatetime = dt.now()
#t = tdatetime.strftime('%Y/%m/%d %H:%M:%S')
def on_button(sender):
tdatetime = dt.now()
t = tdatetime.strftime('%Y/%m/%d %H:%M:%S')
title_label2 = sender.superview['title_label2']
title_label2.text = (t)
def on_cl(sender):
title_label2 = sender.superview['title_label2']
title_label2.text = ""
#ここから計算機
#display_label .text
#数字キーのイベント処理
#calcd をglobal変数として用意。
#5行目 計算後に値をクリア
#7行目 現在の表示を変数Sに取り出す。
#そしてcalcd がTrueなら、空のテキストにする
#もう一つ 、値が0ならsをクリアする
#9行目 用意したSにイベントが発生したボタンのテキストを付け足し
#表示 。
#replace ("×""*")
def on_number_tap(sender):
global calcd
s = display_label.text
if calcd:
s = ""
calcd = False
if s == '0':
s = ""
display_label.text = s + sender.title
calcd = False
#演算キーのイベント処理
#display_labelテキストの末尾にsenderのtitleを付け足し
#calcd 値をFalseに変更。これでdisplayのテキストに
#演算記号が付け足される 。
def on_operation_tap(sender):
global calcd
display_label.text += sender.title
calcd = False
#delキーのイベント処理
#インディックスの [開始位置:終了位置]テキストのゼロ文字目から
#最後の一文字目前
def on_delete_tap(sender):
display_label.text = display_label.text[:-1]
#CLキーのイベント処理
#グローバル変数calcd を宣言、値をTrueに
def on_clear_tap(sender):
display_label.text = '0'
#Calcキーのイベント処理
#入力された式をevalする 。displayに設定された式を取り出し
#evalで評価して小数点2桁まで丸めて変数に設定する
#8行目 displayとlistの表示を変更する
def on_calc_tap(sender):
global calcd
calcd = True
try:
fml = display_label.text
res = str('{:.2f}'.format(eval(fml)))
display_label.text = res
history_list.data_source.items.append(fml + '=' + res)
except:
display_label.text = '***ERROR***'
#リストのイベント処理
#@の文字はデコレータータッチした処理 クリップポードにコピー
@ui.in_background
def on_list_tap(sender):
n = sender.selected_row
s = sender.items[n]
clipboard.set(s)
console.alert(s + 'をコピーしました。')
#メイン処理
#Viewをロードする
#label を変数dispに、TableViewを変数list にそれぞれ
#取り出しておく 。
v = ui.load_view()
display_label = v['display_label']
history_list = v['history_list']
v.present('sheet', orientations = ['portrait'])