캠프

[기초 과제] 가위바위보 게임

kinggoddino 2024. 7. 3.

가위바위보 게임 만들기

 

▶ 내용

  • 플레이어가 가위, 바위, 보 중 하나를 입력함
  • 컴퓨터도 무작위로 가위, 바위, 보 중 하나를 선택함
  • 플레이어와 컴퓨터의 선택을 비교하여 승패를 판정함
  • 결과를 출력하여 플레이어가 이겼는지, 컴퓨터가 이겼는지, 비겼는지를 알려줌

▶ 내 코드

import random # 랜덤 숫자 생성을 위한 random 모듈 import

def computer_pick(): # computer_pick 함수선언
    return random.choice(['가위', '바위', '보']) # 가위,바위,보 중에 랜덤 반환

def player_pick(): # player_pick 함수 선언
    pick = input("가위, 바위, 보 중 하나를 선택하세요: ") # 입력받은 값을 pick 에 저장
    if pick not in ['가위', '바위', '보']: # pick 이 가위, 바위, 보 중에 없다면
        pick = input("잘못입력하셨네요. 선택지는 가위, 바위, 보 입니다: ") # 다시 입력받기
    else: # pick 이 가위, 바위, 보 중에 있다면
        return pick # pick 반환

def winner(computer_pick, player_pick): # winner 함수 선언
    if player_pick == computer_pick: # 컴퓨터와 사용자가 같은걸 골랐으면
        return "비겼습니다." # "비겼습니다" 반환
    elif (player_pick == '가위' and computer_pick == '보') or \
        (player_pick == '바위' and computer_pick == '가위') or \
        (player_pick == '보' and computer_pick == '바위'): # 사용자가 이길 경우 (3가지)
        return "우와! 이기셨어요!" # "이기셨어요" 반환
    else: # 그외의 경우 (졌을경우)
        return "지셨습니다." # "지셨습니다" 반환
        
def play_game(): # play_game 함수 선언
    print(f"컴퓨터: {computer_pick()}, 당신: {player_pick()}") # 둘이 낸 것 뭔지 출력
    result = winner(computer_pick, player_pick) # winner함수 결과를 result 에 저장
    print(result) # result 출력
        
play_game() # 함수 호출

너무 어려웠다...

실행해보기!

잘못입력해서 가위로 바꿨는데 왜... 아무것도 안

둘다 가위냈는데

가위가 보 이기지 않나

 

아무래도 무조건 else 문이 실행되고 있는 것 같다.

 

(열심히 고민 후)

winner 함수와 play_game 함수에서 다른 함수를 그대로 갖다써서 문제가 발생했다. 함수에 인자를 전달할 때는 함수 자체를 전달하는 게 아니라, 함수의 반환값을 변수에 저장한 다음에 전달해 줘야 한다.

def play_game():                                          
    computer_choice = computer_pick() # 함수 결과를 변수에 저장
    player_choice = player_pick() # 함수 결과를 변수에 저장
    print(f"컴퓨터: {computer_choice}, 당신: {player_choice}") # 저장된 결과를 출력
    result = winner(computer_choice, player_choice) # winner함수 호출 시 함수가 아닌 변수를 전달
    print(result)
def winner(computer_choice, player_choice): # 매개변수를 함수가 아니라 변수로 받기
    if player_choice == computer_choice:  
        return "비겼습니다."              
# 이하 코드에서도 함수명을 변수명으로 다 바꿔줬다.

 

수정 후 다시 실행해보기!

성공!


+

▶ 추가 도전과제

  • 게임의 승, 패, 무승부 횟수를 기록하고, 게임 종료 시에 플레이어에게 통계를 제공한다
  • 플레이어가 입력할 때 대소문자를 구분하지 않도록 프로그램을 개선한다
  • 플레이어가 게임을 반복하고 싶을 경우, 게임 재시작 여부를 묻고 그에 따라 게임을 초기화하거나 종료하는 기능을 추가한다
import random # 랜덤 모듈 가져오기

options = ['가위', '바위', '보'] # 옵션은 가위, 바위, 보 리스트

def get_player_choice(): # 유저 선택 함수 선언
    while True: # 무한 루프 실행
        player_choice = input('가위, 바위, 보 중 하나를 선택하세요: ') # 입력받기
        if player_choice in options: # 입력이 가위,바위,보 중에 있다면
            return player_choice # 입력값 반환
        else: # 입력이 가위,바위,보 중에 없다면
            print('잘못된 입력입니다. 다시 입력하세요.') # 유효한 입력값 유도(루프 다시실행)

win = 0 # win 변수선언, 초기값 0
draw = 0 # draw 변수선언, 초기값 0
lose = 0 # lose 변수선언, 초기값 0

while True: # 무한루프 실행
    player_choice = get_player_choice() # 유저 선택 함수의 결과를 player_choice 변수에 저장

    computer_choice = random.choice(options) # 옵션중 랜덤 선택값을 computer_choice 변수에 저장
    print(f'컴퓨터가 선택한 것은?! : {computer_choice}') # 컴퓨터 선택값 출력해서 보여주기

    if ( # 만약 이겼을 경우(3가지 조건)
        (player_choice == '가위' and computer_choice == '보')
            or (player_choice == '바위' and computer_choice == '가위')
            or (player_choice == '보' and computer_choice == '바위')):
        print('이겼음') # '이겼음'출력
        win += 1 # win 변수에 1 더해줌
    elif player_choice == computer_choice: # 값이 같을 경우
        print('비겼음') # '비겼음'출력
        draw += 1 # draw 변수에 1 더해줌
    else: # 그 외의 경우(졌을 경우)
        print('졌음') # '졌음'출력
        lose += 1 # lose 변수에 1 더해줌

    retry = input('다시하시겠습니까? (Y/N)').lower() # 다시할건지 입력받기. 소문자로 바꿔주기
    if retry == 'y': # y를 입력받았다면
        continue # while 루프 처음부터 다시 실행
    elif retry == 'n': # n를 입력받았다면
        break # 무한 루프 빠져나가기

print(f"승리 : {win}회 / 비김 : {draw}회 / 패배 : {lose}회") # 승패 횟수 출력

성공!

 

 

 


 

'캠프' 카테고리의 다른 글

[기초 과제] Class로 회원/게시물 관리  (0) 2024.07.08
협업을 잘하려면  (0) 2024.07.05
개발역량 기르는법  (0) 2024.07.05
[기초 과제] Up Down 게임 만들기  (0) 2024.07.02
시작!  (0) 2024.07.01