ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [6일차/파이썬] random 모듈, ★숫자야구게임
    파이썬 Python/파이썬 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
Designed by Tistory.