Project : 숫자야구

2022. 8. 30. 21:32·Language/Python

규칙

- 컴퓨터가 0 ~ 9 사이의 서로 다른 숫자 3개 무작위로 뽑기

- 사용자는 컴퓨터가 뽑은 숫자의 값과 위치 맞추어야 함

- 컴퓨터는 사용자가 입력한 숫자 3개에 대해서 아래의 규칙대로 스트라이크(S)와 볼 (S)의 개수 알려줌

  1. 숫자의 값과 위치가 모두 일치하면 S
  2. 숫자의 값은 일치하지만 위치가 틀렸으면 B

기회 무제한. 몇 번의 시도 끝에 맞췄는지는 기록

3S 나오면 게임 종료

 

 

 

 

# 과제에 필요한 함수

generate_numbers

무작위로 0과 9 사이의 서로 다른 숫자 3개를 뽑고, 그 숫자들이 담긴 리스트를 리턴

 

take_guess

유저에게 숫자 3개를 반복적으로 입력받은 후, 유저가 입력한 숫자들을 리스트에 정리해서 리턴

 

유저가 범위에서 벗어나는 숫자를 입력하면, "범위를 벗어나는 숫자입니다. 다시 입력하세요." 메시지가 출력, 다시 입력 받기

유저가 이미 입력한 숫자를 다시 입력하면, "중복되는 숫자입니다. 다시 입력하세요." 메시지가 출력, 다시 입력 받기

take_guess 함수 : 결과적으로 리스트를 리턴해야 함

 

get_score

두 개의 파라미터 받음

  1. guesses → 유저가 뽑은 번호 3개가 담긴 리스트
  2. solution → 컴퓨터가 뽑은 정답 번호 3개가 담긴 리스트

두 리스트 비교해서 스트라이크 수와 볼 수를 계산, 리턴

 

 

 

from random import randint


def generate_numbers():
    numbers = []

    while len(numbers) < 3:
        num = randint(0, 9)
        if num not in numbers: # new_number가 numbers 리스트에 없는 경우에만 추가
            numbers.append(num)

    print("0과 9 사이의 서로 다른 숫자 3개를 랜덤한 순서로 뽑았습니다.\n")
    return numbers




    
def take_guess():
    print("숫자 3개를 하나씩 차례대로 입력하세요.")

    new_guess = [] # 유저가 입력한 숫자 3개 보관할 리스트
    while len(new_guess) < 3:
        new_num = int(input("{}번째 숫자를 입력하세요: ".format(len(new_guess) + 1)))

        if new_num < 0 or new_num > 9:
            print("범위를 벗어나는 숫자입니다. 다시 입력하세요.")
        elif new_num in new_guess:
            print("중복되는 숫자입니다. 다시 입력하세요.")
        else:
            new_guess.append(new_num)

    return new_guess
 
 
 
 

def get_score(guesses, solution): # 리스트 guesses, solution
    strike_count = 0
    ball_count = 0

	# 스트라이크, 볼 판단
    for i in range(3):
        if guesses[i] == solution[i]: # guesses의 인덱스 i에 있는 숫자와 solution의 인덱스 i에 있는 숫자가 동일하면 스트라이크
            strike_count += 1
        elif guesses[i] in solution: # gusses의 인덱스 i에 있는 숫자가 solution 안에 있으면 볼 (solution의 인덱스 i에 있으면 안됨)
            ball_count += 1

    return strike_count, ball_count
    



# 여기서부터 게임 시작!
ANSWER = generate_numbers() # 정답 리스트 변수 선언
tries = 0 # 시도 횟수 상수 선언 (0부터 시작)

while True:
    user_guess = take_guess() # 유저에게 번호 3개 입력
    s, b = get_score(user_guess, ANSWER) # 스트라이크, 볼 판단

    print("{}S {}B\n".format(s, b)) # *S *B 의 형태로 스트라이크 수와 볼 수 출력
    tries += 1 # 시도횟수 1 늘림

    if s == 3: # 만약 스트라이크 3개를 하면 반복문 종료
        break

print("축하합니다. {}번 만에 세 숫자의 값과 위치를 모두 맞추셨습니다.".format(tries))

 

cf) 게임 시작 부분의 while 문의 조건을 True 라고 한 이유 (s != 3 로 작성하지 않은 이유)

조건 부분을 s != 3 로 하기 위해서는 s 를 미리 정의해야 함. 번거롭고 지저분하기 때문

'Language > Python' 카테고리의 다른 글

Project : 로또 시뮬레이션  (0) 2022.08.30
파일 읽고 쓰기  (0) 2021.07.12
모듈 , 사용자 입력  (0) 2021.07.12
데이터  (0) 2021.07.09
사전  (0) 2021.07.08
'Language/Python' 카테고리의 다른 글
  • Project : 로또 시뮬레이션
  • 파일 읽고 쓰기
  • 모듈 , 사용자 입력
  • 데이터
p3chaeyeon
p3chaeyeon
p3chaeyeonp3chaeyeon 님의 블로그입니다.
p3chaeyeon
p3chaeyeon
p3chaeyeon
전체
오늘
어제
  • 분류 전체보기 (195)
    • Algorithm (2)
    • Language (23)
      • Python (12)
      • Java (11)
    • 프로젝트 및 활동 (1)
      • Capstone (1)
    • DB (12)
      • Oracle (9)
    • WEB (29)
      • HTML (2)
      • CSS (10)
      • JavaScript (4)
      • jQuery (7)
      • jQuery_Ajax (3)
      • JSP (0)
      • JSP_EL & JSTL (2)
    • Cloud (8)
      • NCP (8)
    • React (5)
      • ES6 (1)
    • Spring (6)
      • Spring Basic (3)
      • DI (Dependency Injection) (1)
      • AOP(Aspect Oriented Program.. (1)
      • Spring MVC (1)
    • SpringBoot (1)
      • SpringBoot Basic (1)
    • IDE, Tool (7)
      • Eclipse (3)
      • VSCode (3)
    • UNIX (5)
      • Git (3)
    • AI (3)
      • Deep Learing & Tensor Flow (3)
    • 활동 (84)
      • 인턴 (6)
      • 비트캠프 (77)
    • 자격증 (4)
      • 정보처리기사 (0)
      • SQLD (3)
      • AWS (1)
    • 메모 (3)
    • 환경 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

링크

공지사항

인기 글

태그

repo
span
@Data
remote
jquery
singleton
java
ul
DB
å
vscode
git repo
부트스트랩
boot strap
GIT
오부장 고마워요
싱글톤
definition tags
나는 이미 살짝 건든 후에 설정해서 약간 다를 수도
eclipse

최근 댓글

최근 글

hELLO· Designed By정상우.v4.6.1
p3chaeyeon
Project : 숫자야구
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.