오늘은 파이썬 함수를 활용하여 숫자야구를 만들어보는 시간을 가졌다.
물론 저번에 만든거지만 이번엔 함수화해서 만든다는 것이 포인트...
코드
import random
import os
#컴퓨터가 랜덤으로 숫자 3개 뽑음
def pick_random_number():
"""컴퓨터가 랜덤으로 숫자 3개 뽑는 함수"""
random_number = random.sample(range(1,10),3)
return random_number
def check_number(user_num):
"""사용자 숫자가 1부터 9까지인지, 숫자인지 아닌지, 3자리가 넘는지 체크"""
user_num = ''.join(user_num)
if not user_num.isdigit() or len(user_num) != 3:
return False
for i in user_num:
if not '1' <= i <= '9':
return False
return list(user_num)
def compare_numbers(com_num, user_num):
"""컴퓨터와 유저의 숫자 비교하는 함수"""
user_num = list(map(int, user_num))
strike, ball = 0, 0
for i in range(3):
if user_num[i] == com_num[i]:
strike += 1
elif user_num[i] in com_num:
ball += 1
out = 3 - strike - ball
print(f"{strike}스트라이크 {ball}볼 {out} 아웃")
if strike == 3:
print("게임을 승리했습니다!")
return 1
def game_ment(cnt):
"""단순 멘트"""
if cnt == 12:
print("당신은 실패했습니다.")
else:
print(f"당신의 남은 기회는 {12-cnt}번")
def play_game():
"""숫자야구 게임을 실행하는 함수"""
go_on = 'y'
while go_on != 'n':
#컴퓨터 숫자 랜덤 뽑기
com_num = pick_random_number()
print(f"컴숫자 확인용: {com_num}") #컴퓨터 숫자 확인용
# 사용자가 한번 도전할 시작할 때마다 cnt 세줌. 이기면 win 세줌.
life, win, cnt = 0, 0, 0
cnt += 1
while life < 12:
#사용자가 숫자 입력
while True:
game_ment(life)
guess = input(f"숫자 3개를 띄어쓰기로 유추하세요: ").split()
user_num = check_number(guess)
if user_num:
break
else:
print("다시 입력하세요.")
life += 1
#자리수가 맞으면 스트라이크, 숫자가 있는데 자리수가 틀리면 볼, 숫자가 아예 없으면 out
if compare_numbers(com_num, guess) == 1:
print("승리했습니다.")
win += 1
break
game_ment(life)
# 사용자에게 계속할 것인지 물음. yes면 계속, 아니면 승률을 출력해줌.
go_on = input("계속 게임하시겠습니까?(y/n): ").lower()
os.system("cls")
print(f"당신의 승률은 :{win/cnt*100}%")
#메인 함수
play_game()
실행화면
'개발공부 > Python' 카테고리의 다른 글
[파이썬] 간단한 로그인, 회원가입 창 만들기(함수 활용) (0) | 2023.04.26 |
---|---|
[파이썬] 개복치 키우는 게임 만들기 (0) | 2023.04.26 |
[파이썬] 60갑자 조합 만들어보기 (0) | 2023.04.24 |
(4.23) 파이썬 예외처리 공부(try except, raise) (0) | 2023.04.23 |
[파이썬] 로보77게임 만들기(순서도, 1차코드, 미완) (0) | 2023.04.22 |