From 8990ee7d4d09a132af11f0621e10cd408ccb0a2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=84=B1=EA=B7=9C?= Date: Tue, 24 Dec 2024 20:45:46 +0900 Subject: [PATCH 1/6] =?UTF-8?q?=ED=99=95=EC=9D=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 19 ++++++++++++++ src/baseball/main.py | 61 ++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 78 insertions(+), 2 deletions(-) diff --git a/docs/README.md b/docs/README.md index e69de29..e6cbb35 100644 --- a/docs/README.md +++ b/docs/README.md @@ -0,0 +1,19 @@ +기능 구현 목록 +========== + +**1.숫자를 랜덤으로 생성한다** +- 단 숫자는 1부터 9까지로 하고 3자리 자연수를 생성,각 자리 숫자는 서로 중복되어선 안된다 + +**2.사용자에게 숫자를 입력받는다** +- 3자리 자연수가 아니면 "잘못 입력했습니다." 출력 +- 각 자리 숫자가 서로 중복될 경우 "잘못 입력했습니다." 출력 +- 1부터 9까지 숫자가 아니면 "잘못 입력했습니다." 출력 +- 0이하 수가 나올 경우 "잘못 입력했습니다." 출력 + +**3.입력받은 수와 생성된 수를 비교한다** +- 같은 숫자가 같은 자리에 있을 때:스트라이크 +- 같은 숫자에 다른 자리에 있을 때:볼 +- 다른 숫자일 때:낫싱 + +**4.비교 결과를 출력한다** +- 3스트라이크일때 게임을 종료한다 \ No newline at end of file diff --git a/src/baseball/main.py b/src/baseball/main.py index cd8d2f3..f2115ed 100644 --- a/src/baseball/main.py +++ b/src/baseball/main.py @@ -1,10 +1,67 @@ +import random +import sys def main(): """ 프로그램의 진입점 함수. 여기에서 전체 프로그램 로직을 시작합니다. """ - # 프로그램의 메인 로직을 여기에 구현 + + print("숫자 야구 게임을 시작합니다.") + def game_start(): + ran_numbers = random.sample(range(1, 10), 3) + + def player_input(player_number) : + + if len(player_number) != 3 or not player_number.isdigit(): + raise ValueError("입력은 3자리 숫자여야 합니다.") + + if len(set(player_number)) != 3: + raise ValueError("입력 값의 각 자리는 서로 달라야 합니다.") + + return True + + def num_comparison(player_number,com_number) : + strike, ball = 0, 0 + + for i in range(3) : + if player_number[i] == com_number[i] : + strike += 1 + elif player_number[i] in com_number : + ball += 1 + + if strike == 0 and ball == 0: + return "낫싱" + else: + return f"{strike}스트라이크, {ball}볼" + + while True: + user_input = input("3자리 숫자를 입력하세요: ") + + player_input(user_input) + + result = num_comparison(user_input, list(map(str, ran_numbers))) + print(result) + + if result == "3스트라이크": + print("축하합니다! 숫자를 모두 맞추셨습니다.") + break + + while True : + game_start() + + while True: + complete = input("게임을 다시 시작하려면 1, 완전히 종료하려면 2를 입력하세요: ") + if complete == '1': + print("게임을 다시 시작합니다.") + break + elif complete == '2': + print("게임을 종료합니다.") + return + else: + print("잘못된 입력입니다. 1 또는 2를 입력하세요.") + continue + if __name__ == "__main__": # 프로그램이 직접 실행될 때만 main() 함수를 호출 - main() + main() \ No newline at end of file From 36be9f5566e10e4b3fa430d4f6af0c826fbb1b02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=84=B1=EA=B7=9C?= Date: Mon, 30 Dec 2024 20:40:36 +0900 Subject: [PATCH 2/6] =?UTF-8?q?=EA=B3=BC=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/baseball/main.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/baseball/main.py b/src/baseball/main.py index f2115ed..ed59a51 100644 --- a/src/baseball/main.py +++ b/src/baseball/main.py @@ -11,13 +11,13 @@ def game_start(): ran_numbers = random.sample(range(1, 10), 3) def player_input(player_number) : - - if len(player_number) != 3 or not player_number.isdigit(): - raise ValueError("입력은 3자리 숫자여야 합니다.") - - if len(set(player_number)) != 3: - raise ValueError("입력 값의 각 자리는 서로 달라야 합니다.") - + while True: + if len(player_number) != 3 or not player_number.isdigit(): + raise ValueError("입력은 3자리 숫자여야 합니다.") + continue + if len(set(player_number)) != 3: + raise ValueError("입력 값의 각 자리는 서로 달라야 합니다.") + continue return True def num_comparison(player_number,com_number) : From ff2d3e7eb7f148bd0462c3539c05714c597c8fab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=84=B1=EA=B7=9C?= Date: Mon, 30 Dec 2024 20:41:17 +0900 Subject: [PATCH 3/6] =?UTF-8?q?=EA=B3=BC=EC=A0=9C=20=EC=99=84=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/baseball/main.py | 114 +++++++++++++++++++------------------------ 1 file changed, 51 insertions(+), 63 deletions(-) diff --git a/src/baseball/main.py b/src/baseball/main.py index ed59a51..56d9b6a 100644 --- a/src/baseball/main.py +++ b/src/baseball/main.py @@ -1,67 +1,55 @@ import random -import sys -def main(): - """ - 프로그램의 진입점 함수. - 여기에서 전체 프로그램 로직을 시작합니다. - """ - - print("숫자 야구 게임을 시작합니다.") - def game_start(): - ran_numbers = random.sample(range(1, 10), 3) - - def player_input(player_number) : - while True: - if len(player_number) != 3 or not player_number.isdigit(): - raise ValueError("입력은 3자리 숫자여야 합니다.") - continue - if len(set(player_number)) != 3: - raise ValueError("입력 값의 각 자리는 서로 달라야 합니다.") - continue - return True - - def num_comparison(player_number,com_number) : - strike, ball = 0, 0 - - for i in range(3) : - if player_number[i] == com_number[i] : - strike += 1 - elif player_number[i] in com_number : - ball += 1 - - if strike == 0 and ball == 0: - return "낫싱" - else: - return f"{strike}스트라이크, {ball}볼" - - while True: - user_input = input("3자리 숫자를 입력하세요: ") - - player_input(user_input) - - result = num_comparison(user_input, list(map(str, ran_numbers))) - print(result) - - if result == "3스트라이크": - print("축하합니다! 숫자를 모두 맞추셨습니다.") - break +def player_input() : while True : - game_start() + player_number = input("3자리 숫자를 입력하세요: ") + if len(player_number) != 3 or not player_number.isdigit(): + print("입력은 3자리 숫자여야 합니다.") + continue + elif len(set(player_number)) != 3: + print("입력 값의 각 자리는 서로 달라야 합니다.") + continue + break + return player_number + + +def game_comp(player_number) : + strike, ball, index = 0, 0, 0 + + for i in com_number : + if int(player_number[index]) == i : + strike += 1 + elif int(player_number[index]) in com_number : + ball += 1 + index += 1 + return strike, ball + + +def game_print() : + while True: + number = player_input() + strike, ball = game_comp(number) + print(strike, "스트라이크", " / ", ball, "볼") + + if strike == 3 : + print("축하합니다! 숫자를 모두 맞추셨습니다.") + break + else: + continue - while True: - complete = input("게임을 다시 시작하려면 1, 완전히 종료하려면 2를 입력하세요: ") - if complete == '1': - print("게임을 다시 시작합니다.") - break - elif complete == '2': - print("게임을 종료합니다.") - return - else: - print("잘못된 입력입니다. 1 또는 2를 입력하세요.") - continue - - -if __name__ == "__main__": - # 프로그램이 직접 실행될 때만 main() 함수를 호출 - main() \ No newline at end of file + +while True : + com_number = random.sample(range(1,10),3) + print("숫자 야구 게임을 시작합니다.") + game_print() + + while True: + result = input("게임을 다시 시작하려면 1, 완전히 종료하려면 2를 입력하세요: ") + if result == '1': + print("게임을 다시 시작합니다.") + break # 이곳에서 안쪽 while 문을 종료하고 게임을 다시 시작 + elif result == '2': + print("게임을 종료합니다.") + exit() # 프로그램을 종료 + else: + print("잘못된 입력입니다. 1 또는 2를 입력하세요.") \ No newline at end of file From 9dc08462ae28239783b8f0addfa6e74a21c47848 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=84=B1=EA=B7=9C?= Date: Mon, 30 Dec 2024 22:11:06 +0900 Subject: [PATCH 4/6] =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/baseball/main.py | 57 +++++++++++++++++++++++--------------------- 1 file changed, 30 insertions(+), 27 deletions(-) diff --git a/src/baseball/main.py b/src/baseball/main.py index 56d9b6a..5c9a1af 100644 --- a/src/baseball/main.py +++ b/src/baseball/main.py @@ -1,19 +1,17 @@ import random def player_input() : - while True : - player_number = input("3자리 숫자를 입력하세요: ") - if len(player_number) != 3 or not player_number.isdigit(): - print("입력은 3자리 숫자여야 합니다.") - continue - elif len(set(player_number)) != 3: - print("입력 값의 각 자리는 서로 달라야 합니다.") - continue - break + + player_number = input("숫자를 입력해주세요: ") + if len(player_number) != 3 or not player_number.isdigit(): + raise ValueError("입력은 3자리 숫자여야 합니다.") + + elif len(set(player_number)) != 3: + raise ValueError("입력 값의 각 자리는 서로 달라야 합니다.") return player_number -def game_comp(player_number) : +def game_comp(com_number, player_number) : strike, ball, index = 0, 0, 0 for i in com_number : @@ -25,31 +23,36 @@ def game_comp(player_number) : return strike, ball -def game_print() : +def game_print(com_number) : while True: number = player_input() - strike, ball = game_comp(number) - print(strike, "스트라이크", " / ", ball, "볼") - - if strike == 3 : - print("축하합니다! 숫자를 모두 맞추셨습니다.") + strike, ball = game_comp(com_number, number) + if strike==0 and ball==0: + print("낫싱") + continue + elif strike == 3 : + print(strike,"스트라이크") + print("3개의 숫자를 모두 맞히셨습니다! 게임 종료") break else: + print(ball,"볼"," ",strike,"스트라이크") continue +def main(): + while True : + com_number = random.sample(range(1,10),3) + print("숫자 야구 게임을 시작합니다.") + game_print(com_number) -while True : - com_number = random.sample(range(1,10),3) - print("숫자 야구 게임을 시작합니다.") - game_print() - - while True: - result = input("게임을 다시 시작하려면 1, 완전히 종료하려면 2를 입력하세요: ") + + result = input("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요.") if result == '1': - print("게임을 다시 시작합니다.") - break # 이곳에서 안쪽 while 문을 종료하고 게임을 다시 시작 + main() elif result == '2': print("게임을 종료합니다.") - exit() # 프로그램을 종료 + exit() else: - print("잘못된 입력입니다. 1 또는 2를 입력하세요.") \ No newline at end of file + raise ValueError("잘못된 입력입니다. 1 또는 2를 입력하세요.") + +if __name__ == "__main__": + main() From 745a3ada1dce6d13e7276174289d49709d90ab16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=84=B1=EA=B7=9C?= Date: Tue, 31 Dec 2024 02:12:59 +0900 Subject: [PATCH 5/6] =?UTF-8?q?=EC=BD=94=EB=A9=98=ED=8A=B8=20=EB=B6=80?= =?UTF-8?q?=EB=B6=84=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/baseball/main.py | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/baseball/main.py b/src/baseball/main.py index 5c9a1af..a543904 100644 --- a/src/baseball/main.py +++ b/src/baseball/main.py @@ -5,7 +5,7 @@ def player_input() : player_number = input("숫자를 입력해주세요: ") if len(player_number) != 3 or not player_number.isdigit(): raise ValueError("입력은 3자리 숫자여야 합니다.") - + elif len(set(player_number)) != 3: raise ValueError("입력 값의 각 자리는 서로 달라야 합니다.") return player_number @@ -13,7 +13,7 @@ def player_input() : def game_comp(com_number, player_number) : strike, ball, index = 0, 0, 0 - + for i in com_number : if int(player_number[index]) == i : strike += 1 @@ -22,7 +22,6 @@ def game_comp(com_number, player_number) : index += 1 return strike, ball - def game_print(com_number) : while True: number = player_input() @@ -31,11 +30,11 @@ def game_print(com_number) : print("낫싱") continue elif strike == 3 : - print(strike,"스트라이크") - print("3개의 숫자를 모두 맞히셨습니다! 게임 종료") + print(str(strike)+"스트라이크") + print("게임 종료") break else: - print(ball,"볼"," ",strike,"스트라이크") + print(str(ball)+"볼", str(strike)+"스트라이크") continue def main(): @@ -43,16 +42,16 @@ def main(): com_number = random.sample(range(1,10),3) print("숫자 야구 게임을 시작합니다.") game_print(com_number) - - + + result = input("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요.") if result == '1': main() elif result == '2': print("게임을 종료합니다.") - exit() + return else: raise ValueError("잘못된 입력입니다. 1 또는 2를 입력하세요.") if __name__ == "__main__": - main() + main() \ No newline at end of file From 84860b0a6c98267cad43f9c9e84dcd51cf3db764 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=84=B1=EA=B7=9C?= Date: Thu, 2 Jan 2025 21:42:47 +0900 Subject: [PATCH 6/6] =?UTF-8?q?pytest=ED=86=B5=EA=B3=BC=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/baseball/main.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/baseball/main.py b/src/baseball/main.py index a543904..c432dd3 100644 --- a/src/baseball/main.py +++ b/src/baseball/main.py @@ -47,6 +47,7 @@ def main(): result = input("게임을 새로 시작하려면 1, 종료하려면 2를 입력하세요.") if result == '1': main() + return elif result == '2': print("게임을 종료합니다.") return