본문 바로가기
  • 마침표 보다 쉼표를 나타내자
국비교육 [完]/빅데이터과정

01월 07일 - (44일차)

by Y코더 2023. 1. 7.
728x90

전에 작성했던 프로그램을

함수로 만들어서 다시 작성하였다.

 

반환 함수를 사용 하려고 하는데 쉽지 않다.

그런 상황을 만들려고 하니 더 짧게 만들어진다.

아주 아이러니한 상황이다.

 

 

숫자 야구게임을 함수로 만들어 보았다.

#숫자 야구 게임

#랜덤 기능 호출
import random

#값을 받을 3개의 공간을 생성합니다.
num = ["0", "0", "0"]

#값을 기억할 변수를 선언 합니다.
s = 0
b = 0
x = 0
y = 0
max_game = 5
try_num = 0
num_str22 = []
number = []

#배열 초기화 함수
def ran_set():
    global number
    number = []

#게임 결과 초기화 함수
def game_set():
    global s
    global b
    s = 0
    b = 0

#컴퓨터가 가질 중복되지 않는 3개의 랜덤한 값
def ran_res():
    num[0] = int(random.randrange(1, 10, 1))
    num[1] = num[0]
    num[2] = num[0]

def ran_res_1():
    while(num[0] == num[1]):
        num[1] = int(random.randrange(1, 10, 1))

def ran_res_2():
    while(num[0] == num[2] or num[1] == num[2]):
        num[2] = int(random.randrange(1, 10, 1))

#사용자 안내문구
def user_hi():
    print("-" * 50)
    print("숫자야구를 시작하겠습니다.")
    print("-" * 50)

#사용자 입력 함수
def user_in():
     #사용자에게 숫자를 3개 뽑기 위함이다
    global x
    while x < 3:
        add_number = input(f"{x+1}번째 숫자를 입력하세요: ")

        if not (add_number.isdigit()):
            print("오입력 숫자를 입력하세요!!!")
            print("-" * 50)
            continue

        if add_number in num_str22:
            print("중복된 숫자 입니다.")
            continue

        add_number = int(add_number)

        if not add_number:
            print("잘못된 값입니다. 다시 입력하세요.")

        if add_number > 9:
            print("범위를 벗어나는 숫자입니다. 다시 입력하세요.")
            #다시 입력하도록 컨티뉴 시킨다.
            continue

        if add_number in number:
            #사용자가 입력한 번호가 배열안에 있는지 검색한다
            print("중복되는 숫자입니다. 다시 입력해주세요.")
        else:
            number.append(add_number)
            #값이 맞으니 횟수를 증가 시킨다.
            x += 1

#점수 마킹 함수
def check_1():
    #반복문으로 결과 검색후 하나씩 점수 추가
    global s
    global b       
    for i in range(0, 3):
        for j in range(0, 3):
            if(number[i] == int(num[j]) and i == j):
                s += 1
            elif(number[i] == int(num[j]) and i != j):
                b += 1

#야구 게임 함수
def game():
    global s
    global b
    global x
    global y
    global try_num
    while (s < 3):
        while (y < max_game):
            print("1~9까지 숫자중 3개를 하나씩 입력해주세요.")
            user_in()
            check_1()

            print("*" * 50)
            try_num += 1
            print("스트라이크: [",s,"]개 볼[",b,"]개"" ""[",try_num,"]번째 시도")
            if s==3:
                break
            game_set()
            ran_set()
            y += 1
            x = 0

    print("-" * 50)
    print("오 잘하시군요~")
    print("[",try_num,"]번 만에 모두 맞췄습니다아~")


#사용자 안내
user_hi()

#컴퓨터 랜덤값
ran_res()
ran_res_1()
ran_res_2()

#잘뽑히나 확인
print(num)

#게임 시작
game()

아직 잘 몰라서 그런지 코드가 많이 중구난방이다.

다듬어 볼려고 노력해 보았다.

파이썬 for문을 사용하는 능력이 떨어지는 것 같다.

주말에 보충으로 공부를 해야겠다.

 

이상하게 데이터 타입을 int로 선언하여도 자꾸 str로 변한다.

 

글로벌로 간단하게 코드를 작성하려고 하였지만

문제가 생겼다............

스트라이크 값과 볼값이 계속 상승한다는 것과 배열이 그대로라서 중복으로 뜬다.

게임의 특정 조건에 맞춰 초기화 하는 함수를 적용하여 게임을 이어가도록 설정하였다.

 

마치 조각보 같은 코딩이다.

음.... 필요한 것을 자꾸 덧대 붙이니 누더기에 가까울라나 모르겠다.

 

여기서 궁금한 점은 자바처럼 여러 파일을 연결 시킬 수 있는지도 궁금하였다.

 

주말에는 자바 다중클래스의 개념을 확실히 잡고

오버라이딩과 업캐스팅 다운캐스팅등 생각대로 사용할수 있도록 연습해야겠다.

 

728x90

'국비교육 [完] > 빅데이터과정' 카테고리의 다른 글

01월 10일 - (46일차)  (0) 2023.01.10
01월 09일 - (45일차)  (0) 2023.01.10
01월 06일 - (43일차)  (0) 2023.01.06
01월 05일 - (42일차)  (0) 2023.01.05
01월 04일 - (41일차)  (0) 2023.01.04