본문 바로가기
수업자료

실습 : 가위, 바위, 보 게임

by ^..^v 2024. 8. 4.
728x90
반응형

사용자와 컴퓨터가 가위바위보 게임을 3판 양승제로 진행하는 프로그램을 작성합니다. 프로그램은 사용자의 입력을 받아 컴퓨터의 선택과 비교하여 승패를 결정하고, 게임의 결과를 기록하여 최종 승자를 출력합니다. 

 

로직 구현에 필요한 변수를 선언하고 초기화합니다. choices 리스트는 가위바위보 게임에서 사용될 선택지를 저장하며, results 리스트는 각 라우드의 결과를 저장합니다. 또한 사용자와 컴퓨터의 승리 회수를 기록하기 위해 user_wins와 comp_wins 변수를 0으로 초기화합니다. 

import random

choices = ["가위", "바위", "보"]
results = []
user_wins = 0
comp_wins = 0

 

사용자와 컴퓨터의 선택을 비교하여 승자를 판별하는 get_wins 함수를 정의합니다. 이 함수는 사용자와 컴퓨터의 선택을 입력으로 받아 결과를 반환합니다. 만약 두 선택이 같다면 무승부를 반환하고, 사용자가 이기는 경우와 컴퓨터가 이기는 경우를 각각 판별하여 승리 회수를 증가시키고 적절한 메시지를 반환합니다. 

def get_winner(user_choice, comp_choice):
    global user_wins, comp_wins
    if user_choice == comp_choice:
        return "무승부"
    elif (user_choice == "가위" and comp_choice == "보") or \
         (user_choice == "바위" and comp_choice == "가위") or \
         (user_choice == "보" and comp_choice == "바위"):
        user_wins += 1
        return "사용자 승"
    else:
        comp_wins += 1
        return "컴퓨터 승"

 

게임은 3판 양승제로 진행됩니다. 사용자나 컴퓨터가 두 번 승리할 때까지 게임이 반복됩니다. while 루프 안에서 컴퓨터의 선택을 무작위로 결정하고, 사용자의 입력을 받습니다. 입력된 값이 유효하지 않으면 다시 입력을 받습니다. get_wins 함수를 호출해 승자를 결정하고, 결과를 results 리스트에 저장하고, 현재 라우드의 결과를 출력합니다. 

while user_wins < 2 and comp_wins < 2:
    comp_choice = random.choice(choices)
    user_choice = input("가위, 바위, 보 중 하나를 입력하세요 >>> ")
    if user_choice not in choices:
        print("잘못된 입력입니다.")
        continue
        
    winner = get_winner(user_choice, comp_choice)
    results.append((user_choice, comp_choice, winner))

    print(f"컴퓨터: {comp_choice}")
    print(f"사용자: {user_choice}", end="")
    print(f" >>> {winner}")

 

게임이 끝나면 최종 승자를 출력합니다. user_wins가 2이면 사용자가 승리한 것이고, 그렇지 않으면 컴퓨터가 승리한 것입니다. 최종 승자를 출력하는 코드는 다음과 같습니다. 

if user_wins == 2:
    final_winner = "사용자"
else:
    final_winner = "컴퓨터"

print(f"\n최종 승자 >>> {final_winner}")
print("=" * 24)

 

모든 게임이 끝난 후, 각 라운드의 결과를 표 형식으로 출력합니다. 헤더를 정의하고, 각 게임의 결과를 results 리스트에서 가져와 출력합니다. 

header = ["사용자", "컴퓨터", "결과"]
print(f"{header[0]}\t{header[1]}\t{header[2]}")
print("-" * 7, end=" ")
print("-" * 7, end=" ")
print("-" * 8)
for user, computer, winner in results:
    print(f"{user}\t{computer}\t{winner}")

 

전체 소스 코드는 다음과 같습니다. 

import random

# 가위 바위 보 선택지
choices = ["가위", "바위", "보"]

# 게임 결과를 저장할 리스트
results = []

# 승리 횟수 초기화
user_wins = 0
comp_wins = 0

def get_winner(user_choice, comp_choice):
    global user_wins, comp_wins
    if user_choice == comp_choice:
        return "무승부"
    elif (user_choice == "가위" and comp_choice == "보") or \
         (user_choice == "바위" and comp_choice == "가위") or \
         (user_choice == "보" and comp_choice == "바위"):
        user_wins += 1
        return "사용자 승"
    else:
        comp_wins += 1
        return "컴퓨터 승"

# 3판 양승제 게임 진행
while user_wins < 2 and comp_wins < 2:
    comp_choice = random.choice(choices)
    user_choice = input("가위, 바위, 보 중 하나를 입력하세요 >>> ")
    if user_choice not in choices:
        print("잘못된 입력입니다.")
        continue
        
    winner = get_winner(user_choice, comp_choice)
    results.append((user_choice, comp_choice, winner))

    print(f"컴퓨터: {comp_choice}")
    print(f"사용자: {user_choice}", end="")
    print(f" >>> {winner}")

# 최종 승자 출력
if user_wins == 2:
    final_winner = "사용자"
else:
    final_winner = "컴퓨터"

print(f"\n최종 승자 >>> {final_winner}")
print("=" * 24)

# 게임 이력 출력
header = ["사용자", "컴퓨터", "결과"]
print(f"{header[0]}\t{header[1]}\t{header[2]}")
print("-" * 7, end=" ")
print("-" * 7, end=" ")
print("-" * 8)
for user, computer, winner in results:
    print(f"{user}\t{computer}\t{winner}")
728x90
반응형

댓글