사용법은 간단하지만 여러 조건들이 붙으며 구조를 잡는데 꽤나 애를 먹었다. 가장 어려웠던 부분은 게임을 한 차례 진행 후 새로 시작하는 것과 그 기록을 남기는 것.
1.
Up & Down 게임
Up&Down 게임 완성된 코드
우선 게임 내용은 쉽게 만들었다. 하지만 문제는
1.
랜덤으로 나온 숫자가 코드를 실행할때마다 새롭게 생성이 되어 게임 진행이 안됨
2.
게임을 마치고 다시 시작하는지 혹은 마치는지 + 기록 표시
1번의 문제는 구글링 하다보니 구조적으로 해결이 되었다. x는 컴퓨터가 만든 랜덤 숫자이고 n은 사용자가 입력한 숫자이다. (사실 input을 쓰면 터미널에서 진행할 수 있는지 모르고 처음엔 VS code에서 index.html을 만들었다... request함수 쓰려고...)
x가 생성되고 n을 입력하며 힌트를 얻어 맞추면 끝나는데 n을 입력할때마다 x의 값도 바뀌니 게임 진행이 안되었다. 확률을 줄여나가는 게임인데 계속 1/100 확률 게임을 만들어 버린 것.
해결 방법은 x는 외부 while 반복문에 넣고 n은 내부 while 반복문에 위치해서 n = x 조건이 성립 될때까지 n의 변수를 입력하는 것이었다.
그리고 게임이 끝나면 다시 시작할지 그대로 종료할지 되묻는데 이때는 break와 exit()를 사용했다.
while 반복문에서 break, continue 그리고 빈칸
break는 while 반복문이 조건을 성립하면 멈춘다. 위 코드의 경우 게임 재시작 의사를 물을 때 y를 누르면 내부 while 반복문이 종료되고 다시 외부 while 반복문이 시작되며 랜덤 숫자가 주어지고 게임이 진행된다.
continue는 break과 달리 while 반복문 조건이 성립되면 건너뛰고 이어뛰는 함수다. (예외 처리에 사용 가능할지도?)
빈칸은 조건 성립이 안되었기에 처음부터 다시 도는 것이다. y or n을 고르는 단계에서 a,e,d같은 문자열이 입력될 경우 print("다시 입력해주세요.")라고 하면 y or n 선택 단계로 돌아간다.
n을 누르면 프로그램을 종료하는데 나는 exit()를 사용했다. 구글링하다 본거 넣었나보다. 사실 exit()는 강제 종료라서 좋은 코드는 아닐거라고 생각한다. (일단 돌아가니 놔뒀다...)
list로 시도 횟수 구하기
'기록'이라는 키워드 때문에 나는 list로 시도 횟수를 구했다. (아마 a +=1를 사용하면 더 간단했을지도...)
빈 리스트를 하나 만들고 n이 입력될 때마다 리스트를 하나씩 추가 시켰다. 그리고 마지막에 len(a_list)로 총 횟수를 구했다.
2.
가위바위보 게임
가위바위보 게임 완성된 코드
2번 문제의 내용은 1번과 상당 부분 비슷하지만 조건이 조금 더 까다로웠다.
1.
가위바위보로 승부를 내야하고 매번 게임을 새로 시작한다.
2.
게임의 기록을 마지막에 [승: 패: 무: ]로 표시한다.
우선, 외부 while 반복문에서 3개의 옵션을 리스트로 만들고 유저가 사용하는 것과 컴퓨터가 랜덤 추출하는 코드를 작성했다. 그리고 경우의 수(승패무)를 if 조건문으로 만든 후 게임이 끝나면 다시 내부 while 반복문으로 게임 재도전 의사를를 묻는 단계를 만들었다.
구조적으로 변수가 어디에 위치하느냐에 따라 실행되는 게 달라져서 몇 번의 시행착오가 있었다. 특히 이번에는 게임 기록이 제대로 작동되지 않았다. 1번 문제처럼 리스트를 만들고 시도했는데 잘 되지 않았다. 그냥 포기하고 a =+1로 잘되더라... (진작 할 걸) 하지만 이것도 변수가 while문 밖에 위치해야 기록이 초기화 되지 않았다. break 때문에 그런 것 같다.
앞서 이야기한 것처럼, break은 반복을 종료한다. 그리고 상위 반복문을 다시 돌게 하는데 이때 변수가 같은 구조에 있으면 이것도 초기화 된다. 그래서 꼭! 변수의 위치를 신경써야 하는 것 같다.
Subscribe to 'kyugntae-ai'
Subscribe to my site to be the first to receive notifications and emails about the latest updates, including new posts.
Join Slashpage and subscribe to 'kyugntae-ai'!