-
파이썬으로 업다운 게임 만들기Python 2024. 7. 2. 22:57
업다운 게임 코드 짜기
일단 컴퓨터가 유저가 맞출 숫자를 하나 랜덤으로 뽑아야 하니 random 모듈을 import 했다.
게임이 시작될 때마다 1부터 100사이의 숫자 하나를 뽑는 건 계속 반복되는 일이니까 제일 먼저 함수로 만들어두고.
import random def up_down_game(): return random.randint(1, 100)
attempts는 시도 횟수 때문에 만들어줬는데, 처음에는 그냥 attempts = 0 이렇게만 했다. 근데 만들고보니 총 시도 횟수를 구해야 해서 나중에 total_attempts 리스트를 추가했다.
컴퓨터가 랜덤으로 숫자를 뽑는게 게임의 가장 첫번째 순서이기 때문에
total_attempts = [] print("UpDown 게임을 시작합니다.") while True: attempts = 0 game_number = up_down_game()
↑ 이 while True 반복문이 가장 상위에 놓인다.
그 다음에 오는 반복문이 유저가 입력한 숫자 guess_number와 컴퓨터가 뽑은 game_number를 비교한다.
while True: try: guess_number = int(input("1에서 100 사이의 숫자를 입력하세요: ")) if guess_number < 1 or guess_number > 100: print("숫자가 1에서 100 사이에 있지 않습니다.") continue attempts += 1 if guess_number < game_number: print("UP") elif guess_number > game_number: print("DOWN") else: print(f"정답입니다! {attempts}번 만에 정답을 맞히셨습니다!") total_attempts.append(attempts) break except ValueError: print("숫자가 아닙니다.")
유저가 게임 종료를 선택하기 전까지는 게임이 계속해서 무한반복 되도록 while True 반복문을 썼고,
유저가 숫자 외의 문자를 입력하면 게임 진행이 불가능해지므로 그런 경우는 except ValueError(숫자가 아닌 값을 입력할 때 발생하는 에러)로 예외처리를 해줬다.
만약 1보다 작은 수를 입력하거나 100보다 큰 수를 입력하면 숫자가 1에서 100 사이에 있지 않습니다. 문구를 받게되고, 반복문으로 돌아가 1부터 100사이의 숫자를 다시 입력하게 했다.
유저가 숫자를 제대로 입력하면 시도 횟수가 1씩 증가하고 (attempts += 1)
유저가 입력한 숫자 guess_number가 up_down_game() 함수의 리턴값을 받는 변수 game_number보다 작으면 UP, 크면 DOWN을 출력하도록 했다. 크지도 작지도 않을 때가 정답이므로 else 정답.
한 라운드가 끝났으면 이제 유저에게 물어봐야한다. 게임을 더 할건지 종료할건지.
end_question = ( input("게임을 계속 하고 싶으면 y, 종료하고 싶으면 n 을 입력하세요: ") .strip() .lower() ) if end_question == "n": break elif end_question != "y": print("잘못된 입력입니다. 게임을 종료합니다.") break if total_attempts: last_attempt = total_attempts[-1] print(f"전 라운드 시도 횟수: {last_attempt}번! 이번 라운드도 화이팅입니다!") if total_attempts: last_attempt = total_attempts[-1] print(f"마지막 라운드 시도 횟수: {last_attempt}번! 다음에 또 만나요!")
처음 코드를 작성할때는 아래 조건문을 이런식으로 썼다가 코드를 간결하게 만들고 싶어서
end_question == 'y' or end_question == 'Y'
위의 end_question을 strip으로 양쪽 공백을 제거하고 lower로 문자열을 소문자로 받도록 수정했다.
n, y에 따른 조건도 처음에는 == n 일 때와 == y 일 때, 둘 다 아닐 때로 나누다가 내가 할 수 있는 선에서 최대한 간결하게 만들기 위해 노력했다. n을 입력하면 말그대로 종료하겠다는 뜻이니까 break로 반복문 밖으로 나가고 마지막 시도 횟수를 알려주며 다음에 또 만나요! 로 게임을 종료해주고.
if end_question == "n": break elif end_question != "y": print("잘못된 입력입니다. 게임을 종료합니다.") break
반대로 if end_question == n에서 유저가 n을 입력하지 않으면 if문은 거짓이 되어 아래의 elif end_question != y 로 넘어가게 된다.
여기서 입력값이 y가 아니면 조건문은 참이 되어 아래 문구 잘못된 입력입니다. 게임을 종료합니다.를 출력하고 break로 게임이 종료된다. (조건문은 참이지만 게임 안에서 y, n 외의 값을 입력한 건 잘못된 입력값이이므로).
유저가 y를 입력하면 이 조건문은 거짓이 되어 아래의 조건문으로 넘어가고 게임이 계속 진행된다.
if total_attempts: last_attempt = total_attempts[-1] print(f"마지막 라운드 시도 횟수: {last_attempt}번! 다음에 또 만나요!")
이때 유저의 마지막 라운드의 시도 횟수와 다음 라운드의 응원 메시지를 넣어줬다.
모든 코드를 종합해보면 이렇다.
import random def up_down_game(): return random.randint(1, 100) total_attempts = [] print("UpDown 게임을 시작합니다.") while True: attempts = 0 game_number = up_down_game() while True: try: guess_number = int(input("1에서 100 사이의 숫자를 입력하세요: ")) if guess_number < 1 or guess_number > 100: print("숫자가 1에서 100 사이에 있지 않습니다.") continue attempts += 1 if guess_number < game_number: print("UP") elif guess_number > game_number: print("DOWN") else: print(f"정답입니다! {attempts}번 만에 정답을 맞히셨습니다!") total_attempts.append(attempts) break except ValueError: print("숫자가 아닙니다.") end_question = ( input("게임을 계속 하고 싶으면 y, 종료하고 싶으면 n 을 입력하세요: ") .strip() .lower() ) if end_question == "n": break elif end_question != "y": print("잘못된 입력입니다. 게임을 종료합니다.") break if total_attempts: last_attempt = total_attempts[-1] print(f"전 라운드 시도 횟수: {last_attempt}번! 이번 라운드도 화이팅입니다!") if total_attempts: last_attempt = total_attempts[-1] print(f"마지막 라운드 시도 횟수: {last_attempt}번! 다음에 또 만나요!")
'Python' 카테고리의 다른 글
python, class, 인스턴스 생성 - 간단한 sns platform 코딩 (2) 2024.07.05 가위 바위 보 게임 코드 만들기 (1) 2024.07.04 파이썬 문법 심화 (1) 2024.06.30 파이썬 문법 기초 (0) 2024.06.28 Python, SQLite, SQLAlchemy, Database 조작 (0) 2024.06.27