파이썬 Python/파이썬
[6일차/파이썬] random 모듈, ★숫자야구게임
하나비 HANABI
2023. 1. 2. 17:45
random() : 0.0 과 1.0 사이의 실수를 반환
randrange(start, stop, step) : 특정 영역에 있는 임의의 정수 값을 반환. stop에 정의된 값은 미포함.
randint(start, stop) : 특정 영역에 있는 임의의 정수 값을 반환. stop에 정의된 값 포함.
주사위 게임
import random
one_more = 'y'
count = 0
while one_more == 'y':
count += 1
print('-'*20)
print('주사위 던지기 {}번쨰'.format(count))
p1 = random.randrange(1, 7)
print('선수1 : {}'.format(p1))
p2 = random.randrange(1,7)
print('선수2 : {}'.format(p2))
if p1 > p2:
print('선수1의 승리!')
elif p1 < p2:
print('선수2의 승리!')
else:
print('무승부!')
one_more = input('한번 더 하시겠습니까? (y/n) >>> ')
if one_more != 'y':
break
# Boolean을 이용한 버전
import random
is_stop = False
count = 1
while not is_stop:
print('주사위 게임 {}번째'.format(count))
player1 = random.randrange(1, 7)
print('선수1 : {}'.format(player1))
player2 = random.randrange(1, 7)
print('선수2 : {}'.format(player2))
if player1>player2:
print('player1 승리!')
elif player1<player2:
print('player2 승리!')
else:
print('무승부')
command = input('한번 더 하시겠습니까? (y/n) >>> ')
if command =='y' :
count += 1
else :
is_stop = True
print('게임을 종료합니다.')
★★★★★ 숫자 야구게임 ★★★★★
"중복되지 않는" 네자리의 랜덤숫자를 만드는 것이 잘 안됨
먼저 게임 진행 방식에 따라 아래와 같이 큰 틀을 잡아놓음 (상세한 알고리즘 구성x)
# 숫자 야구게임
# 예시코드
is_stop = False
count = 1
while not is_stop:
print("{}번째 게임입니다".format(count))
# 게임시작
# 중복 없는 랜덤 4자리 생성
#hidden_numbers = generate_numbers()
# 사용자가 입력한 값 중복 확인 후 입력값 판별
is_answer = False
while not is_answer:
print("{}번째 시도".format(count))
# 사용자의 입력값
#player_numbers = int(input('네자리 숫자를 입력하세요: '))
# 판별 결과
(ball, strikes) = 1,4#check_judge(hidden_numers, player_numbers)
# 게임 종료조건
if strikes == 4:
is_answer = True
print('정답입니다!')
continue
give_up = input('게임을 중단하시겠습니까? (y/n) >> ')
if give_up == 'y':
print('게임을 중단합니다.')
break
# 게임종료
# 한번 더 할 것인지
command = input('한번 더 하시겠습니까? (y/n) >> ')
if command == 'n':
print('게임을 완전히 종료합니다.')
is_stop = True
else:
count += 1
각 역할에 맡는 함수 생성
# 랜덤 네자리 반환
def generate_numbers():
hidden_numbers = 0
is_stop = False
while not is_stop:
hidden_numbers = random.randrange(1000,10000)
flag = is_samenumber(str(hidden_numbers))
if not flag:
is_stop = True
return str(hidden_numbers)
# 중복 검사 (String)
def is_samenumber(number):
flag = False
for i in range(4):
temp = number.count(number[i])
if temp >= 2:
flag = True
break
return flag
# 볼, 스트라이크 개수 체크 (String, String)
def check_judge(hidden_numbers, player_numbers):
ball = 0
strike = 0
for i in range(4):
for j in range(4):
if hidden_numbers[i] == player_numbers[j]:
if i == j:
strike += 1
else:
ball += 1
return (ball, strike)
is_stop = False
count = 1
while not is_stop:
print("{}번째 게임입니다".format(count))
# 게임시작
# 중복 없는 랜덤 4자리 생성
hidden_numbers = generate_numbers()
try_count = 1
# 사용자가 입력한 값 중복 확인 후 입력값 판별
is_answer = False
while not is_answer:
print("{}번째 시도".format(try_count))
# 사용자의 입력값
is_correct = False
while not is_correct:
player_numbers = input('네자리 숫자를 입력하세요: ')
flag = is_samenumber(player_numbers)
if not flag:
is_correct = True
# 판별 결과
(ball, strike) = check_judge(hidden_numbers, player_numbers)
print(ball,strike)
# 게임 종료조건
if strike == 4:
is_answer = True
print('정답입니다!')
continue
else:
try_count += 1
give_up = input('게임을 중단하시겠습니까? (y/n) >> ')
if give_up == 'y':
is_answer = True
print('게임을 중단합니다.')\
# 게임종료
# 한번 더 할 것인지
command = input('한번 더 하시겠습니까? (y/n) >> ')
if command == 'n':
print('게임을 완전히 종료합니다.')
is_stop = True
else:
count += 1