-
[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
'파이썬 Python > 파이썬' 카테고리의 다른 글
[7일차/파이썬] 클래스 & 객체 (0) 2023.01.03 [7일차/파이썬] datetime 모듈 (0) 2023.01.03 [5일차 / 파이썬] 람다, 파일 읽기 (0) 2022.12.30 [5일차 / 파이썬] 함수 (0) 2022.12.30 [5일차 / 파이썬] 복습 - ★1~12월까지 달력(0 입력 시 전체 출력), 함수 (0) 2022.12.30