• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

- 콘솔 스마트 계산기 관련 질문 드립니다.

20.03.03 08:38 작성 조회수 132

1

안녕하세요! 남박사님.

잘 알려주신 덕분에 원활히 해당 콘솔 스마트 계산기 강의를 넘어갔는데 복습하던중 한가지 궁금증이 있어 문의드립니다.

아래의  string_calculator 함수안에 user_input매개변수 용도는 이해가지만 """show_history=Fasle""" 의 용도가 

이해가 가질않습니다.  """show_history=Fasle""" 빼고 로직을 실행해도 어떠한 차이를 느끼지 못했는데 혹시

사용용도가 어떤것인지 알려주시면 감사하겠습니다. 하단에 전체적인 코드 작성표를 스크린샷 첨부하였습니다.

항상 감사드립니다!

def string_calculator(user_inputshow_history=False):

# 콘솔 스마트 계산기 
# enumerate는 문자열을 각각 인덱스 한다 ex: 안녕하세요 -> 안 녕 하 세 요 나눠준다.
# user_input[-1] 안에 -1은 인덱싱 맨끝을의미 순서는 1,2,3,4 마지막부터는 역으로 -1,-2,-3
import os

operator = ["+""-""*""/""="]

def string_calculator(user_inputshow_history=False):
    string_list = []
    lop = 0


    ## 입력된 계산식을 리스트화 시키는 로직

    # 계산식 입력시 연산 앞까지만 데이터를 넣으니깐 임의로 연산자를 넣어서 데이터를 넣고 마지막에 연산자를 제거
    if user_input[-1not in operator:
        user_input += "="

    # user_input = input("계산식을 입력하세요: ") 계산값 인덱싱 5 + 5 -> ["5","+","5"]
    for i, s in enumerate(user_input):
        # operator = ["+", "-", "*", "/", "="] 만날때 동작
        if s in operator:
            if user_input[lop:i].strip() !="":
                string_list.append(user_input[lop:i])
                string_list.append(s)
                lop = i + 1


    string_list = string_list[:-1]            




    # 아래는 계산하는 로직
    # 10 + 20 + 30 + 30 입력할때 이 로직이 계산하는 방법 앞에 한덩어리 계산후 삭제 계산후 삭제 됨.

    # ['10 ', '+', ' 20 ', '+', ' 30 ', '+', ' 30'] 1번
    # ['30', '+', ' 30 ', '+', ' 30'] 2번
    # ['60', '+', ' 30'] 3번
    # ['90'] 4번  최종계산

    pos = 0
    while True:
        if pos + 1 > len(string_list):
            break
        if len(string_list) > pos + 1 and string_list[pos] in operator:
            temp = string_list[pos-1] + string_list[pos] + string_list[pos + 1]
            del string_list[0:3]
            # insert는 리스트 내용을 앞에다가 추가 append는 리스트 내용을 뒤에서부터 추가
            string_list.insert(0str(eval(temp))) 
            pos = 0

            #리스트 계산 어떻게 되나 확인
            # show_histrory True면 실행 맨 밑에 입력 함수 값 인풋에서  result = string_calculator(user_input, show_history=True)  True를 넣어줌
            if show_history:
                print(string_list)

        pos += 1
        

    if len(string_list) > 0 :
        result = float(string_list[0])

    return round(result, 4)

while True:
    os.system("cls")
    user_input = input("계산식을 입력하세요: ")
    # 계산기 반복하다가 나갈려고 할때 /exit 치면 됨.
    if user_input == "/exit":
        break
    result = string_calculator(user_input, show_history=True## 함수 안에 있는건 지역 변수 함수 밖에 있는건 전역 같은 변수라도 함수 안에 있는지 밖에있는지 차이가 있어서 중복되도 별개로 봄.
    print("결과 : {}".format(result))
    os.system("pause"# 계속하려면 아무 키나 누르십시오 ... 나오게 하는것



답변 1

답변을 작성해보세요.

1

def string_calculator(user_inputshow_history=False):

위 함수에서 show_histoy 매개변수는 단지 개발과정에서 계산식을 출력하여 어떻게 계산되는지를 print 해볼 목적으로 사용되는 내용으로 실제 함수의 기능 동작과는 큰 상관 없는 부분입니다.

string_calculator(user_input, show_history=True)

이렇게 호출해보시면 계산과정이 모두 화면에 출력됩니다.