> 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-2/undefined-1.md).

# 코딩 실습

아래 5 단계 탭을 순서대로 클릭하여 파이썬 타이핑 게임을 만드는 방법을 학습하고 직접 만들어 봅시다!

자\~ 그럼 시작해 볼까요? 😃

{% tabs %}
{% tab title="무엇을 배우나요?" %}

<figure><img src="https://2274713776-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXZkADxMb7tPorRq9h63L%2Fuploads%2FdP4uPODYzJ2f3fojhbAn%2Fimage.png?alt=media&amp;token=bf75aff6-57d0-446f-8bad-fc63e2a9dde5" alt=""><figcaption></figcaption></figure>

타이핑 게임에선  **`출력`**, **`변수`**, **`반복문`**, **`조건문`** 등 파이썬의 기본 문법을 살펴 보며 게임을 만들어 봅니다.

무슨 말인지 벌써부터 어렵게 느껴지나요? 걱정 마세요!\
순서대로 게임을 만들다 보면 자연스럽게 이해할 수 있을 거에요! 😄 😄 😄

{% endtab %}

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

### <mark style="background-color:blue;">1. import 명령어를 통해 random 기능과 time 기능을 사용</mark>

```python
import random
import time
```

타이핑 게임에선 **`랜덤`**&#xD558;게 나오는 단어들과 15초란 한정된 **`시간`**&#xC744; 준비해야 합니다.

위에 2줄 코드를 앞에서 만든 replit 파일에 작성해 주세요

### <mark style="background-color:blue;">2.  리스트를 사용해 랜덤하게 표시될 단어 만들기</mark>

<pre class="language-python"><code class="lang-python"><strong>animals = ["sheep","elephant","whale","giraffe","cat","dog","fox","monkey","mouse","panda","frog","snake","wolf"]
</strong></code></pre>

리스트는 책들이 차곡차곡 넣어져 있는 <mark style="color:red;">**`책장`**</mark>과 같습니다. 여기에선 **`animals`** 라는 이름의 책장에 다양한 동물이름이 적혀있는 책들이 넣어져 있다라고 생각해 주세요

역시 동일하게 다음줄에 위의 코드를 작성해 줍니다

{% hint style="info" %}
따라서 작성하기 어렵다면 위의 코드를 복사하여 replit에 붙여 넣어 주세요!
{% endhint %}

### <mark style="background-color:blue;">3. 게임 문제와 게임 시작 카운트다운을 표시할 변수 만들기</mark>

```python
number = 1
count = 3
```

변수는 숫자,문자 같은 값을 담을 수 있는 데이터 상자 입니다. **`number`** 라는 이름의 상자에 숫자 1의 값을, **`count`** 라는 상자에 숫자 3의 값을 담아 줍니다.

아래에 나오는 반복 명령문에서 number 상자의 값을 증가해 **`문제 번호`**&#xB97C; 보여 주고, 게임이 시작되면 count 상자의 값이 줄어들면서 **`게임의 시작`**&#xC744; 알려주는 역할을 하게 됩니다

### <mark style="background-color:blue;">4. 게임에 대한 설명을 작성</mark>

```python
print("*******영어 단어 타자 게임**********\n")
print("제시되는 단어를 15초 안에 정확히 입력해 주세요!")
print("\n준비되면 엔터키를 눌러 주세요!!")
input()
```

<mark style="color:red;">**`print()`**</mark> 명령어는 화면에 내용을 출력할 때 사용할 수 있습니다. 꼭 가로안에 " " 또는 ' ' 를 입력 후 원하는 문장을 작성해 주세요.

마지막으로 <mark style="color:red;">**`input()`**</mark> 명령어는 사용자가 직접 화면에 값을 타이핑 하여 입력하게 할 수 있습니다.

![](https://2274713776-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXZkADxMb7tPorRq9h63L%2Fuploads%2FAuuEH531qZbt9ut6WETh%2Fimage.png?alt=media\&token=fa2313cd-c4d0-4bfa-80e4-77cbd545693a)

{% endtab %}

{% tab title="카운트 다운" %}

### <mark style="background-color:blue;">1. enter 키를 누르면 반복문을 통해 카운트 다운</mark>&#x20;

```python
while True:  
  print(count,"...")
  time.sleep(1)
  count -= 1
  if count == 0:
    print("start!")
    print("="*30)
    break

start = time.time()
```

<mark style="color:red;">**`while`**</mark> 반복문은 말 그대로 \~ 하는 동안 계속해서 반복하는 명령어 입니다. \
while 옆에 적혀있는 **`True`**&#xB294; 반복문의 조건인데 보통 이렇게 조건 없이 \
True 라고 적게 되면 끝없이 반복하게 됩니다.

{% hint style="info" %}
반복문 안에 적혀있는 내용들을 계속 해서 반복하게 되는데 이때 적혀있는 내용들은 \
꼭 **`4칸 들여쓰기`**&#xB97C; 하고 작성해야 합니다!
{% endhint %}

자 그럼 반복문 안에 동작하는 코드들을 자세히 살펴 봅시다!

####

### <mark style="background-color:blue;">2. 카운트 다운 표시</mark>

```python
print(count,"...")
time.sleep(1)
count -= 1
```

**`print()`** 명령문 안에 있는 문장을 화면에 보여준 후 <mark style="color:red;">**`time.sleep(1)`**</mark> 명령으로 1초를 기다리고 **`count`** 변수의 값을 1 만큼 감소 시켜 줍니다. \
그럼 1초 마다 1씩 줄어 드는 count 변수의 값을 화면에 보여 주게 되겠죠?

####

### <mark style="background-color:blue;">3. 조건과 반복문 탈출</mark>

```python
if count == 0:
    print("start!")
    print("="*30)
    break
```

만약 이대로 계속 count의 값을 감소 한다면 아마 -1,-2 처럼 음수의 값도 화면에 표시될 겁니다.\
이것을 방지 하기 위해 조건을 하나 만들건데 이때 사용할 명령문이 바로 <mark style="color:red;">**`if 조건문`**</mark> 입니다.

사용 방법은 if 옆에 **`조건`**&#xC744; 작성하고 마무리로 **`:`**(콜론)을 작성하면 끝!\
그리고 조건에 맞게 실행할 코드를 역시 if문 아래에 **`4칸 들여쓰기`** 후 작성해 주면 됩니다.

여기선 count의 값이 0이 될때 start, =====(30개) 이 두 문장을 화면에 보여준 후\
&#x20;<mark style="color:red;">**`break`**</mark> 명령어로 반본문을 탈출하게 하는 코드가 실행 됩니다.

그렇다는 건 더이상 count의 값을 감소시키는 반복문이 실행되지 않겠죠?

![](https://2274713776-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXZkADxMb7tPorRq9h63L%2Fuploads%2F35WJAHQ9oB5EONTgiLwU%2Fimage.png?alt=media\&token=e027d61c-914c-46e6-b2c9-c2a834299bf5)

### <mark style="background-color:blue;">4. 시간 check 시작!</mark>

```python
start = time.time()
```

이제 반복문을 탈출했으니 마지막으로 타이핑 게임의 시간을 측정 합니다.

**`start`**&#xB77C;는 변수 상자에 시작 시간을 넣어 줄 건데 이때 사용할 명령어가 <mark style="color:red;">**`time.time()`**</mark> 입니다.

눈치 채신 분들고 있겠지만 time은 앞에서 제일 처음 작성한 시간 기능을 사용하기 위해\
**`import`** 로 불러온 time 입니다. \
time의 여러가지 기능 중에 시간과 관련된 명령어인 **`time()`** 함수 명령어를 사용하기 위해\
&#x20;**`.`**&#xC744; 붙여 time() 의 기능을 불러온 것입니다.

{% endtab %}

{% tab title="타이핑 게임" %}

### <mark style="background-color:blue;">1. 6문제 진행</mark>

```python
while number <=6:
  question = random.choice(animals)
  print("question", number)
  print(question)
  
  x = input()
  
  if question == x:
    print("\n정답!")
    print("================= \n")
    number += 1
  else:
    print("정확히 작성해 주세요!!!")
    print("================= \n")
```

while 반복문은 옆에 적힌 조건이 맞다면 계속해서 반복한다고 했죠?\
number 변수에는 숫자 1 값이 담겨 있는데 6보다 작거나 같다는 조건이 성립되니 \
number 의 값이 6이 될 때 까지 아래의 코드를 실행합니다.&#x20;

즉 6번째 문제가 나올 때 까지 반복한다는 뜻이겠죠?

###

### <mark style="background-color:blue;">2. 랜덤 문제</mark>

```python
question = random.choice(animals)
print("question", number)
print(question)
```

animals 라는 동물이름들이 담겨있는 리스트(책장) 기억나죠? 이 리스트에는, \
`양`, `코끼리`, `고래`, `기린`, `고양이`, `강아지`, `여우`, `원숭이`, `쥐`, `팬더`, `개구리`, `뱀`, `늑대` \
이렇게 13개의 동물 이름이 들어 있습니다.

\
13개의 동물 중 1개의 이름만 랜덤으로 선택하여 화면에 보여 줘야 하는데 \
이때 사용하는 명령어가 <mark style="color:red;">**`random.choice()`**</mark> 라는 명령어 입니다. \
( ) 안에 랜덤으로 뽑을 값이 담긴 리스트의 이름을 넣어주면 되죠!

그리고 print() 명령문으로 랜덤 값이 담긴 question 이란 변수와 number 변수의 값을 보여 줍니다.

![](https://2274713776-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXZkADxMb7tPorRq9h63L%2Fuploads%2Fwmq76nJAmMBf21a9NWKD%2Fimage.png?alt=media\&token=c4e06e96-8276-4a53-b79c-488d31304573)

{% hint style="info" %}
print()  명령어를 사용 할 때 ( ) 안에 `,` 를 기준으로 여러 값을 넣을 수 있습니다.\
주의해야 할 점은 넣어지는 여러 값들이 숫자, 문자와 같이 같은 값 이어야 합니다.
{% endhint %}

###

###

### <mark style="background-color:blue;">3. 정답과 오답 처리</mark>

```python
x = input()
  
if question == x:
  print("\n정답!")
  print("================= \n")
  number += 1
else:
  print("정확히 작성해 주세요!!!")
  print("================= \n")
```

**`input()`** 명령어는 사용자가 화면에서 값을 입력할 수 있게 해준다고 했죠?\
그 입력한 값을 x 라는 변수에 넣어 줍니다. 그리고 `정답`과 `오답` 처리를 진행하죠\~

`question` 에는 랜덤으로 뽑은 `동물 이름`이, `x` 에는 참여자가 직접 입력한 `동물 이름`이 담겨 있으니\
이 두 변수의 값을 비교하는 조건문을 만들어 봅시다!

question 과 x 가 같다면, 즉 랜덤 동물 이름과 타이핑한 이름이 같다면\
print() 명령어로 화면에 "정답!" 이라고 보여주고 다음 문제를 위해 number 값을 1 증가 시켜 줍니다.

오답이라면 "정확히 작성해 주세요!!!" 라고 보여주고 다시 입력할 수 있게 합니다.

![](https://2274713776-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXZkADxMb7tPorRq9h63L%2Fuploads%2Fh1bfrM64hZAz7b297Zjl%2Fimage.png?alt=media\&token=b8798834-e503-46c7-ad1d-36fdcc735318)

{% hint style="info" %}
코드들은 위에서 아래로 순차적으로 실행 됩니다. \
우리가 사용한 while 반복문도 마찬가지로\
랜덤으로 문제를 뽑고 사용자에게 값을 입력 받은 후\
조건문을 실행합니다.&#x20;

그리고 다시 맨 위로 올라와 number 값이 6보다 작은 지 확인 후\
맞다면 다시 랜덤 문제를 뽑고 입력값을 받고 조건문을 확인하고.....

이렇게 계속 반복해서 실행하게 됩니다.
{% endhint %}

###

###

### <mark style="background-color:blue;">4. 시간 측정</mark>

```python
end = time.time()
end_time = end - start
print("time : {:.2f} second".format(float(end_time)))
```

앞에서 게임을 시작할 때 시작 시간을 담았던 `start` 변수가 기억나시나요?

이번엔 게임 종료 시간을 **`end`** 변수에 `time.time()` 명령어로 담아 줍니다.

그리고 <mark style="color:red;">**`end_time`**</mark> 변수에 `end - start` 의 수식으로 게임의 총 play 시간을 계산값을 넣어 줍니다.

게임의 결과 시간은 익숙한 print() 명령어로 화면에 보여 주게 되는데...\
이번엔 문자열 포매팅이란 기법으로 화면에 출력해 지게 됩니다.

![](https://2274713776-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXZkADxMb7tPorRq9h63L%2Fuploads%2FEiLfXqTj9Nj6VoEkxFcL%2Fimage.png?alt=media\&token=26162a75-9667-4bcb-9755-ecb08130498d)

문자열 포매팅이란...\
쉽게 말해 다양한 값들을 좀 더 쉽게 화면에 표기하기 위한 기법이라고 기억해 주세요!
{% endtab %}

{% tab title="미션 성공 check" %}
![](https://2274713776-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXZkADxMb7tPorRq9h63L%2Fuploads%2FzTYQbApgzq3kyvzmsuyO%2Fimage.png?alt=media\&token=c9915826-026f-4ea9-860a-7202754d28df)

![](https://2274713776-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXZkADxMb7tPorRq9h63L%2Fuploads%2FbyEEemW9SgAt3CrJEFuN%2Fimage.png?alt=media\&token=7d4a88c9-045a-4dab-827f-bd61a82b67dc)

타이핑 게임이 잘 작동 되나요?

화면 상단의 **`Run`** 버튼을 누르면 오른쪽 화면에 `Console` 창에서 직접 값들을 입력하고 결과를 확인해 볼 수 있습니다.

잘 작동된다면 마지막으로 미션 성공 여부를 체크해야겠죠?

### <mark style="background-color:blue;">미션 성공! 실패! 조건문</mark>

```python
if float(end_time) > 15:
  print("아쉽네요.. 다시 한 번 도전해 보세요!")
elif float(end_time) < 16:
  print("축하해요! 비밀번호를 알려 드릴께요!")
  print("비밀번호: print()")
```

우리의 미션은 15초 안에 완벽하게 랜덤 문제들을 타이핑 할 수 있는가? 입니다.

그렇다면 최종 PLAY 시간이 담긴 **`end_time`** 변수의 시간 값이 \
15초 보다 크다면 `실패`고 작다면 `성공` 이겠죠?

앞에서 배운 `if조건문`과 `print()` 명령어를 통해 미션 성공여부를 판단하고 화면에 보여 줍시다!

{% endtab %}
{% endtabs %}
