본문 바로가기

Programmer's Diary/Python

[Python] 2022-02-05 개인 Project _ 재미로 만든 숫자야구게임

728x90
 '''
숫자야구게임
컴퓨터에서 생성된 세자리 숫자를 맞히는 게임
추측한 숫자 중에 자리까지 맞은 숫자가 한 개 있으면 1strike,
추측한 숫자 중에 하나가 생성된 숫자에 있는 경우 1ball
각 자리 숫자는 중복될 수 없음. 기회는 일단 10번으로
'''
import random
# 컴퓨터로 부터 한 자리 숫자 3개 중복 없이 뽑아오기
answer = []
i = 0
while i < 3:
    answertemp = random.randrange(10)
    if answertemp in answer:
        continue
    else:
        answer.append(answertemp)
        i = i + 1
print(answer)   # 확인용
print("☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★")
print("숫자야구게임".center(50))
print("☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★")
print("< 종료하려면, 언제든지 'q'를 입력하세요. >".center(50))
print("")
# 모든 결과를 저장할 리스트 생성
numbersTotal = []
strikeTotal = []
ballTotal = []

def quit(typ):
    if typ == 'q':
        print("*"*55)
        exit("게임을 종료합니다.".center(55))

def numInput(digit, numberList):
    while True:
        num = input("{}번째 자리 숫자 입력: ".format(digit))
        quit(num)
        if num.isdigit():
            num = int(num)
            if num >= 10:
                print("※ 한 자리 숫자를 입력해 주세요.")
                continue
            else:
                if num in numberList:
                    print("※ 숫자가 중복되었습니다. 다시 입력해주세요.")
                    continue
                else:
                    numberList.append(num)
                    break
        else:
            print("※ 한 자리 숫자를 입력해 주세요.")
            continue

for rnd in range(1, 11):
    print("▷▶▷▶▷▶▷▶▷▶▷▶▷▶▷▶▷▶▷▶▷▶▷▶ {}회 ◁◀◁◀◁◀◁◀◁◀◁◀◁◀◁◀◁◀◁◀◁◀◁◀".format(rnd))
    numbers = []  # 각 판마다 입력한 숫자 세 개를 저장
    # 첫번째 자리 숫자 입력 받기
    numInput(1, numbers)
    # 두번째 자리 숫자 입력 받기
    numInput(2, numbers)
    # 세번째 자리 숫자 입력 받기
    numInput(3, numbers)
    # 입력받은 세 숫자 판정
    strike = 0
    ball = 0
    for i in range(3):  # numbers에 인덱스로 접근해서 확인
        if numbers[i] in answer:    # 정답 숫자 3개 중에 numbers[i]가 있는지?
            if i == answer.index(numbers[i]):   # 있으면서 인덱스도 같으면 strike
                strike = strike + 1
            else:                               # 있지만 인덱스는 같지 않으면 ball
                ball = ball + 1
    print("입력한 숫자: {}   {}   {}".format(numbers[0], numbers[1], numbers[2]))
    print("판정 결과: STRIKE( {} ) BALL( {} )".format(strike, ball))
    print("")
    # strike가 3이면 정답, 프로그램 종료
    if strike == 3:
        print("☆★☆★☆★☆★☆★☆★삼진 아웃!!☆★☆★☆★☆★☆★☆★☆★")
        print("☆★☆★☆★☆★☆★정답입니다!!@!@!@!#@!!☆★☆★☆★☆★☆★")
        print("정 답 : {}  {}  {}".format(answer[0], answer[1], answer[2]))
        exit()
    # 매 회 결과를 저장
    numbersTotal.append(numbers)
    strikeTotal.append(strike)
    ballTotal.append(ball)
    # 매 회마다 이전에 진행한 게임들 결과 출력
    print("○○○○○○ 아래 결과들을 잘 조합해보세요 ○○○○○○")
    for i in range(1, rnd+1):
        print(" {}회  :  {}  {}  {}".format(i, numbersTotal[i-1][0], numbersTotal[i-1][1], numbersTotal[i-1][2]), end="")
        print("   =>   STRIKE( {} ) BALL( {} )".format(strikeTotal[i-1], ballTotal[i-1]))
    print("")
# 기회 모두 사용하면 정답 출력 해주기
print("기회를 모두 사용하였습니다.")
print("정답은 {}   {}   {}".format(answer[0], answer[1], answer[2]))
728x90