> For the complete documentation index, see [llms.txt](https://mose-byun.gitbook.io/pythongame/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mose-byun.gitbook.io/pythongame/undefined-3/undefined-1.md).

# 코딩 실습

{% tabs %}
{% tab title="무엇을 배우나요?" %}
타이핑 게임에서 배웠던 if 조건문과 while 반복문을 사용하여 \
가위 바위 보 게임을 만들어 보겠습니다.

이번엔 앞선 게임보다 더 많은 조건들을 사용하여 \
컴퓨터가 낸 가위 바위 보와\
사용자가 입력한 가위 바위 보를 비교하여\
승리와 패배 조건을 판단하여 전체 승률을 따져보는 게임을 만들어 봅니다.
{% endtab %}

{% tab title="게임 준비" %}

### 리스트와 변수

```python
import random

print('가위바위보 게임을 시작합니다!')
print("="*50)
game = ['가위', '바위', '보']
count = 0 #게임을 진행한 총 횟수를 세는 변수
win = 0 #여러분이 이긴 횟수를 세는 변수
```

타이핑 게임과 같이 이번에도 `랜덤`한 값을 사용하는 <mark style="color:red;">**`random`**</mark> 을 `import` 해 줍니다.

`print()` 문을 통해 게임의 간단한 시작을 화면에 출력해 주고,

컴퓨터가 제시하는 랜덤한 값을 사용하기 위해\
**`game`** 이란 이름의 리스트에 '가위', '바위', '보' 를 넣어 줍니다.

진행할 게임의 횟수는 총 6번인데 이 값을 넣어 줄 **`count`** 라는 변수와 \
사용자가 게임에 몇 번 승리 했는지 알려 줄 **`win`** 이란 변수를 만들고 각각 숫자 값 0을 넣어 줍니다.

<figure><img src="https://2274713776-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXZkADxMb7tPorRq9h63L%2Fuploads%2FqA6ZvCdDNOFXHNB7QCbS%2Fimage.png?alt=media&amp;token=850e32a8-25d0-435d-a2a8-b3d89bac51f6" alt=""><figcaption></figcaption></figure>

{% endtab %}

{% tab title="10번의 대결" %}

### 반복문 전체 코드

게임 횟수가 담겨있는 count 변수가 10보다 작다는 조건이 성립되면 while 반복문 안에 담겨있는 코드들이 동작하게 됩니다.

위에 다음 탭에서 반복문 안의 코드들을 자세히 살펴 봅시다.

```python
while count < 10 :
    computer = random.choice(game)
    answer = input("\n가위 바위 보 중 무엇을 낼까? (끝내고 싶으면 '그만'을 입력)\n")
	
    if answer == "그만":
        break
    
    count = count+1
    print("\n<" + str(count) + "번째 시합 >")
    print("======결과==========")
    print("컴퓨터: " + computer)
    print("나: " + answer)
    print("==================")

    #만약 컴퓨터가 가위를 냈다면
    
    if computer == '가위' :
        if answer == '가위' :
            print('비겼다!\n')
        elif answer == '바위' :
            print('이겼다!\n')
            win = win+1
        elif answer == '보' :
            print('졌다!\n')
        else:
            print("정확한 단어를 입력해 주세요!\n")      
    elif computer == '바위' :
        if answer == '가위' :
            print('졌다!\n')
        elif answer == '바위' :
            print('비겼다!\n')
        elif answer == '보' :
            print('이겼다!\n')
            win = win+1
        else:
            print("정확한 단어를 입력해 주세요!\n")     
    elif computer == '보' :
        if answer == '가위' :
            print('이겼다!\n')
            win = win+1
        elif answer == '바위' :
            print('졌다!\n')
        elif answer == '보' :
            print('비겼다!\n')
        else:
            print("정확한 단어를 입력해 주세요!\n")   
```

{% endtab %}

{% tab title="1 step" %}

### 1. 랜덤값과 입력 값

```python
computer = random.choice(game)
answer = input("\n가위 바위 보 중 무엇을 낼까? (끝내고 싶으면 '그만'을 입력)\n")
	
if answer == "그만":
    break

count = count+1
```

타이핑 게임에서 랜덤으로 동물들 이름을 선택했던 명령어가 기억나시나요?

<mark style="color:red;">**`random.choice()`**</mark>를 통해 이번에도 `game` 리스트에 담겨있는 '가위', '바위', '보' 중 하나를 \
랜덤으로 선택하여 대결에서 `컴퓨터`가 제시하게 할 것 입니다.

answer 변수에는 input() 명령어를 통해 화면에서 참여자에게 값을 입력 받게 합니다.

{% hint style="info" %}
input() 을 사용할 때 ( )안에 원하는 문장을 함께 입력하여 사용할 수 있습니다.
{% endhint %}

만약 참여자가 '그만'이란 값을 입력하면 break 명령문을 통해 while 반복문은 종료되게 됩니다.

마지막으로 다음 게임을 위해 count 변수에 1을 더해 줍니다.

{% hint style="info" %}
count = count + 1 은\
count += 1 로 줄여서 작성할 수 있습니다.
{% endhint %}

<figure><img src="https://2274713776-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXZkADxMb7tPorRq9h63L%2Fuploads%2FKkdC5B2mMQqAoMOHmSeg%2Fimage.png?alt=media&amp;token=e6947f5e-ce04-44cd-af85-c7166df22967" alt=""><figcaption></figcaption></figure>

###

### 2. 결과 출력

```python
 print("\n<" + str(count) + "번째 시합 >")
 print("======결과==========")
 print("컴퓨터: " + computer)
 print("나: " + answer)
 print("==================")
```

print() 문을 통해 화면에 결과를 출력해 줍니다.

![](https://2274713776-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXZkADxMb7tPorRq9h63L%2Fuploads%2FoebQyYx1gwPU26AW0gKQ%2Fimage.png?alt=media\&token=5ca673d0-1f0b-41fa-91dd-eed5ca7dcce2)

{% hint style="info" %}
print() 문 안에 있는 문장 중 **`\n`**&#xC774; 무엇인지 궁금한 분이 계신가요?

print() 문은 출력 후 자동으로 다음 줄로 커서가 이동하게 되는데 \
print() 문 안에 **`\n`**&#xC744; 입력하게 되면 다음줄로 이동하게 되는 결과를 얻게 됩니다.
{% endhint %}

![](https://2274713776-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXZkADxMb7tPorRq9h63L%2Fuploads%2FtopEOhLKxN32FPf7wOFH%2Fimage.png?alt=media\&token=50a12732-cf8d-4bf2-abc5-8db36918c88c)![](https://2274713776-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXZkADxMb7tPorRq9h63L%2Fuploads%2FcZJgU9SiyLpogIj9JRHs%2Fimage.png?alt=media\&token=0b05035e-da97-4ea5-ba16-c4f056649a5a)

(어떤 차이가 있는지 보이시나요?)

###

{% endtab %}

{% tab title="2 step" %}

### 결과 비교

```python
#만약 컴퓨터가 가위를 냈다면
if computer == '가위' :
    if answer == '가위' :
        print('비겼다!\n')
    elif answer == '바위' :
        print('이겼다!\n')
        win = win+1
    elif answer == '보' :
        print('졌다!\n')
    else:
        print("정확한 단어를 입력해 주세요!\n")
#만약 컴퓨터가 바위를 냈다면              
elif computer == '바위' :
    if answer == '가위' :
        print('졌다!\n')
    elif answer == '바위' :
        print('비겼다!\n')
    elif answer == '보' :
        print('이겼다!\n')
        win = win+1
    else:
        print("정확한 단어를 입력해 주세요!\n")
#만약 컴퓨터가 보를 냈다면             
elif computer == '보' :
    if answer == '가위' :
        print('이겼다!\n')
        win = win+1
    elif answer == '바위' :
        print('졌다!\n')
    elif answer == '보' :
        print('비겼다!\n')
    else:
        print("정확한 단어를 입력해 주세요!\n")            

```

`if조건문`은 앞에 타이핑 게임에서 사용했지만 아래 <mark style="color:red;">**`elif`**</mark>는 무엇인가요? 라고 질문하는 소리가 들리네요.

여러가지 조건들을 동시에 판단해야 할 때 `if` 조건문과 함께 `elif`와 `else` 조건문이 함께 사용 됩니다.

`elif` 는 else if 의 의미를 가지는데 만약 이 조건이 아니라 다른 조건이 맞다면 아래의 코드를 실행하세요\
라는 의미 입니다.

제일 먼저 상단에 있는 `if` 조건들을 살펴 보고 아니라면 아래에 있는 `elif` 조건들을, 그것도 아니라면\
마지막으로 `else` 에 있는 코드들을 실행하는 순서 입니다.

조금 복잡할 수 있지만 여러번 사용하다 보면 그 의미들을 이해할 수 있을 거에요!

```python
if computer == '가위':
    실행 코드
elif computer == '바위':    
    실행 코드
elif computer == '보':
    실행 코드         
```

컴퓨터가 가위를 내거나 바위 또는 보를 낼 수 있겠죠?(랜덤으로 선택된 값)

먼저 큰 틀은 위의 코드 처럼 **`3가지 조건`**&#xC785;니다.

그리고 작은 단위의 사용자가 입력한 값들을 비교하는 조건들이 들어 가게 됩니다.

```python
if answer == '가위' :
    print('비겼다!\n')
elif answer == '바위' :
    print('이겼다!\n')
    win = win+1
elif answer == '보' :
    print('졌다!\n')
else:
    print("정확한 단어를 입력해 주세요!\n")
```

컴퓨터가 가위니까 사용자도 가위면 당연히 게임은 무승부 겠죠?

이렇게 3가지 경우와 가위 바위 보 이외에 다른 값을 입력하게 되면 `else`로 넘어가 정확한 단어를 입력해 달라고 출력 후 다시 `while 반복문`으로 이동하게 됩니다.

만약 사용자가 바위를 입력 했다면 승리하게 되겠죠? 이때 승리 값이 담길 win 변수에 1를 더해 줍니다.

정리해 보자면 먼저 큰틀의 조건(컴퓨터의 값 - 가위 바위 보)을 판단하고 \
그 안의 사용자의 값을(가위 바위 보) 비교하여 승리와 패배를 판단하여 print() 문을 통해 화면에 알려 줍니다.

{% endtab %}

{% tab title="결과" %}

<pre class="language-python"><code class="lang-python"><strong>print("\n========총 대결 결과=================")
</strong>print(count,'번 승부 중', win,'번 이겼습니다!')
print("=====================================")

if win >= 5:
  print("미션 클리어!")
else:
  print("다시 도전해 주세요!")
</code></pre>

마지막으로 print() 문으로 결과를 출력해 줍니다.

`count` 변수와 `win` 변수에 어떤 값이 담겨 있는지 알고 있죠?

반복문을 실행할 때 마다 증가하는 `count` 변수는 게임의 횟수를,\
가위 바위 보 대결에서 승리할 때 마다 승리 결과 횟수를 `win`변수에 보관 하였습니다.

대결에서 참여가자 5번 이상 승리 하였다면 `"미션 클리어"`를 \
5번 미만이라면 `"다시 도전해 주세요"` 문구를 화면에서 보여 주게 조건문을 작성해 줍니다.

![](https://2274713776-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXZkADxMb7tPorRq9h63L%2Fuploads%2FxdZXQj8IRBX8uGPdJgAT%2Fimage.png?alt=media\&token=396d5d2d-1b4c-4240-8efb-51f5878e03e4)
{% endtab %}
{% endtabs %}
