From c3c36718efb45a244e0b2ed278e190b375beaf45 Mon Sep 17 00:00:00 2001 From: Chaewon SONG <129052062+chaerishme@users.noreply.github.com> Date: Tue, 4 Feb 2025 19:43:35 +0900 Subject: [PATCH 1/5] Update README.md --- docs/README.md | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/docs/README.md b/docs/README.md index e69de29..3e56220 100644 --- a/docs/README.md +++ b/docs/README.md @@ -0,0 +1,33 @@ +☑️ 게임 시작 + +서로 다른 숫자로 이루어진 세 자리 수 생성 함수 구현 + +플레이어가 세자리인 숫자가 아니거나 동일한 수 입력 받는 경우 ValueError로 종료 + +입력받은 수에 대한 볼, 스트라이크 계산 함수 구현 및 결과 출력 + + +☑️ 게임 종료 + +1 입력 시 재시작 + +2 입력 시 게임 종료 + +이외의 값 입력시 ValueError 발생시켜 종료시킴 + +--- +☑️ 입력 내용 + +사용자의 세 자리 숫자 + +게임 종료 후 1/2 + +☑️ 출력 내용 + +게임 시작 문구 + +입력 수에 대한 결과 (볼/스트라이크/낫싱) + +정답 문구 + +재시작/종료 문구 From 3d08e0e7ced664f03bbaac28bc0539e18501a14a Mon Sep 17 00:00:00 2001 From: Chaewon SONG <129052062+chaerishme@users.noreply.github.com> Date: Tue, 4 Feb 2025 22:38:51 +0900 Subject: [PATCH 2/5] Update README.md --- docs/README.md | 32 -------------------------------- 1 file changed, 32 deletions(-) diff --git a/docs/README.md b/docs/README.md index 3e56220..d3f5a12 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,33 +1 @@ -☑️ 게임 시작 - -서로 다른 숫자로 이루어진 세 자리 수 생성 함수 구현 -플레이어가 세자리인 숫자가 아니거나 동일한 수 입력 받는 경우 ValueError로 종료 - -입력받은 수에 대한 볼, 스트라이크 계산 함수 구현 및 결과 출력 - - -☑️ 게임 종료 - -1 입력 시 재시작 - -2 입력 시 게임 종료 - -이외의 값 입력시 ValueError 발생시켜 종료시킴 - ---- -☑️ 입력 내용 - -사용자의 세 자리 숫자 - -게임 종료 후 1/2 - -☑️ 출력 내용 - -게임 시작 문구 - -입력 수에 대한 결과 (볼/스트라이크/낫싱) - -정답 문구 - -재시작/종료 문구 From 2d6bdcee8c8f619afd1361bbb032e4582ebada85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=95=98=EB=82=98?= Date: Tue, 4 Feb 2025 20:30:23 +0900 Subject: [PATCH 3/5] =?UTF-8?q?feat:=20=EC=9E=85=EC=B6=9C=EB=A0=A5,=20?= =?UTF-8?q?=EC=98=88=EC=99=B8=EC=B2=98=EB=A6=AC=20=EA=B8=B0=EB=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/baseball/main.py | 50 ++++++++++++++++++++++++++++++++++++++------ 1 file changed, 44 insertions(+), 6 deletions(-) diff --git a/src/baseball/main.py b/src/baseball/main.py index cd8d2f3..b181e0f 100644 --- a/src/baseball/main.py +++ b/src/baseball/main.py @@ -1,10 +1,48 @@ +import random + def main(): - """ - 프로그램의 진입점 함수. - 여기에서 전체 프로그램 로직을 시작합니다. - """ - # 프로그램의 메인 로직을 여기에 구현 + while True : + computer = generateNum() + + print("숫자 야구 게임을 시작합니다.") + while(True) : + print("숫자를 입력해주세요 : ", end='') + user = input() + checkInput(user) + if computer == user : + break + + + print("3개의 숫자를 모두 맞히셨습니다! 게임 종료") + print("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요.") + select = input() + if select == "1" : + continue + elif select == "2" : + break + else : + raise ValueError + + +def generateNum() : + num = random.sample(range(1,10), 3) + computer = "".join(map(str, num)) + return computer + +def checkInput(user) : + if not user.isdigit() : + raise ValueError + + num = int(user) + if num < 100 or num > 999 : + raise ValueError + + check = list(user) + if len(set(check)) != 3 : + raise ValueError + + return True if __name__ == "__main__": # 프로그램이 직접 실행될 때만 main() 함수를 호출 - main() + main() \ No newline at end of file From 4488d4591ea5dd2f9e37b39a1e498a954ccc64b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=95=98=EB=82=98?= Date: Tue, 4 Feb 2025 22:24:37 +0900 Subject: [PATCH 4/5] =?UTF-8?q?feat:=20=EB=B3=BC=20=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=EB=9D=BC=EC=9D=B4=ED=81=AC=20=EA=B3=84=EC=82=B0=20=EB=B0=8F=20?= =?UTF-8?q?=EA=B2=B0=EA=B3=BC=20=EC=B6=9C=EB=A0=A5=20=EA=B8=B0=EB=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/baseball/main.py | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/src/baseball/main.py b/src/baseball/main.py index b181e0f..d906df3 100644 --- a/src/baseball/main.py +++ b/src/baseball/main.py @@ -9,10 +9,10 @@ def main(): print("숫자를 입력해주세요 : ", end='') user = input() checkInput(user) - if computer == user : + + if (calculate(user, computer)) : break - print("3개의 숫자를 모두 맞히셨습니다! 게임 종료") print("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요.") select = input() @@ -23,7 +23,6 @@ def main(): else : raise ValueError - def generateNum() : num = random.sample(range(1,10), 3) computer = "".join(map(str, num)) @@ -43,6 +42,25 @@ def checkInput(user) : return True +def calculate(user, computer) : + strike = sum(1 for i in range(3) if user[i] == computer[i]) + ball = sum(1 for b in user if b in computer) - strike + + return format(strike, ball) + +def format(strike, ball) : + if strike == 3 : + print("3스트라이크") + return True + + output = [] + if ball > 0 : + output.append(f"{ball}볼") + if strike > 0 : + output.append(f"{strike}스트라이크") + + print(" ".join(output) if output else "낫싱") + return False + if __name__ == "__main__": - # 프로그램이 직접 실행될 때만 main() 함수를 호출 main() \ No newline at end of file From 2f79f30addce11c9533847b993a83fd6ed93fd52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=95=98=EB=82=98?= Date: Wed, 5 Feb 2025 23:20:36 +0900 Subject: [PATCH 5/5] =?UTF-8?q?chore:=20=EB=A7=A4=EC=A7=81=20=EB=84=98?= =?UTF-8?q?=EB=B2=84=20=EC=B2=98=EB=A6=AC=ED=95=98=EC=97=AC=20=EA=B0=80?= =?UTF-8?q?=EB=8F=85=EC=84=B1=20=ED=96=A5=EC=83=81=20=EB=B0=8F=20=EB=A7=A4?= =?UTF-8?q?=EA=B0=9C=EB=B3=80=EC=88=98=EC=99=80=20=EB=B0=98=ED=99=98?= =?UTF-8?q?=EA=B0=92=20=ED=83=80=EC=9E=85=20=EB=AA=85=EC=8B=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/baseball/main.py | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/src/baseball/main.py b/src/baseball/main.py index d906df3..dcb0554 100644 --- a/src/baseball/main.py +++ b/src/baseball/main.py @@ -1,4 +1,6 @@ import random +RESTART_GAME = "1" +END_GAME = "2" def main(): while True : @@ -16,9 +18,9 @@ def main(): print("3개의 숫자를 모두 맞히셨습니다! 게임 종료") print("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요.") select = input() - if select == "1" : + if select == RESTART_GAME : continue - elif select == "2" : + elif select == END_GAME : break else : raise ValueError @@ -28,27 +30,27 @@ def generateNum() : computer = "".join(map(str, num)) return computer -def checkInput(user) : +def checkInput(user:str) -> bool: # 매개변수와 반환값 타입 명시 if not user.isdigit() : - raise ValueError + raise ValueError("숫자만 입력 가능합니다.") num = int(user) if num < 100 or num > 999 : - raise ValueError + raise ValueError("3자리 숫자만 입력 가능합니다.") check = list(user) if len(set(check)) != 3 : - raise ValueError + raise ValueError("서로 다른 숫자만 입력 가능합니다.") return True -def calculate(user, computer) : +def calculate(user, computer) : # ball, strike 계산 strike = sum(1 for i in range(3) if user[i] == computer[i]) - ball = sum(1 for b in user if b in computer) - strike - + ball = sum(1 for b in user if b in computer) - strike # 합이므로 변수를 0으로 미리 초기화하지 않아도 괜찮음 + return format(strike, ball) -def format(strike, ball) : +def format(strike, ball) : # 출력 포맷 if strike == 3 : print("3스트라이크") return True @@ -57,7 +59,7 @@ def format(strike, ball) : if ball > 0 : output.append(f"{ball}볼") if strike > 0 : - output.append(f"{strike}스트라이크") + output.append(f"{strike}스트라이크") #자동으로 문자열로 만들어주는 기능 print(" ".join(output) if output else "낫싱") return False