계산기 만들기 (3)
이제 가장 어려운 부분인 함수를 공부 해 보자. 아래 입력된 코드들은 변수를 선언한 문장들이다.
operation = '' #연산자 저장 변수 temp_number = 0 #이전값 저장 변수 # 결과 출력 상태인지 상태저장. answer_trigger = False
숫자버튼 처리 함수
def button_pressed(value): global temp_number # 한번 계산후에, 다른숫자를 입력하면, 기존결과를 지우고, 새로 계산 global answer_trigger # 입력값이 'AC'일때 if value=='AC': number_entry.delete(0,'end') # AC버튼 누르면, trigger 변수도 초기화. operation = '' answer_trigger = False print("AC pressed") else: # 그외에 0부터 9까지 숫자일때 # Trigger가 True이면, Entry 초기화후 새로입력. if answer_trigger: number_entry.delete(0,"end") answer_trigger = False number_entry.insert("end",value) # 텍스트 창으로 숫자 전송.'end'는 오른쪽끝에 추가하라는 의미. print(value,"pressed")
소수점으로 int형 변환시 에러가 날경우, float형으로 반환.
def float_filter(value): try: int(value) return int(value) except ValueError: return float(value)
(11) 두값이 같으면 정수로 표현가능.==> 정수값으로 반환.
def int_changer(value): if int(value) == float(value): return int(value) else: return float(value)
사칙연산 처리
def math_button_pressed(value): # 사칙연산버튼(/*+-)은 math_button_pressed() 함수로 연결 global operation #함수 바깥의 글로벌 변수사용 global temp_number if not number_entry.get() == '': #기존에 입력한 숫자가 있을때만 연산버튼 인식 operation = value # (10) float_filter 함수 호출. temp_number = float_filter(number_entry.get()) number_entry.delete(0,'end') #입력칸을 비우고, 다음숫자를 입력받을 준비. print(temp_number,operation) def equal_button_pressed(): # '='버튼은 equal_button_pressed() 함수로 연결 global operation global temp_number #연산자나 숫자가 입력되지 않으면, 실행하지 않음. if not (operation =='' and number_entry.get()==''): number = int(number_entry.get()) if operation == '/': solution = temp_number/number elif operation == '*': solution = temp_number*number elif operation == '+': solution = temp_number+number else : solution = temp_number-number # (11)int_changer() 함수를 한번 거쳐서, 값저장. solution = int_changer(solution) # 계산후, 숫자표시칸을 비우고, 계산결과를 표시. number_entry.delete(0,'end') number_entry.insert(0,solution) print(temp_number,operation,number,"=",solution) operation = '' temp_number = 0 # 계산 완료후, Trigger 변수 True로 변경. answer_trigger = True
(12) 키입력 함수
def key_input(value): # 쉬프트키 입력 무시.(덧셈할때) if not repr(value.char) == "''": numbers = '1234567890' operators = '/*+-' # 숫자키 입력시, button_pressed()함수 호출. if value.char in numbers : button_pressed(value.char) print(value.char) # 연산자 입력시, math_button_pressed() 함수 호출. elif value.char in operators : math_button_pressed(value.char) print(value.char) # 엔터키 입력 -> =버튼 elif value.keysym == "Return": equal_button_pressed() print("equal button pressed") # ESC 키 입력. -> AC 버튼 입력. elif value.keysym == "Escape": button_pressed('AC') print('AC button pressed') # BackSpace 입력시, 마지막 한글자 삭제. elif value.keysym == "BackSpace": number_entry.delete(len(number_entry.get())-1,'end') print(number_entry)
Categories
Python
Wizzen2801
