파이썬 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