ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 계산기 만들기
    매일프로그래밍 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))

     

    댓글

Designed by Tistory.