매일프로그래밍

계산기 만들기

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))