파이썬_실전 프로젝트

숫자 맞추기 게임1 (업다운 게임)

랜덤으로 숫자를 생성한후에, 추측한 숫자를 입력하면, 큰지 작은지 판단해서 알려주고, 다시 추측하는 간단한 게임을 만들어 보겠습니다.

1. 숫자 입력받기
guess = input("숫자를 입력하세요 :")
print(guess)
숫자를 입력하세요 :34
34
 
2. 판단하기

테스트를 위해서, 정답은 임의의 숫자로 고정시켜 놓고, 정답인지 아닌지만 판단하도록 했습니다. 크기는 좀있다가 비교하도록 하죠.

number = 35

guess = input("숫자를 입력하세요 :")
if guess == number:
    print("정답입니다")
else:
    print("틀렸습니다")
숫자를 입력하세요 :35
틀렸습니다

정답을 입력했는데 틀렸다고 나옵니다. 뭐가 문제일까요?

print(type(number))
print(type(guess))
<class 'int'>
<class 'str'>

 원인은 input으로 숫자를 입력을 받으면, guess 변수에 문자열로 저장이 되는데,

미리 정해놓은 number 변수는 정수타입입니다. 그래서 다르다는 결과가 나오는 것입니다.

print(1 == '1')
False

 

그래서 둘중 하나를 타입을 바꿔줘야 합니다.

여기서는 입력받은 숫자를 정수타입으로 바꿔주기로 하죠. int() 함수사용.

number = 35

guess = int(input("숫자를 입력하세요 :"))  # int() 함수로 정수로 바꿔줬습니다
if guess == number:
    print("정답입니다")
else:
    print("틀렸습니다")
숫자를 입력하세요 :35
정답입니다

 

3. 반복하기

while 문으로 무한루프문을 만들고, 정답을 맞췄을때만 break 를 해주면 답을 맞출때까지 반복됩니다.

number = 35

while True:
    guess = int(input("숫자를 입력하세요 :"))
    if guess == number:
        print("정답입니다")
        break                 #정답이면, 루프문을 빠져 나갑니다.
    else:
        print("틀렸습니다")
숫자를 입력하세요 :32
틀렸습니다
숫자를 입력하세요 :34
틀렸습니다
숫자를 입력하세요 :36
틀렸습니다
숫자를 입력하세요 :35
정답입니다

 

4. 크기 판단해서, up,down 알려주기

if 문 아래 elif문을 추가해서, 입력값(guess)값이 큰지 판단하고, else 부분은 나머지 작을때의 메세지를 입력해줍니다.

number = 35

while True:
    guess = int(input('숫자를 입력하세요 :'))
    if guess == number:
        print('정답입니다')
        break
    elif guess > number:              # 정답이 아니면, 다시 큰지 작은지를 판단합니다.
        print('더 작은 수 입니다')
    else:
        print('더 큰 수 입니다.')
숫자를 입력하세요 :34
더 큰 수 입니다.
숫자를 입력하세요 :36
더 작은 수 입니다
숫자를 입력하세요 :35
정답입니다

 

5. 정답 랜덤으로 생성하기.

 random.randint(1,999)는 1부터 999사이의 난수를 생성하라는 명령입니다. ( random 이라는 모듈을 import 해줘야 합니다. ) 확인을 위해서 생성된 난수는 출력을 해놓고, 테스트를 진행하겠습니다.

import random
number = random.randint(1,999)       #랜덤한 숫자 생성
print(number)

while True:
    guess = int(input('숫자를 입력하세요 :'))
    if guess == number:
        print('정답입니다')
        break
    elif guess > number:
        print('더 작은 수 입니다')
    else:
        print('더 큰 수 입니다.')
630
숫자를 입력하세요 :629
더 큰 수 입니다.
숫자를 입력하세요 :631
더 작은 수 입니다
숫자를 입력하세요 :630
정답입니다

 

6. 잘못된 입력 처리.

1-999 사이의 숫자를 입력받아야 하는데, 사용자가 실수로 영문자나 한글을 입력할수도 있습니다. 그렇게 되면, 현재 코드는 오류가 나면서 프로그램이 비정상적으로 멈추게 됩니다. 이때는 예외처리를 해줘서, 사용자에게 적당한 메세지를 보내주고, 제대로된 입력을 다시 받을수 있게 할수 있습니다.

import random
number = random.randint(1,999)
print(number)

while True: 
    try:                                 #정상적인 코드
        guess = int(input('숫자를 입력하세요 :'))
        if guess == number:
            print('정답입니다')
            break
        elif guess > number:
            print('더 작은 수 입니다')
        else:
            print('더 큰 수 입니다.')
    except:                              # 오류가 났을때 실행할 코드
        print('1-999중의 숫자를 입력하세요')
627
숫자를 입력하세요 :가나다라
1-999중의 숫자를 입력하세요
숫자를 입력하세요 :abcdefg
1-999중의 숫자를 입력하세요
숫자를 입력하세요 :628
더 작은 수 입니다
숫자를 입력하세요 :626
더 큰 수 입니다.
숫자를 입력하세요 :627
정답입니다

앞에서 작성했던 while 안의 정상적인 모든 코드를 try 라는 구문안에 한번 더 넣어줍니다. 그렇게 되면, 이상이 없으면, 프로그램은 try: 구문 내의 코드만 실행합니다. 그러다가, 오류가 생기게 되면, except 구문으로 가서, print 문으로 적당한 메세지를 출력하고, 루프문의 앞부분으로 다시 돌아가게 됩니다.

댓글

댓글 본문
  1. happymario
    이상하네요.

    전 1~999중 숫자를 입력해도 계속 '1-999중의 숫자를 입력하세요'가 나오네요
    exception을 찍으니 아래와 같이 나옵니다.
    107
    숫자를 입력해주세요:10
    '>' not supported between instances of 'str' and 'int'
    1~999중의 숫자를 입력해주세요.
  2. 수련생
    감사합니다!
  3. 가니안
    넘 유익해요!
  4. 초보
    헤매고 있었는데 좋은 설명 감사합니다!
  5. DaeKyung Kim
    재미있어요.
  6. 좋아요!!
  7. 최윤진
    사람들 왜 댓글이 없지? 너무 좋은 자료인데 ㅎㅎ