계산기 만들기 (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


