본문 바로가기
IT 배우기/이것저것

모듈화 2(modularity)

by To올라운더 2023. 11. 29.
반응형

지난 글을 이어가보면, 오늘의 포스팅은 아래의 코드를 작성하는 것이다.

 

4. 모듈화 예시

 - 덧셈과 뺄셈을 수행하는 계산기 코드를 작성할 예정인데,

   사용자에게서 입력받는 값이 숫자인지를 판별하여 실행할 예정이다.

 - 기능별 분류를 위해,

  ① 실행 코드(main_calc.py)

  ② 숫자 판별 코드(validate_input.py)

  ③ 덧셈 코드(add_calc.py)

  ④ 뺄셈 코드(sub_calc.py)

 

 

 순서상으로는 세부 기능들이 있어야 동작할 수 있으니,

③  > ④  > ①  > ②  의 순서로 코드를 작성하겠습니다.

 

 

1) 덧셈코드(add_calc.py) 작성

  - 간단히 2개의 숫자를 파라미터로 전달 받아 결과 값을 return 해주는 함수를 생성한다.

  - if __name__ == '__main__' : 조건을 통해 해당 모듈을 직접 실행할 때 예시문이 정상 동작하는 지 확인한다.

  ( if __name__ == '__main__' : 이 어떤 의미인지 아직 모르시나요?)

2023.11.27 - [Python/Tip & Etc] - [python] if __name__ == '__main__'

 

[python] if __name__ == '__main__'

다른 사람들의 코드를 참고하거나 강의를 보다보면 생각보다 자주 눈에 띄는 코드가 있다. 바로 if __name__ == '__main__' : 과 같은 조건문인데, 내가 하나의 파이썬 파일에서 코드를 작성할 때는 필

to-all-rounder.tistory.com

 

 

# 덧셈 모듈
def add_f(a, b):
    print(f'{a} + {b}를 계산합니다.')
    return a + b

if __name__ == '__main__':
    result = add_f(3, 5)
    print(f'결과 값은 {result} 입니다.')

반응형

 

2) 뺄셈코드(sub_calc.py) 작성

  - 덧셈 코드와 동일한 구성을 가지고, 직접 실행 시 예문 결과를 실행한다.

# 뺄셈 모듈
def sub_f(a, b):
    print(f'{a} - {b}를 계산합니다.')
    return a - b

if __name__ == '__main__':
    result = sub_f(3, 5)
    print(f'결과 값은 {result} 입니다.')

 

 

 3) 실행코드(main_calc.py) 작성

import add_calc
import sub_calc


while True :
    a = input('첫번째 숫자를 입력하세요.')
    oper_type = input('+ 또는 - 를 입력하세요.\n종료하려면 [exit]를 입력하세요.')
    b = input('두번째 숫자를 입력하세요.')


    if oper_type == '+':
        result = add_calc.add_f(a, b)
        print(result)
    
    elif oper_type == '-':
        result = sub_calc.sub_f(a, b)
        print(result)
    
    elif oper_type == 'exit':
        print('계산기를 종료합니다.')
        break

    else:
        print('잘못된 연산자 입니다.')

    print('\n')

 - input으로 입력 받는 값이 string 이라는 것만 기억하면, 어렵지 않게 작성할 수 있는 코드이다.

 - 각 모듈별 결과가 정상적으로 출력되는 것을 볼 수 있다.

 - 이제 해당 기능을 처리하기 전 유효성을 검사하는 코드를 추가해보겠다.

 - 만약 a 또는 b의 변수에 숫자형의 자료가 아닌 값이 들어온다면 어떻게 해야할까?

 - main_calc.py에서 예외문을 처리할 수도 있지만, validate_calc.py 를 통해 유효성 검사와 실제 코드 실행이라는 2가지 기능을 나누어 작성하면, 유효성과 관련된 수정이 필요할 때 validate_calc만 수정하면 된다.

 

4) 입력 값 유효성 검사 코드 (validate_input.py) 작성

 - 먼저 해당 값이 int인지 분별하는 코드를 작성해보겠다.

 - 현재 main_calc.py 에서는 int로 값을 받고 있기 때문에 문자가 입력되면 Erorr가 발생한다.

  - main_calc.py 의 a와 b를 type 변환 없이 무조건 입력을 받고,

    유효성 검사는 validate_input.py로 넘긴다.

def validate_input_value(a, b):
    validate_a = False # 검증 전 a 유효성 상태 초기화
    validate_b = False # 검증 전 b 유효성 상태 초기화
    retry_count = 0

    while (validate_a and validate_b) == False and retry_count < 5: 
        print(validate_a and validate_b)
        try:
            int(a)
            validate_a = True
            # print('valdate_a True')
        except:
            validate_a = False
            # print('valdate_a False')

        try:
            int(b)
            validate_b = True
            # print('valdate_b True')
        except:
            validate_b = False
            # print('valdate_b False')


        if validate_a == False:
            a = input('잘못된 숫자가 입력되었습니다.\n첫번째 숫자를 다시 입력하세요. : ')    

        if validate_b == False:
            b = input('잘못된 숫자가 입력되었습니다.\n두번째 숫자를 다시 입력하세요. : ')    

        retry_count += 1

    if retry_count == 5 and (validate_a and validate_b) == False:
        print('반복된 숫자 오입력으로 프로그램을 종료합니다.')
        a=0 # a 값 초기화
        b=0 # b 값 초기화

    return (validate_a and validate_b, int(a), int(b))

if __name__ == '__main__':
    a = input('첫번째 숫자를 입력하세요. : ')
    b = input('두번째 숫자를 입력하세요. : ')
    validate_result = validate_input_value(a, b)
    print(validate_result)

 

 - 입력 받는 두 숫자가 int 로 type 변경을 시도할 때, 정상적으로 변경이 되면 validate_a 값을 Ture로 변환, 

    Error 가 발생하면 except 문을 통해 False로 유지하고 다시 재입력을 받는 if 문을 수행한다.

 - 잘못된 입력이 5회 이상 반복되면 반복문을 종료하고,

   해당 결과를 retrun 시, 첫번째 요소로 True, False로 구분하여 반환한다.

 

 - 이제 해당 값을 기준으로 main_calc.py 에서 return 된 값이 Ture 일 때는 연산을 수행하고,

   False 일 때는 연산을 수행하지 않도록 main_calc.py를 수정하면 완료된다.

 - 현재는 a와 b 두개의 숫자만 파라미터로 유효성 검사를 하였지만,

   oper_type 도 함께 파라미터로 처리하여 나누기 일 때 b 의 값이 0일 경우 등의 제한 사항을 유효성 검사에서 처리하는 방법으로 프로그램의 기능을 더 개선할 수도 있다.

 

 

 

5. main_calc.py 에서 결과 값 확인하기

# main_calc.py
import add_calc
import sub_calc
import validate_input


while True :
    a = input('첫번째 숫자를 입력하세요. : ')
    oper_type = input('+ 또는 - 를 입력하세요. : ')
    b = input('두번째 숫자를 입력하세요. : ')

    validated_result = validate_input.validate_input_value(a, b)
    if validated_result[0] == True:

        if oper_type == '+':
            result = add_calc.add_f(validated_result[1], validated_result[2])
            print(result)
        
        elif oper_type == '-':
            result = sub_calc.sub_f(validated_result[1], validated_result[2])
            print(result)
        
        else:
            print('잘못된 연산자 입니다.')


    if input('계속하시겠습니까?\n[exit] 입력 시, 종료 : ') == 'exit':
        print('프로그램을 종료합니다.')
        break

    print('\n')

 


최종 파일

add_calc.py
0.00MB
main_calc.py
0.00MB
sub_calc.py
0.00MB
validate_input.py
0.00MB

반응형