[TIL][Python] 가위바위보 게임

히끼·2024년 2월 23일

TIL

목록 보기
10/43

게임 설명

가위, 바위, 보 중 하나를 선택하여 컴퓨터와 대결하는 게임

  1. 플레이어가 가위, 바위, 보 중 하나를 입력한다.
    • 입력 시, 대소문자를 구분하지 않도록 한다.
  2. 컴퓨터가 무작위로 가위, 바위, 보 중 하나를 선택한다.
  3. 플레이어와 컴퓨터의 선택을 비교하여 승패를 판정한다.
  4. 게임의 승, 패, 무승부 횟수를 기록한다.
  5. 플레이어/컴퓨터가 이겼는지 또는 비겼는지 승패 판정 결과를 출력한다.
  6. 게임 재시작 여부를 묻고, 그에 따라 게임을 초기화(재시작)하거나 종료한다.
  7. 게임 종료 시, 4에서 저장한 승, 패, 무승부 횟수 통계를 제공한다.

코드 구현 과정

1. 사용자로부터 가위, 바위, 보 중 하나를 입력받기

  • rps 에 원하는 값을 입력하고, 해당 값 중 하나를 입력하지 않았을 때는 재입력을 하도록 유도하기 위해 while 을 사용했다.
  • 입력 받은 값에 대소문자 구분이 없도록, lower() 함수를 사용했다.
rps = ['rock', 'paper', 'scissors']
player = ""

while player not in rps:
    player = input(
        "Enter one of rock, paper, scissors : ").lower()

print(player)

2. 컴퓨터가 무작위로 가위, 바위, 보 중 하나를 선택하도록 하기

  • random.choice(list) 로 리스트 내 값 중 하나를 랜덤으로 선택하도록 했다.
import random

rps = ['rock', 'paper', 'scissors']

computer = random.choice(rps)

3-5. 승패를 비교하고, 결과를 기록하고, 출력하기

  • 조건문을 이용해 승패를 비교했다.
  • wins, losses, ties 변수를 만들고, 각 게임의 결과에 따라 해당하는 변수를 1 올려준다.
wins = 0
losses = 0
ties = 0

if player == computer:
    ties += 1
    print(f"It's a tie! (you: {player} VS computer: {computer})")
elif (player == "rock" and computer == 'scissors') or (player == "paper" and computer == 'rock') or (player == "scissors" and computer == 'paper'):
    wins += 1
    print(f"You win!! (you: {player} VS computer: {computer})")
else:
    losses += 1
    print(f"You lose.. (you: {player} VS computer: {computer})")

6-7. 게임을 재시작하거나 종료하게 하고, 종료시에 전적을 표시하기

  • replay() 함수를 만들어 게임 재시작 여부를 묻고, 답변이 y, n, Y, N 이 아니면 다시 입력하도록 했다.
  • 대답이 n 또는 N 이면 전적(n승 n무 n패)를 표시하도록 했다.
    • n에 들어갈 값이 1 보다 크면, 단어를 복수로 만들기 위해 if 를 삼항연산자로 썼다.
  • 그 외의 대답(y 또는 Y)이면 게임을 다시 시작하도록 했다.
def replay():
    while True:
        reply = input("Do you want to REPLAY? (y/n) : ").lower()
        if reply in ['y', 'n']:
            return reply

while True:
	# 이미 작성한 코드
    ...
    reply = replay()
    if reply == "n":
    	print(f"{wins} win{'s' if wins > 1 else ''}, {ties} tie{'s' if ties > 1 else ''}, {losses} loss{'es' if losses > 1 else ''}")
        break

전체 코드

마지막으로 전체 코드를 rps() 함수에 담아줬다.

✨ Github에서 코드 보기 ✨

import random


def replay():
    while True:
        reply = input("Do you want to REPLAY? (y/n) : ").lower()
        if reply in ['y', 'n']:
            return reply


def rps():
    rps_list = ['rock', 'paper', 'scissors']
    wins = 0
    losses = 0
    ties = 0

    while True:
        player = ""

        while player not in rps_list:
            player = input(
                "Enter one of rock, paper, scissors : ").lower()

        computer = random.choice(rps_list)

        if player == computer:
            ties += 1
            print(f"It's a tie! (you: {player} VS computer: {computer})")
        elif (player == "rock" and computer == 'scissors') or (player == "paper" and computer == 'rock') or (player == "scissors" and computer == 'paper'):
            wins += 1
            print(f"You win!! (you: {player} VS computer: {computer})")
        else:
            losses += 1
            print(f"You lose.. (you: {player} VS computer: {computer})")

        reply = replay()
        if reply == "n":
            print(f"{wins} win{'s' if wins > 1 else ''}, {ties} tie{'s' if ties > 1 else ''}, {losses} loss{'es' if losses > 1 else ''}")
            break


rps()

실행 예시

rps.py 실행 예시

0개의 댓글