본문 바로가기

내일배움캠프/사전과제

[내일배움캠프] - 사전과제 : 파이썬으로 계산기 만들기

클럽에서 권고하는 사전과제 중 '웹개발 종합반' 수업은 이미 수강했기에,

파이썬 수업 사전과제를 먼저 시작했음.

 

 

ㄱㄱ

 

 

[강의] - 파이썬활용 | 7. 파이썬 기초 GUI 계산기 만들기 :: tkinter | 코딩나우

https://www.youtube.com/watch?v=rqif36EDSOI 

'파이썬으로 만든 내 계산기'

 

import tkinter as tk
disValue = 0
operator = {'+':1, '-':2, '/':3, '*':4, 'C':5, '=':6}
stoValue = 0
opPre = 0
newNum = 0

def numberClick(value):
    print(value)
    global disValue, opPre, newNum
    if newNum == 1:
        disValue = value
        newNum = 0
    else:
        disValue = (disValue*10) + value
    strValue.set(disValue)

def clear():
    global disValue, stoValue, opPre, newNum
    disValue = 0
    stoValue = 0
    opPre = 0
    newNum = 0
    strValue.set(disValue)

def operatorClick(value):
    print(value)
    global disValue, operator, stoValue, opPre, newNum
    op = operator[value]

    if disValue == 0:
        opPre = 0
    elif op == 5:
        clear()
    elif op == 6:
        if opPre == 0:
            disValue = disValue + 0
        elif opPre == 1:
            disValue = stoValue + disValue
        elif opPre == 2:
            disValue = stoValue - disValue
        elif opPre == 3:
            disValue = stoValue / disValue
        elif opPre == 4:
            disValue = stoValue * disValue
        strValue.set(disValue)
        stoValue = 0
        opPre = 0
        newNum = 1
    else:
        if opPre == 0:
            stoValue = disValue
        elif opPre == 1:
            stoValue = stoValue + disValue
        elif opPre == 2:
            stoValue = stoValue - disValue
        elif opPre == 3:
            stoValue = stoValue / disValue
        elif opPre == 4:
            stoValue = stoValue * disValue
        opPre = op
        newNum = 1
        disValue = stoValue
        strValue.set(disValue)

def buttonClick(value):
    try:
        value = int(value)
        numberClick(value)
    except:
        operatorClick(value)


win = tk.Tk()
win.title('계산기')

strValue = tk.StringVar()
strValue.set(str(disValue))
dis = tk.Entry(win, textvariable=strValue, justify='right', bg='white', fg='black')
dis.grid(column=0, row=0, columnspan = 4, ipadx=80, ipady=30)

calItem = [
    ['1','2','3','4'],
    ['5','6','7','8'],
    ['9','0','+','-'],
    ['/','*','C','=']
]

for i,items in enumerate(calItem):
    for k,item in enumerate(items):

        try:
            color = int(item)
            color = 'gray'
        except:
            color = 'green'

        bt = tk.Button(win,
            text=item,
            width=10,
            height=5,
            bg=color,
            fg='black',
            command = lambda cmd=item: buttonClick(cmd)
        )
        bt.grid(column=k, row=(i+1))
win.mainloop()
 

 

강의 내용 따라서 만들긴했는데 기능이 일부 아쉬운 점이 있었음.

1+1=2 처럼 연산을 한번 할 때는 잘 되지만,

1+1+1=3 처럼 한번 이상의 연산을 할 경우엔 작동이 안 되드라

 

그래서 이래저래 뜯어고치고 해봤지만 잘 안됨...

만족스럽진 않지만 결국 위에 문제는 해결했다. (지저분하게)

 

근데 내 계산기 넘 못생김 ㅠ