NGMsoftware

NGMsoftware
로그인 회원가입
  • 매뉴얼
  • 학습
  • 매뉴얼

    학습


    Python 파이썬 처음부터 다시 실행하는 방법. (goto)

    페이지 정보

    본문

    안녕하세요. 엔지엠소프트웨어입니다. 엔지엠 매크로에는 [ 액션 이동(goto) ], [ 액션 반복(for, foreach) ]을 비롯한 옵션에서 전체 반복을 사용할 수 있습니다. 아래 그림처럼 반복 횟수를 10으로 입력하면 매크로가 전체 10번 수행됩니다. 무한 반복하려면 0 또는 -1을 입력하세요.

    eTRWa9M.png

     

     

    우선, 파이썬에서는 goto를 사용할 수 없습니다. 전체 파이썬 프로그램을 반복하려면 루틴을 이동해야 하는데요. 이 때 쉽게 사용할 수 있는 명령문이 goto입니다. 그런데, 조금만 검색해보면 대부분의 언어가 goto를 지원하지만 파이썬은 안된다는걸 알 수 있습니다. 왜 파이썬(Python)만 지원하지 않을까요? 일반적으로 이런 명령문은 조직화되지 않은 코드를 생산하게 됩니다. 그러다보니 스파게티 코드가 되고, 더이상 유지보수를 할 수 없는 지경에 이르게 됩니다. 더 큰 문제는 담당자가 퇴사하거나 다른 부서로 가게 된다면 후임자는 엄청난 고통을 받게 될겁니다. 흐름을 이해하기 어렵고 역추적하는데 어려움을 겪기 때문입니다.

     

    참고로, 대부분의 언어가 goto를 사용할 수 있도록 허용하지만~ 권장하지는 않습니다. 조건(if~else, switch~case) 표현식과 예외 및 반복기를 사용하여 구조화된 프로그래밍이 가능하기 때문입니다. 엔지엠 매크로는 반복적인 업무를 쉬지않고 수행해야 하는 태생적인 목표가 있습니다. 그렇다보니~ 액션 이동이나 액션 반복을 통해 전체 루틴을 쉽고 빠르게 반복할 수 있도록 해줍니다. 아래 그림과 같이 프로세스 흐름도를 확인할 수 있습니다.

    na0VL6E.png

     

     

    권장되는 코딩 방식은 아니지만, 예외를 사용해서 goto를 구현할 수 있습니다. 강제로 예외를 발생시켜서 중첩된 제어 구조에서 빠져나오게 만들면 됩니다.

    class gotolabel(Exception): print("from the goto label")  # declare a label
    
    try:
        x=4
        if (x 〉0): raise gotolabel()  # goto the label named "gotolabel"
    except gotolabel:  # where to goto the label named "gotolabel"
        pass

     

    또 다른 방법은 break와 continue 명령문과 함께 루프를 사용해서 처리할 수 있습니다. continue문은 프로세스가 루프의 다음 반복으로 이동하여 무한으로 반복하게 합니다. 하지만 break는 루프문을 탈출하므로 반복이 종료됩니다. 여기서, 일정 횟수만큼 반복하려면 조건(if~else)으로 숫자를 증가시켜서 비교할 수 있습니다.

    prompt = "Roll the dice "
    
    while True:
        try:
            y = int(input(prompt))
        except ValueError:
            print ("Please enter a valid number")
            continue
    
        if y 〉6:
            prompt = "The dice has numbers 1-6 ! Input a number〈 6"
        elif y〈 1:
            prompt = "The dice has numbers 1-6 ! Input a number 〉1"
        else:
            print("Correct!")
            break

     

    대부분의 언어들이 goto 명령문을 사용할 수 있게 허용하고 있습니다. 하지만, 권장한다는건 아닙니다. 파이썬도 goto 명령문을 사용할 수 있게 허용해주고, 개발자가 알아서 판단하게 했으면 좋았을텐데요. 아쉽게도 약간 예외적인 방식으로 처리해야 하는 불편함이 있습니다. 그래도 뭐 크게 어려운 부분은 아니라서 큰 문제는 아닙니다. 무한으로 반복하는 while문 안에 실행해야 할 매크로 코드를 전부 넣어두면 되기 때문입니다. 이보다 더 좋은 방법이 있으면~ 댓글로 남겨주세요^^

     

    개발자에게 후원하기

    MGtdv7r.png

     

    추천, 구독, 홍보 꼭~ 부탁드립니다.

    여러분의 후원이 빠른 귀농을 가능하게 해줍니다~ 답답한 도시를 벗어나 귀농하고 싶은 개발자~

    감사합니다~

    • 네이버 공유하기
    • 페이스북 공유하기
    • 트위터 공유하기
    • 카카오스토리 공유하기
    추천0 비추천0

    댓글목록

    등록된 댓글이 없습니다.