매일프로그래밍
계산기 만들기
JongSeok_12
2019. 11. 21. 16:47
파이썬 내장함수 eval을 사용하여 앞자리 숫자 부터 차례대로 연산하는 계산기 프로그램 만들기
user = input("숫자를 입력해 주세요") # 사용자에게 입력값 받기
def cc (user) : # 계산기 역할 함수생성
ls = [] # 입력값을 계산할 보드
los = 0 # 현재 연산자의 인덱스 위치
oper = ["+", "-", "/", "*", "="] # 연산자를 담는 배열 생성
if user not in oper : # 입력값중에 마지막에 = 이 없다면 추가
user = user + "="
for i,s in enumerate(user) : # 사용자 입력값을 하나씩 반복문으로 출력하면서 enumerate 함수로 해당 인덱스번호도 같이 출력
if s in oper : # 만약 사용자 입력값에서 빼온 값이 연산자라면
ls.append(user[los : i]) # 처음에 생성한 계산기 보드에 0번째 인덱스 부터 연산자 이전의 인덱스 값까지 추가
ls.append(s) # 처음에 생성한 계산기 보드에 현재 연산자 추가
los = i + 1 # 현재 인덱스의 위치를 기억하기 위해 현재 연산자의 위치에서 +1을 함
# los = 다음 인덱스 위치를 저장
ls = ls[0:-1] # 보드에 임의로 넣어준 =을 제거
ps = 0
# 해당 부분부터 실질적인 계산 시작
# 계산은 인덱스 3개씩 묶어서 eval함수를 통해서 계산
# ex) "1" "+" "3" "+" "5"
# 와 같다면 1, +, 3 인덱스 부터 계산후
# 계산한 값을 tamp변수에 넣은 뒤 해당 인덱스 삭제
# 삭제한 인덱스의 위치 즉 0번 인덱스에 계산한 값 insert
# 해당 동작을 반복하면서 마지막 남을 결과값 즉
# 인덱스가 0번 하나 밖에 남지 않았을때 해당 반복문 탈출
while True :
if len(ls) == 1 :
break
if len(ls) > 1 and ls[ps] in oper:
tamp = ls[ps -1] + ls[ps] + ls[ps+1]
del ls[0 : 3]
ls.insert(0, str(eval(tamp)))
ps = 0
ps += 1
return ls
print(cc(user))