• 티스토리 홈
  • 프로필사진
    소쩍소쩍이
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
소쩍소쩍이
  • 프로필사진
    소쩍소쩍이
    • 분류 전체보기 (51) N
      • 파이썬 (18)
        • 문제 및 예제 (8)
      • PySide6 (15) N
        • Signal & Slot (6)
        • Layout (8)
        • Model & View (1) N
      • 리눅스 (5)
      • 아두이노 (0)
      • 일지 (11)
  • GitHub
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    # Home
    # 공지사항
    #
    # 태그
    # 검색결과
    # 방명록
    • 간단한 프로그램 만들기 7 (야구게임)
      2026년 04월 17일
      • 소쩍소쩍이
      • 작성자
      • 2026.04.17.:38

      숫자 야구 게임 만들기

      입력값은 예외가 없도록 처리해야 합니다.
      게임 시작 시 컴퓨터는 0~9 사이 숫자 3개를 중복 없이 생성합니다.
      사용자는 매 라운드마다 숫자 3개를 입력합니다.
      숫자와 위치가 모두 맞으면 Strike
      숫자만 맞으면 Ball
      모두 틀리면 Out
      총 9라운드 안에 정답을 맞추는 방식입니다.

      이번에는 간단한 숫자 야구 게임을 만들어봤습니다.
      랜덤 숫자를 만들고, 입력값을 받아서 결과를 비교하는 구조입니다.


      필요한 모듈

      랜덤 숫자를 만들기 위해 random 모듈 하나만 사용합니다.

      import random

      랜덤 숫자 만들기

      게임에서 사용할 정답 숫자를 만드는 부분입니다.
      0~9 사이 숫자를 중복 없이 3개 뽑아서 리스트로 저장합니다.

      # 랜덤 숫자 받기
      def generate_num():
          numb = []
          i = 0
          new_num = 0
          while i < 3:
              new_num = random.randint(0, 9)
              if new_num not in numb:
                  numb.append(new_num)
                  i += 1
          print("게임이 시작되었습니다. 참가자는 숫자 3개를 맞춰 주세요")
          return numb

      숫자 입력 받기

      사용자가 숫자를 입력하는 부분입니다.
      빈칸, 범위 초과, 중복 입력은 다시 입력하도록 처리했습니다.

      # 숫자 입력
      def take_guess():
          print("숫자 3개를 입력하세요.")
          i = 0
          new_guess = []
          while i < 3:
              gue_num = input(f"{i+1}번째 숫자를 입력하세요: ")
              if gue_num.strip() == "":
                print("빈칸입니다. 다시 입력하세요.")
                continue
              gue_num = int(gue_num)
      
              if gue_num > 9:
                  print("범위를 벗어났습니다. 다시 입력하세요.")
                  continue
              elif gue_num in new_guess:
                  print("중복입니다. 다시 입력하세요. ")
                  continue
              else:
                  new_guess.append(gue_num)
                  i += 1
          return new_guess

      결과 판정

      입력한 숫자와 정답을 비교해서 Strike와 Ball을 계산합니다.
      위치까지 같으면 Strike, 숫자만 맞으면 Ball입니다.

      # 스코어
      def get_score(guess, sol):
          strike_count = 0
          ball_count = 0
          i = 0
      
          while i < len(guess):
              if guess[i] == sol[i]:
                  strike_count += 1
                  i += 1
              elif guess[i] in sol:
                  ball_count += 1
                  i += 1
              else:
                i += 1
      
          return strike_count, ball_count

      게임 실행

      이제 실제로 게임을 돌리는 부분입니다.
      라운드를 반복하면서 결과를 출력하고, 3 Strike가 나오면 종료됩니다.

      # 실행
      def game_start():
        anser = generate_num()
        tries = 0
      
        while True:
          tries += 1
          print(f"\n[ {tries}번째  ]")
          gut = take_guess()
          strike, ball = get_score(gut, anser)
      
          if strike == 0 and ball == 0:
              print("OUT")
          else:
              print(f"{strike}Strike,  {ball}Ball")
          if strike == 3:
              print("-----------------이겼습니다!!----------------------")
              break

       

      코드 전문

      import random
      
      # 랜덤 숫자 받기
      def generate_num():
          numb = []
          i = 0
          new_num = 0
          while i < 3:
              new_num = random.randint(0, 9)
              if new_num not in numb:
                  numb.append(new_num)
                  i += 1
          print("게임이 시작되었습니다. 참가자는 숫자 3개를 맞춰 주세요")
          return numb
      
      # 숫자 입력
      def take_guess():
          print("숫자 3개를 입력하세요.")
          i = 0
          new_guess = []
          while i < 3:
              gue_num = input(f"{i+1}번째 숫자를 입력하세요: ")
              if gue_num.strip() == "":
                print("빈칸입니다. 다시 입력하세요.")
                continue
              gue_num = int(gue_num)
      
              if gue_num > 9:
                  print("범위를 벗어났습니다. 다시 입력하세요.")
                  continue
              elif gue_num in new_guess:
                  print("중복입니다. 다시 입력하세요. ")
                  continue
              else:
                  new_guess.append(gue_num)
                  i += 1
          return new_guess
      
      # 스코어
      def get_score(guess, sol):
          strike_count = 0
          ball_count = 0
          i = 0
      
          while i < len(guess):
              if guess[i] == sol[i]:
                  strike_count += 1
                  i += 1
              elif guess[i] in sol:
                  ball_count += 1
                  i += 1
              else:
                i += 1
      
          return strike_count, ball_count
      
      # 실행
      def game_start():
        anser = generate_num()
        tries = 0
      
        while True:
          tries += 1
          print(f"\n[ {tries}번째  ]")
          gut = take_guess()
          strike, ball = get_score(gut, anser)
      
          if strike == 0 and ball == 0:
              print("OUT")
          else:
              print(f"{strike}Strike,  {ball}Ball")
          if strike == 3:
              print("-----------------이겼습니다!!----------------------")
              break
      
      game_start()

      순서도

      '파이썬 > 문제 및 예제' 카테고리의 다른 글

      간단한 프로그램 만들기 8 (로또 키오스크 만들기)  (0) 2026.04.17
      간단한 프로그램 만들기 1 (계산기)  (0) 2026.04.16
      함수 예제 및 문제  (0) 2026.04.13
      리스트 예제 및 문제  (0) 2026.04.10
      반복구조 예제 및 문제  (0) 2026.04.09
      다음글
      다음 글이 없습니다.
      이전글
      이전 글이 없습니다.
      댓글
    조회된 결과가 없습니다.
    스킨 업데이트 안내
    현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
    ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
    목차
    표시할 목차가 없습니다.
      • 안녕하세요
      • 감사해요
      • 잘있어요

      티스토리툴바