python電卓
pythonで電卓を作ってみました。
ロジックは
http://web.hc.keio.ac.jp/~fujimura/lang/page-18-3.html
を参考にしてみました。
それにしてもしょぼいコーディングです。
もう少し上達したらどんなコーディングができるかの指標とでもしますか。
ちなみにpythonさえ入っていればWindowsでもLinuxでもMacでも動くんじゃないでしょうか。
#!/usr/bin/python #_*_ coding:UTF-8 _*_ from Tkinter import * root = Tk() root.geometry('180x130+50+20') root.title('Python電卓') t = DoubleVar() t.set(0) state = [0] # 0:最初の数値 1:演算子 2:= 3:最初以外の数値 reg = [0] op = [''] def num(): inum = [0] def inputnum(x): if state[0] == 1: inum[0] = x t.set(x) else: inum[0] = inum[0] * 10 + x t.set(inum[0]) if state[0] == 2: state[0] = 0 elif state[0] == 1: state[0] = 3 return inputnum def calc(x): if state[0] == 0: reg[0] = t.get() op[0] = x elif state[0] == 1: op[0] = x elif state[0] == 2: if op[0] == '+': reg[0] = reg[0] + t.get() elif op[0] == '-': reg[0] = reg[0] - t.get() elif op[0] == '*': reg[0] = reg[0] * t.get() elif op[0] == '/': reg[0] = reg[0] / t.get() op[0] = x elif state[0] == 3: if op[0] == '+': reg[0] = reg[0] + t.get() elif op[0] == '-': reg[0] = reg[0] - t.get() elif op[0] == '*': reg[0] = reg[0] * t.get() elif op[0] == '/': reg[0] = reg[0] / t.get() t.set(reg[0]) op[0] = x state[0] = 1 def equal(): if state[0] == 0 or state[0] == 3: if op[0] == '+': t.set(reg[0] + t.get()) elif op[0] == '-': t.set(reg[0] - t.get()) elif op[0] == '*': t.set(reg[0] * t.get()) elif op[0] == '/': t.set(reg[0] / t.get()) def clear(): t.set(0) reg[0] = 0 state[0] = 1 L = Label(textvariable=t, fg='red',width=15, anchor='e').grid(columnspan=5, row=1) n = 1 nm = num() for i in range(3): for j in range(3): bf = lambda x=n:nm(x) Button(text=str(n), padx=15, command=bf).grid(column=j, row=i+2) n += 1 bf = lambda x=0:nm(x) Button(text="0", padx=15, command=bf).grid(column=0, row=5) Button(text="C", padx=15, command=clear).grid(column=1, row=5) Button(text="=", padx=15, command=equal).grid(column=2, row=5) Button(text="÷", padx=15, command=lambda x='/':calc(x)).grid(column=3, row=2) Button(text="×", padx=15, command=lambda x='*':calc(x)).grid(column=3, row=3) Button(text="−", padx=15, command=lambda x='-':calc(x)).grid(column=3, row=4) Button(text="+", padx=15, command=lambda x='+':calc(x)).grid(column=3, row=5) mainloop()