이번에는 이제까지 다루었던 내용을 바탕으로 간단한 프로그램을 하나 만들어 보도록 하겠습니다. 스무고개라는 퍼즐 문 제를 해보셨는 지 모르겠지만 그것과는 약간 다르지만 비슷한 개념으로 1부터 20까지의 숫자중에서 하나를 제시하면, 그 숫자가 정답보다 큰 숫자인지, 아니면 작은 숫자인지를 알려주고 총 6번의 제시를 통해서 정답 숫자를 맞추어 나가는 프로 그램입니다.
#숫자 게임을 추측하는 프로그램 import random secretNumber = random.randint(1, 20) print('1부터 20까지의 숫 자가 있습니다.') # 플레이어에게 6번의 추측을 요청한다. for guessTaken in range(1, 7): print('예상하는 숫자를 입력 하세요.') guess = int(input()) if guess < secretNumber: print('예상한 숫자가 너무 작습니다.') elif guess > secretNumber: print('예상한 숫자가 너무 큽니다.') else: break if guess == secretNumber: print('예상한 숫자 ' + str(guess) + '는 정답입니다.') else: print('아니오. 내가 생각하고 있던 번호는 ' + str(secretNumber) + '입니다.') 위의 내용이 스무고개 프로그램의 전체 코드입니다.
그러면 프로그램이 어떻게 이루어졌는 지 하나씩 알아보도록 하겠습니다.
1. import random import 는 파이썬에서 외부 라이브러리를 가져올때 사용되는 명령문입니다. import 로 가져올 수 있 는 파이썬 라이브러리는 이외에도 많은 라이브러리가 있습니다. 하지만 지금은 여기에서 사용된 random 함수만 설명드 리도록 하겠습니다.
random 함수는 난수(규칙이 없는 임의의 수)를 발생시켜주는 함수입니다. random 함수를 이용해서 정수의 범위를 지정해서 난수를 발생시킬때는 randint 와 같이 쓰입니다.
random.randint(1, 10) 이라고 하면 1에서 10 사이에 임의의 정수를 생성합니다. 만약 1부터 45까지의 숫자중에서 임 의의 숫자를 생성하려면 random.randint(1, 45)를 입력합니다.
2. secretNumber = random.randint(1, 20) 을 이용해서 1부터 20의 숫자 중에서 임의의 숫자를 생성한 다음 그 숫자 를 secretNumber 에 저장해 놓습니다. 이 숫자가 컴퓨터가 난수로 발생시킨 임의의 숫자입니다.
3. for guessTaken in range(1, 7): for 반복문을 이용하여 사용자가 secretNumber 와 일치하는 숫자를 제시할 때까지 6번의 순환을 하게 됩니다. range(1, 7) 을 통해서 6번의 반복을 하게 되고, 중간에 guess 와 secretNumber 가 일치하 게 된다면 break 문을 통해 for 순환문을 빠져 나오게 됩니다.
4. guess = int(input()) 사용자가 입력한 예상 숫자를 guess 변수에 저장해 놓는 과정입니다. 이 과정에서 input() 함수 로 입력받는 숫자는 숫자로 입력되더라도 문자열로 인식되기 때문에 int 함수를 이용하여 숫자로 변환하는 과정을 거칩니다.
5. if guess < secretNumber: 사용자가 입력한 숫자(guess)가 컴퓨터가 발생시킨 난수(secretNumber) 보다 작다면 (예 를 들어 컴퓨터가 발생시킨 난수는 13이고 사용자가 입력한 숫자는 10) 예상한 숫자가 너무 작습니다를 출력하고 바로 다 시 3번의 for 문으로 돌아가게 됩니다. for 문은 break 를 만나지 않는 이상 무조건 설정된 숫자만큼의 반복문을 진행한다 는 점에 유의하시기 바랍니다.
6. elif guess > secretNumber: 반대로 사용자가 숫자(guess)가 컴퓨터가 발생시킨 난수(secretNumber) 보다 크다면 (예를 들어 컴퓨터가 발생시킨 난수는 7이고 사용자가 입력한 숫자는 10) 이 코드가 실행되게 됩니다. 이 경우에는 예상한 숫자가 너무 큽니다를 출력하고 3번의 for 문으로 돌아가게 됩니다. 역시 break 문을 만나지 않는 이상 6번의 반복문을 진 행하게 됩니다.
7. else: 사용자가 입력한 숫자가 컴퓨터가 발생시킨 난수보다 크지도 작지도 않을 경우, 결국 정확히 일치하는 경우 이 코 드가 실행되게 됩니다. 여기에서 for 문은 else 이후의 break: 를 통해서 사용자가 총 6번의 입력을 하기 전에 사용자가 일 치하는 숫자를 제시했기 때문에 for 문을 빠져 나오게 됩니다.
8. if guess == secretNumber: 사용자가 입력한 숫자가 컴퓨터가 발생시킨 난수와 일치할 경우, 이 경우는 총 6번의 기 회 중에서 중간에 맞추는 경우도 있을 수 있고, 6번만에 발생할 수도 있습니다. print 출력문을 통해서 사용자가 입력한 숫 자가 정답이라는 것을 알려주고 프로그램을 종료합니다. str 함수는 숫자를 문자열로 바꾸어주는 함수입니다. 문자와 숫자 를 그냥 더할 경우 오류가 나게 됩니다.
9. print('아니오. 내가 생각하고 있던 번호는 ' + str(secretNumber) + '입니다.') 이 코드는 총 6번의 숫자 입력 기회를 썼는데도 secretNumber 를 맞추지 못했을 경우 나타나는 출력문입니다. 역시 str 함수를 이용하여 숫자를 문자열로 변환 시켜 줍니다.
실제 프로그램을 실행했을 경우 쉘모드에서는 어떻게 진행되는 지 알아보도록 하겠습니다.
1부터 20까지의 숫자가 있습니다. 예상하는 숫자를 입력하세요. 11 예상한 숫자가 너무 큽니다. 예상하는 숫자를 입력하 세요. 7 예상한 숫자가 너무 큽니다. 예상하는 숫자를 입력하세요. 5 예상한 숫자가 너무 작습니다. 예상하는 숫자를 입력 하세요. 6 예상한 숫자 6는 정답입니다. >>>
편집기 모드에서 코드를 저장하고 F5 키를 눌러 실행시켰을 경우 쉘모드에서는 위와 같은 진행을 하게 됩니다. 위에서는 4번만에 숫자를 맞추었기 때문에 중간에 프로그램이 종료되었지만 총 6번의 실행에도 숫자를 맞추지 못했다면 아니오. 내 가 생각하고 있던 번호는 3 입니다. 와 같은 메시지가 나타날 수도 있습니다.
이상으로 간단한(?) 스무고개 프로그램을 만들어 보았습니다.
'Python' 카테고리의 다른 글
파이썬(Python) 리스트 02 (1) | 2024.11.30 |
---|---|
파이썬(Python) 리스트 01 (0) | 2024.11.30 |
파이썬(Python) 쉬어가는 페이지 (1) | 2024.11.27 |
파이썬 흐름제어 02 (0) | 2024.11.26 |
파이썬 흐름제어 01 (1) | 2024.11.25 |