지난 프로젝트에 이어서 랜덤 숫자를 이용한 야구게임을 작성해보겠다. 이 게임은 초중딩 시절에 연습장에다 끄적이면서 하던 게임인데 파이썬이 아닌 다른 프로그래밍 랭귀지에서도 기초 공부를 하면서 등장하므로 게임에 대한 설명은 패스하고 중요한 몇가지 코드들에 대한 설명과 전체 코드를 작성하겠다.
문자열 스플릿
숫자야구를 구현하는 방법에는 여러가지가 있겠지만 일단 여기에서는 사용자 입력을 쉽게하고 예외처리를 쉽게하기 위해서 사용자에게 입력받는 3가지 숫자를 문자열로 받고 이것을 배열에 담는 방법으로 구현하려고 한다.
기본적으로는 숫자를 입력받는 1차원적인 생각을 하겠지만 스트링에 대한 이해를 어느정도 한 개발자라면 이 아이디어가 좋다고 느낄 것이다. 이렇게 하면 사용자가 입력할때 한번에 숫자 3개를 입려할 수 있어서 편하고, 입력 받을때마다 int 형 값을 비교하는 귀찮은 코드들도 피할 수 있기 때문이다.
정답지를 만들어서 배열에 넣자
numbers라는 배열에 중복없는 3가지의 숫자를 랜덤으로 발생시켜서 넣는 코드를 보자.
# numbers 배열내에 중복확인하면서 번호 3개를 랜덤하게 생성
for i in range(3):
while number in numbers:
number = str(random.randint(0, 9))
numbers.append(number)
이 코드는 굉장히 단순하게 구현하였는데, 파이썬은 이렇게 간결한 것이 맛인것 같다.
while number in numbers 라는 코드는 그 아랫줄인 number = str(random.randint(0, 9)에서 number라는 변수에 생성되어 들어간 랜덤 숫자가 numbers라는 배열에 이미 존재한다면 다시 랜덤수를 생성하는 것이다.
즉, 이미 배열내에 동일한 숫자가 담겨져 있다면 계속 재 생성을 시도하는 것이다.
while루프를 빠져나오면 numbers라는 배열에 숫자를 담고 다시 while문으로 들어가게 되니 3개의 랜덤수가 중복없이 생성되어 들어가게 된다.
전체코드
import random
import os
numbers = []
number = str(random.randint(0, 9))
# numbers 배열내에 중복확인하면서 번호 3개를 랜덤하게 생성
for i in range(3):
while number in numbers:
number = str(random.randint(0, 9))
numbers.append(number)
os.system("cls")
count_strike = 0 # 스트라이크 갯수 확인용 변수
count_ball = 0 # 볼 갯수 확인용 변수
print("*" * 60)
print("야구 게임을 시작합니다!!!")
print("*" * 60)
while count_strike < 3:
count_strike = 0
count_ball = 0
num = str(input("숫자 3자리를 입력하세요> "))
if len(num) == 3:
for i in range(0, 3):
for j in range(0, 3):
if num[i] == numbers[j] and i == j:
count_strike +=1
elif num[i] == numbers[j] and i != j:
count_ball += 1
if count_strike == 0 and count_ball == 0:
print("3 아웃 !!")
else:
output = ""
if count_strike > 0:
output += "{} 스트라이크".format(count_strike)
if count_ball > 0:
output += " {} 볼".format(count_ball)
print(output)
print("게임 성공입니다")
실행화면
※ 본 소스코드 및 내용은 "인프런- 남박사의 파이썬 기초부터 실전100% 활용" 강의를 참고로 작성되었습니다.
https://www.inflearn.com/course/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%ED%99%9C%EC%9A%A9
'Python 프로그래밍' 카테고리의 다른 글
파이썬 기초 프로젝트 - 랜덤 숫자 맞추기 (0) | 2022.08.28 |
---|
댓글