본문 바로가기
지식을 알아가는 시간 지식을 알아가는 시간

파이썬으로 숫자 맞추기 게임 만들기: random과 while 반복문 연습하기

읽는 시간 약 7분

지난 글에서 계산기를 만들면서 입력받기, 조건문, 예외 처리를 연습했어요. 이번에는 그 내용을 활용해서 파이썬 숫자 맞추기 게임 만들기에 도전해 볼게요. 컴퓨터가 1부터 100 사이의 숫자 하나를 몰래 정하면, 우리가 힌트를 보면서 그 숫자를 맞히는 게임이에요. 작은 게임이지만 random 모듈, while 반복문, 조건문, 예외 처리가 전부 들어가 있어서 복습하기에 딱 좋아요.

이번 글에서 만들 것

  • 컴퓨터가 1부터 100 사이의 숫자를 무작위로 정하는 게임
  • 입력한 숫자가 정답보다 크면 DOWN, 작으면 UP이라고 알려 주는 게임
  • 정답을 맞히면 몇 번 만에 맞혔는지 알려 주는 게임
  • 숫자가 아닌 걸 넣어도 멈추지 않는 게임

1단계: 컴퓨터가 숫자 정하기

무작위 숫자를 만들려면 파이썬에 들어 있는 random 모듈을 불러와야 해요. 따로 설치할 필요는 없어요.

import random

answer = random.randint(1, 100)
tries = 0

random.randint(1, 100)은 1과 100을 포함해서 그 사이의 정수 하나를 무작위로 골라 줘요. tries는 몇 번 시도했는지 세기 위한 변수예요. 처음에는 0으로 시작해요.

2단계: 반복해서 입력받기

한 번 입력하고 끝나면 게임이 안 되니까, 맞힐 때까지 계속 반복하도록 while True를 써요. 종료하고 싶을 때를 위해 q를 입력하면 빠져나오게 만들어요.

print("1부터 100 사이의 숫자를 맞춰 보세요!")

while True:
    guess = input("숫자를 입력하세요 (종료하려면 q): ")
    if guess == "q":
        print(f"게임을 종료합니다. 정답은 {answer}였어요.")
        break

3단계: 잘못된 입력 막기

input()은 항상 문자열을 돌려주기 때문에 int()로 숫자로 바꿔야 해요. 이때 글자를 입력하면 ValueError가 나니까 try-except로 막아요. 범위를 벗어난 숫자도 걸러 줘요.

    try:
        number = int(guess)
    except ValueError:
        print("숫자만 입력해 주세요.")
        continue

    if number < 1 or number > 100:
        print("1부터 100 사이의 숫자를 입력해 주세요.")
        continue

continue는 아래 코드를 건너뛰고 반복문의 맨 처음으로 돌아가라는 뜻이에요. 잘못 입력했을 때는 시도 횟수에 세지 않고 다시 입력받게 만든 거예요.

4단계: 정답인지 판단하기

이제 입력한 숫자가 정답과 같은지, 큰지, 작은지를 비교해요.

    tries += 1

    if number < answer:
        print("더 큰 숫자예요! UP")
    elif number > answer:
        print("더 작은 숫자예요! DOWN")
    else:
        print(f"정답이에요! {tries}번 만에 맞췄어요.")
        break

tries += 1은 tries = tries + 1과 같은 뜻이에요. 정답을 맞히면 break로 반복문을 빠져나와서 게임이 끝나요.

전체 코드

import random

answer = random.randint(1, 100)
tries = 0

print("1부터 100 사이의 숫자를 맞춰 보세요!")

while True:
    guess = input("숫자를 입력하세요 (종료하려면 q): ")
    if guess == "q":
        print(f"게임을 종료합니다. 정답은 {answer}였어요.")
        break

    try:
        number = int(guess)
    except ValueError:
        print("숫자만 입력해 주세요.")
        continue

    if number < 1 or number > 100:
        print("1부터 100 사이의 숫자를 입력해 주세요.")
        continue

    tries += 1

    if number < answer:
        print("더 큰 숫자예요! UP")
    elif number > answer:
        print("더 작은 숫자예요! DOWN")
    else:
        print(f"정답이에요! {tries}번 만에 맞췄어요.")
        break

실행 결과 예시

먼저 정답이 42라고 가정한 예시예요. 그 아래 사진은 제가 맥 터미널에서 직접 실행한 화면이고, 이때 정답은 79였어요.

1부터 100 사이의 숫자를 맞춰 보세요!
숫자를 입력하세요 (종료하려면 q): 50
더 작은 숫자예요! DOWN
숫자를 입력하세요 (종료하려면 q): abc
숫자만 입력해 주세요.
숫자를 입력하세요 (종료하려면 q): 150
1부터 100 사이의 숫자를 입력해 주세요.
숫자를 입력하세요 (종료하려면 q): 30
더 큰 숫자예요! UP
숫자를 입력하세요 (종료하려면 q): 42
정답이에요! 3번 만에 맞췄어요.
파이썬 숫자 맞추기 게임을 터미널에서 실행한 결과 화면

자주 하는 실수

  • 들여쓰기가 맞지 않을 때: while 안에 들어가는 코드는 모두 같은 칸만큼 안쪽으로 들어가야 해요.
  • int() 없이 비교할 때: input()으로 받은 값은 문자열이라서 숫자와 크기를 비교하면 오류가 나요. 꼭 int()로 바꾼 값을 비교해야 해요.
  • 정답이 매번 바뀌어서 테스트가 어려울 때: 연습할 때는 answer = 42처럼 숫자를 직접 적어 두고 실행하면 확인하기 편해요. 다 만들고 나서 random 줄로 되돌리면 돼요.

더 해 볼 만한 것

  • 시도 횟수를 10번으로 제한하기
  • 게임이 끝나면 “한 번 더 할까요?” 물어보고 다시 시작하기
  • 숫자 범위를 1부터 1000까지로 늘려 보기

마무리

이 게임을 맥 터미널에서 직접 실행해 봤어요. 먼저 일부러 abc와 150을 넣어 봤는데, 둘 다 멈추지 않고 안내 문구만 나왔고 시도 횟수에도 세어지지 않았어요. 그다음 50을 넣었더니 UP이 나와서 75, 88, 81, 78, 79 순서로 범위를 반씩 줄여 갔고, 6번 만에 정답을 맞혔어요.

이렇게 숫자를 반으로 나누듯이 좁혀 가면 1부터 100 사이의 숫자도 몇 번 안에 찾을 수 있다는 걸 직접 해 보면서 알게 됐어요. 코드를 읽을 때보다 직접 게임을 해 볼 때 while 반복문과 continue가 어떻게 움직이는지 훨씬 잘 보이더라고요.

여러분도 코드를 복사해서 실행해 보고, 몇 번 만에 맞히는지 도전해 보세요. 다음 글에서는 웹 페이지를 꾸미는 CSS를 시작해 볼게요.

여백
함께 보면 좋은 글

댓글 0

첫 댓글을 남겨보세요.

광고 차단 알림

광고 클릭 제한을 초과하여 광고가 차단되었습니다.

단시간에 반복적인 광고 클릭은 시스템에 의해 감지되며, IP가 수집되어 사이트 관리자가 확인 가능합니다.