본문 바로가기
Python

(Python) 숫자 야구 만들기

by re-hwi 2022. 5. 6.

오늘은 강의시간이 비어 남는 시간에 숫자야구를 만들어보았다. 이런 프로그램을 혼자 처음 만들어봐서 완성했을때 뿌듯함도 컸고 나름 재미있었다.
 
다음에는 def와 class를 이용해서 코드를 조금 더 보기 쉽게 보완할 생각이다.
 

# 1 

import random

base_ball = []

strike = 0
ball = 0

# 첫번째 게임이 끝난 후에도 게임이 지속되게 반복
running = True
while running:					
    for i in range(4):
        a = (random.randint(1,9))		# 랜덤수를 a에 저장 후 중복이 아니라면 base_ball 리스트에 저장
        while a in base_ball:
            a = random.randint(1,9)
        base_ball.append(a)

    base_ball = list(map(int,base_ball))

    ans_list = []

    while ans_list != base_ball:		# 수가 같지않다면 (정답이 아니라면) 맞을 때 까지 실행
        count = 1

        ans = input('4자리 수를 입력하세요 :')
        ans_list = list(ans)
        ans_list = list(map(int,ans_list))

        if ans_list[0] in base_ball:
            if ans_list[0] == base_ball[0]:
                strike += 1				# 스트라이크와 볼의 개수를 증가시켜 변수에 저장
            else :
                ball += 1

        if ans_list[1] in base_ball:
            if ans_list[1] == base_ball[1]:
                strike += 1
            else :
                ball += 1

        if ans_list[2] in base_ball:
            if ans_list[2] == base_ball[2]:
                strike += 1
            else :
                ball += 1

        if ans_list[3] in base_ball:
            if ans_list[3] == base_ball[3]:
                strike += 1
            else :
                ball += 1
                
        if count > 10:
        	print('10번안에 맞추지 못했습니다 게임을 종료합니다.')
        	running = False 	# 10번 안에 맞추지 못할 경우 게임을 종료함

        print(f'strike : {strike}, ball : {ball}')
        strike = 0		# 스트라이크와 볼의 개수가 계속 저장되면 다음에도 이어서 출력되기 때문에 초기화
        ball = 0
        count += 1
    
    if ans_list == base_ball:
        print(f'축하합니다! {count}번 만에 맞췄습니다')

+ 추가
 
집에 오는길에 다시 한번 코드를 살펴보니 if 절이 계속 반복되고 있는 것을 볼 수 있었다. 그래서 for 문으로 묶어 한 번에 처리할 수 있도록 보완했다.
 

import random

base_ball = []

strike = 0
ball = 0
out = 0

while True:
    for i in range(4):
        a = (random.randint(1,9))
        while a in base_ball:
            a = random.randint(1,9)
        base_ball.append(a)

    base_ball = list(map(int,base_ball))

    ans_list = []

    while ans_list != base_ball:
        count = 1

        ans = input('4자리 수를 입력하세요 :')
        ans_list = list(ans)
        ans_list = list(map(int,ans_list))

        for i in range (0,4):				# 코드 변경 부분
            if ans_list[i] in base_ball:
                if ans_list[i] == base_ball[i]:
                    strike += 1
                else :
                    ball += 1

        i += 1

        print(f'strike : {strike}, ball : {ball}, out : {out}')
        strike = 0
        ball = 0
        count += 1
    
    if ans_list == base_ball:
        print(f'축하합니다! {count}번 만에 맞췄습니다')
반응형

'Python' 카테고리의 다른 글

(Python) def 를 이용한 함수 생성  (0) 2022.05.15
(Python) 숫자 up & down 게임  (0) 2022.05.07
(Python) if 를 이용한 조건문  (0) 2022.05.04
(Python) While()을 이용한 반복문  (0) 2022.04.26
(Python) 리스트 할당  (0) 2022.04.19

댓글