본문 바로가기
코딩 연습/파이썬 기초(예제)

가위바위보 게임 [파이썬기초예제]

by good4me 2022. 4. 21.

goodthings4me.tistory.com

rock-paper-scissors 우리말로 가위바위보 게임 (또는 묵찌빠 게임)을 파이썬으로 짜보았다. 터미널 기반에서 실행이 되는 버전을 먼저 코딩하고, 이어서 tkinter 기반으로로 만들어 볼 생각이다.

 

 

파이썬으로 만든 가위 바위 보 게임

  • 사용자가 가위, 바위, 보 중 하나를 입력하고, 컴퓨터는 '가위 바위 보' 리스트에서 random.randint() 함수로 하나를 임의로 선택한다.
  • '승 패 비김' 또한 리스트로 만들어서 if 조건문으로 비교하여 게임 결과를 표시한다. 
  • 게임은 3세 판으로 진행하고 더 진행 여부를 물은 후 계속하던지 종료하던지 한다.
  • 입력 오류 등의 처리, 게임 카운트, 승/패/비김 카운트 등을 해서 출력한다.

※ 파이썬 Tkinter 모듈로 만든 가위바위보 게임 [프로그램다운로드]

 

[소스 코드]

import random

def rock_paper_scissors():
    game = ['가위', '바위', '보']
    game_result = ['승', '패', '비김']

    game_cnt = 1
    user_win = 0
    computer_win = 0

    while True:
        if game_cnt < 4:
            print(f'\n{"="*5} 가위.바위.보 3세판 게임 중 {game_cnt}번째 {"="*5}')
            user = input('\n가위/바위/보 중 1개 입력>> ')
            if not user in game:
                print('입력 오류! 다시 입력하세요.')
                continue

            computer = game[random.randint(0, 2)]
            # print(f'\nUser {user}, Computer {computer}')
            print()

            if user == game[0]:
                if computer == game[0]:
                    print(f'User:{user} : Computer:{computer}\n"{game_result[2]}"')
                elif computer == game[1]:
                    print(f'User:{user} : Computer:{computer}\n"Computer {game_result[0]}"')
                    computer_win += 1
                elif computer == game[2]: 
                    print(f'User:{user} : Computer:{computer}\n"User {game_result[0]}"')
                    user_win += 1
            elif user == game[1]:
                if computer == game[0]:
                    print(f'User:{user} : Computer:{computer}\n"User {game_result[0]}"')
                    user_win += 1
                elif computer == game[1]:
                    print(f'User:{user} : Computer:{computer}\n"{game_result[2]}"')
                elif computer == game[2]:
                    print(f'User:{user} : Computer:{computer}\n"Computer {game_result[0]}"')
                    computer_win += 1
            elif user == game[2]:
                if computer == game[0]:
                    print(f'User:{user} : Computer:{computer}\n"Computer {game_result[0]}"')
                    computer_win += 1
                elif computer == game[1]:
                    print(f'User:{user} : Computer:{computer}\n"User {game_result[0]}"')
                    user_win += 1
                elif computer == game[2]:
                    print(f'User:{user} : Computer:{computer}\n"{game_result[2]}"')

            print(f'\nUser vs Computer - {user_win} 대 {computer_win}\n')
            game_cnt += 1
            continue

        if game_cnt > 3:
            while True:
                game_continue = input('게임을 더 하시겠습니까?..("y/n")>>')
                if game_continue in ('n', 'N'):
                    print('\n게임을 종료합니다.')
                    return False
                elif game_continue in ('y', 'Y'):
                    game_cnt = 1
                    user_win = 0
                    computer_win = 0
                    break
                else:
                    print('입력 오류! 다시 입력하세요.')
                    continue

rock_paper_scissors()

 

 

good4me.co.kr

 

[실행 결과]

===== 가위.바위.보 3세판 게임 중 1번째 =====

가위/바위/보 중 1개 입력>> 보

User:보 : Computer:보
"비김"

User vs Computer - 0 대 0


===== 가위.바위.보 3세판 게임 중 2번째 =====

가위/바위/보 중 1개 입력>> 가위

User:가위 : Computer:보
"User 승"

User vs Computer - 1 대 0


===== 가위.바위.보 3세판 게임 중 3번째 =====

가위/바위/보 중 1개 입력>> 보

User:보 : Computer:바위
"User 승"

User vs Computer - 2 대 0

게임을 더 하시겠습니까?..("y/n")>>ㅛ
입력 오류! 다시 입력하세요.       
게임을 더 하시겠습니까?..("y/n")>>y

===== 가위.바위.보 3세판 게임 중 1번째 =====

가위/바위/보 중 1개 입력>> rk
입력 오류! 다시 입력하세요.

===== 가위.바위.보 3세판 게임 중 1번째 =====

가위/바위/보 중 1개 입력>> 가위

User:가위 : Computer:바위
"Computer 승"

User vs Computer - 0 대 1


===== 가위.바위.보 3세판 게임 중 2번째 =====

가위/바위/보 중 1개 입력>> 가위

User:가위 : Computer:가위
"비김"

User vs Computer - 0 대 1


===== 가위.바위.보 3세판 게임 중 3번째 =====       

가위/바위/보 중 1개 입력>> 바위

User:바위 : Computer:보
"Computer 승"

User vs Computer - 0 대 2

게임을 더 하시겠습니까?..("y/n")>>n

게임을 종료합니다.

 

 

[난이도 있는 간단한 소스 코드]

import random

def rock_paper_scissors():
    rps = ['가위', '바위', '보']
    user_win_dict = {'가위':'보','바위':'가위','보':'바위'}  # User 기준 '승'인 경우
    game_result = ['승', '패', '비김']
    user_win = 0
    computer_win = 0

    game_cnt = '0'
    while game_cnt == '0' or not game_cnt.isdigit():
        game_cnt = input('\n몇 게임 할까요? : ')

    for i in range(int(game_cnt)):
        user = ''
        while user not in rps:
            user = input(f'\n[{i+1}번째 게임]\n가위/바위/보 중 1개 입력하세요 : ')
        
        computer = random.choice(rps)
        print(f'\nUser: {user} vs Computer: {computer}')
        if user == computer:
            print(f'"{game_result[2]}"')
        elif user_win_dict[user] == computer:
            print(f'User "{game_result[0]}"')
            user_win += 1
        else:
            print(f'User "{game_result[1]}"')
            computer_win += 1

    print(f'\n게임 결과: User vs Computer - {user_win} 대 {computer_win}\n')
    user_win = 0
    computer_win = 0

rock_paper_scissors()
  • isdigit() : 0 포함 양의 정수와 지수만 True 반환
  • random.choice(rps) : parameter는 시퀀스 타입 --> 1개 추출
  • rps[random.randint(0, 2)] : parameter는 0 <= x <=2 범위
  • random.sample(rps, 1)[0] : parameter는 시쿼스 또는 세트 타입과 N개 --> list 반환

 

[실행 결과]

몇 게임 할까요? : 5

[1번째 게임]
가위/바위/보 중 1개 입력하세요 : 가위

User: 가위 vs Computer: 바위     
User "패"

[2번째 게임]
가위/바위/보 중 1개 입력하세요 : 가이

[2번째 게임]
가위/바위/보 중 1개 입력하세요 : 가위

User: 가위 vs Computer: 가위     
"비김"

[3번째 게임]
가위/바위/보 중 1개 입력하세요 : 가위

User: 가위 vs Computer: 보       
User "승"

[4번째 게임]
가위/바위/보 중 1개 입력하세요 : 가위

User: 가위 vs Computer: 바위     
User "패"

[5번째 게임]
가위/바위/보 중 1개 입력하세요 : 가위

User: 가위 vs Computer: 가위        
"비김"

게임 결과: User vs Computer - 1 대 2

 

 

[파이썬 Tkinter 모듈로 만든 가위바위보 게임]

프로그램 다운로드

가위바위보 게임 GUI-1
가위바위보 게임 GUI-1

 

가위바위보 게임 GUI-2
가위바위보 게임 GUI-2

 

가위바위보 게임 GUI-3
가위바위보 게임 GUI-3

 

가위바위보 게임 GUI-4
가위바위보 게임 GUI-4

 

 

구구단 게임

파이썬 기초 예제로 구구단을 게임으로 만들어보는 코딩 연습임. 구구단 게임 함수의 매개변수로 구구단 단수와 답변 제한 시간(초)을 넘겨주면 실행 게임수를 입력받아 설정하고 랜덤 하게 구

goodthings4me.tistory.com

 

 

댓글