본문 바로가기
오픈소스를 위한 기초 상식

파이썬 기초 실습_ 숫자 맞추기 게임

by 지나가는 프로도 2025. 1. 18.

실습코드

더보기

import random

def number_guess_game():
    # 1부터 100 사이의 랜덤 숫자 생성
    target_number = random.randint(1, 100)
    attempts = 0
    max_attempts = 10
    
    print("1부터 100 사이의 숫자를 맞춰보세요!")
    print(f"기회는 총 {max_attempts}번 있습니다.")
    
    while attempts < max_attempts:
        # 남은 기회 표시
        print(f"\n남은 기회: {max_attempts - attempts}번")
        
        # 사용자 입력 받기
        try:
            guess = int(input("숫자를 입력하세요: "))
            
            # 입력값 범위 확인
            if guess < 1 or guess > 100:
                print("1부터 100 사이의 숫자를 입력해주세요!")
                continue
                
        except ValueError:
            print("올바른 숫자를 입력해주세요!")
            continue
        
        # 시도 횟수 증가
        attempts += 1
        
        # 정답 비교
        if guess == target_number:
            print(f"\n축하합니다! {attempts}번 만에 숫자를 맞추셨습니다!")
            print(f"정답은 {target_number}였습니다!")
            break
        elif guess < target_number:
            print("Up! 더 큰 숫자를 입력해보세요.")
        else:
            print("Down! 더 작은 숫자를 입력해보세요.")
            
        # 마지막 기회를 사용한 경우
        if attempts == max_attempts:
            print(f"\n게임 오버! 모든 기회를 사용하셨습니다.")
            print(f"정답은 {target_number}였습니다!")
    
    # 게임 재시작 여부 확인
    retry = input("\n다시 도전하시겠습니까? (y/n): ")
    if retry.lower() == 'y':
        number_guess_game()
    else:
        print("게임을 종료합니다. 감사합니다!")

if __name__ == "__main__":
    number_guess_game()

추가로 이번에는 random 모듈을 사용하여 무작위 숫자를 생성했습니다. 계산기 예제에서 사용한 것과 같은 기본 개념들을 활용하되, 게임이라는 다른 맥락에서 응용해보았습니다.

게임의 규칙은 다음과 같습니다:

  1. 1부터 100 사이의 무작위 숫자를 맞추는 게임입니다.
  2. 총 10번의 기회가 주어집니다.
  3. 각 시도마다 입력한 숫자가 정답보다 큰지 작은지 알려줍니다.
  4. 게임이 끝나면 다시 시작할 수 있습니다.

 

어떤 지식이 적용된지 알아보자

  • 변수 사용
  • target_number: 맞춰야 할 목표 숫자
  • attempts: 시도 횟수
  • guess: 사용자가 입력한 숫자
  • max_attempts: 최대 시도 가능 횟수

 

  • 조건문(if-elif-else)
  • 입력값이 범위 내에 있는지 확인
  • 사용자의 추측이 정답보다 큰지 작은지 확인
  • 게임 재시작 여부 확인

 

  • 반복문(while)
  • 최대 시도 횟수에 도달할 때까지 게임 진행
  • continue를 사용하여 잘못된 입력 처리

 

  • 예외 처리(try-except)
  • 사용자가 숫자가 아닌 값을 입력했을 때 처리

 

각 코드에 적용된 개념을 한번 살펴보자

  • 변수(Variables)
target_number = random.randint(1, 100) # 정수형 변수로 목표 숫자 저장 attempts = 0 # 정수형 변수로 시도 횟수 저장 guess = int(input("숫자를 입력하세요: ")) # 사용자 입력을 정수형 변수로 저장

계산기처럼 여기서도 변수를 사용해 데이터를 저장했습니다. target_number에는 맞춰야 할 숫자가, attempts에는 시도 횟수가, guess에는 사용자의 입력값이 저장됩니다.

  • 데이터 타입(Data Types)
target_number = random.randint(1, 100) # 정수(int) 타입 retry = input() # 문자열(str) 타입 guess = int(input()) # 문자열을 정수로 변환

계산기에서는 실수(float)를 주로 썼지만, 이번에는 정수(int)를 주로 사용했습니다. 게임 재시작 여부는 문자열로 입력받습니다.

  • 조건문(if-elif-else)
if guess == target_number: print("축하합니다!") elif guess < target_number: print("Up!") else: print("Down!")

계산기에서 연산 선택할 때처럼, 여기서는 사용자가 입력한 숫자와 정답을 비교하는데 조건문을 사용했습니다.

  • 반복문(while)
while attempts < max_attempts: # 게임 진행 attempts += 1

계산기처럼 while문을 사용했지만, 이번에는 'True' 대신 attempts가 max_attempts보다 작을 때만 반복하도록 조건을 넣었습니다.

  • 예외 처리(try-except)
try: guess = int(input("숫자를 입력하세요: ")) except ValueError: print("올바른 숫자를 입력해주세요!")

계산기와 같은 방식으로, 사용자가 숫자가 아닌 값을 입력했을 때를 대비한 예외 처리를 했습니다.

이렇게 계산기에서 사용했던 동일한 개념들을 다른 방식으로 조합해서 새로운 프로그램을 만들었습니다. 예를 들어:

  • 계산기는 사칙연산을 선택하는 조건문이었다면, 게임은 숫자의 크기를 비교하는 조건문을 사용
  • 계산기는 종료를 선택할 때까지 무한 반복이었다면, 게임은 정해진 횟수만큼만 반복
  • 두 프로그램 모두 잘못된 입력을 방지하기 위해 비슷한 예외 처리 사용