ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Python 오류 해결 과정 (지역변수, 전역변수, return, def,if문, 변수초기화)
    python 2023. 2. 19. 23:23
    반응형

    파이썬으로 행맨 게임을 만드는 과정에서 오류가 발생하였다.

     

    • 상황정리

    1. 실행부분에 코드를 그대로 적으면 제대로 작동한다.

    2. def를 사용하여 사용자 지정 함수로 만들고 만든 함수로 실행하려고 하면 작동하지 않는다.


    • 오류 코드.
    #함수설정
    def cwWordCheck(newGuess,secretWord,cword,wword):
        if newGuess in secretWord:
            cword+=newGuess
        else:
            wword+=newGuess
     
    #실행문
     cwWordCheck(newGuess,secretWord,cword,wword)
     
    오류 코드
    • 함수 설명
    cwWordCheck 함수는 사용자가 입력한 단어(newGuess)가 정답 단어(secretWord)에 포함될 경우 cword에 누적하고 아닐경우 wword에 누적한다.
     
    • 1차 오류
    return문 없이 함수를 끝낼경우 cword와 wword에 누적이 되지 않는다.
    함수를 실행할 때 if문이 작동하고 if문이 끝나면 다시 cword,wword의 값은 함수 밖에서 설정한 값으로 초기화 된다.

     
    #함수설정
    def cwWordCheck(newGuess,secretWord,cword,wword):
        if newGuess in secretWord:
            cword+=newGuess
        else:
            wword+=newGuess
        return cword,wword 
     
    #실행문
     cwWordCheck(newGuess,secretWord,cword,wword)
     
    1차 오류 수정
    • 1차 오류 수정
    if문을 실행하면 조건에 의해 cword 또는 wword에 newGuess가 누적된다. 함수가 끝날 때 return cword,wword를 해주므로 누적된 cword, wword가 반영될 것이라 생각했다.

    • 2차 오류

    return cword,wword를 해도 실행문을 돌렸을 때 누적되어 반영되지 않았다.

    #함수설정
    def cwWordCheck(newGuess,secretWord,cword,wword):
        if newGuess in secretWord:
            cword+=newGuess
        else:
            wword+=newGuess
        return cword,wword 
     
    #실행문
     cword,wword=cwWordCheck(newGuess,secretWord,cword,wword)

     

    2차 오류 수정

     

    • 2차 오류 수정

    실행문에 cword,wword 변수의 값을 함수 실행의 값으로 다시 할당하였다.

    수정결과 실행문이 정상 작동하였음을 확인하였다.


    • 부족한 개념 정리

    전역변수와 지역변수의 차이에 대한 개념이 부족했다.

    실행문에 코드를 직접 적었을 때는 코드 안에서 누적된 cword,wword의 값이 같은 지역변수로서 작용한다.

    따라서 변수의 값이 다시 초기화 되는 오류 없이 누적이 되는 것이다.

    하지만 def함수로 선언하여 if문 안에서 누적시킨 변수 cword, wword는 각각 지역변수로서 함수가 실행되고나면 값이 초기화가 된다. 

    따라서 함수의 실행 후 return cword,wword를 통해 누적한 변수를 가져오고, 누적된 값이 함수 밖에서도 적용되도록 cword,wword에 다시 할당해주는 과정이 필요한 것이다.

     

     

    반응형

    댓글

Designed by Tistory.