# 호랑에듀 한글 코딩 기초 문법

한글 코딩을 위해 사용하는 문법을 정리해 두었어요.

### 문법이 궁금하신가요?

Windows라면 `Ctrl` + `K`를 눌러서, Mac이라면 `Cmd` + `K`를 눌러서 기능 또는 문법을 검색해 보세요.

iPad 또는 Galaxy Tab이라면 오른쪽 상단 돋보기 모양 검색하기 버튼을 눌러서 기능 또는 문법을 검색해 보세요.

### 기본

{% content-ref url="/pages/9EKCm1xrqICFjwEqt7Gr" %}
[값 종류(자료형)](/readme/001)
{% endcontent-ref %}

{% content-ref url="/spaces/2FsEVYMZ6ZxyaV7EnguD/pages/8VqD9duHNTBWt7cOySip" %}
[변수](/readme/002)
{% endcontent-ref %}

{% content-ref url="/spaces/2FsEVYMZ6ZxyaV7EnguD/pages/tERDKfNSwuib6iVqp2fy" %}
[리스트](/readme/003)
{% endcontent-ref %}

{% content-ref url="/spaces/2FsEVYMZ6ZxyaV7EnguD/pages/PKlM4S6phVh6AhuNIG9Y" %}
[리스트 (데이터 단일 추출)](/readme/004)
{% endcontent-ref %}

{% content-ref url="/pages/SomV82kA38YbQyH0qzrm" %}
[리스트 (데이터 삭제)](/readme/035)
{% endcontent-ref %}

{% content-ref url="/pages/LYJTN7nDHVLRObnGtScN" %}
[딕셔너리](/readme/undefined)
{% endcontent-ref %}

{% content-ref url="/pages/HdTMwLFq5qvxIkkMKZPG" %}
[중첩 딕셔너리와 리스트](/readme/undefined-1)
{% endcontent-ref %}

{% content-ref url="/spaces/2FsEVYMZ6ZxyaV7EnguD/pages/bUvPOwo4jLoEj9LBExB3" %}
[연산자](/readme/005)
{% endcontent-ref %}

{% content-ref url="/pages/htaAGyFU4rAiesZpwk61" %}
[비트연산자](/readme/undefined-2)
{% endcontent-ref %}

{% content-ref url="/pages/vY82obcQe8VFjuTPjLo8" %}
[비트연산자의 활용](/readme/undefined-3)
{% endcontent-ref %}

### 입출력

{% content-ref url="/spaces/2FsEVYMZ6ZxyaV7EnguD/pages/FoqaRqdYe5iOhnQ1Nf3O" %}
[출력 - 보여주기](/readme/006)
{% endcontent-ref %}

{% content-ref url="/spaces/2FsEVYMZ6ZxyaV7EnguD/pages/FfZcuJPnQN9erZP6IaAS" %}
[입력 - 입력받기](/readme/007)
{% endcontent-ref %}

### 조건문

{% content-ref url="/spaces/2FsEVYMZ6ZxyaV7EnguD/pages/pgGzcpUovCcMu4KFoLEf" %}
[조건문 - 만약](/readme/008)
{% endcontent-ref %}

### 반복문

{% content-ref url="/spaces/2FsEVYMZ6ZxyaV7EnguD/pages/OG47VtnewRMc2XHRYvMj" %}
[반복문 (범위 지정) - 반복](/readme/009)
{% endcontent-ref %}

{% content-ref url="/spaces/2FsEVYMZ6ZxyaV7EnguD/pages/q0ESrqgW1xzLDDNdik0l" %}
[반복문 (무한 반복) - 반복](/readme/010)
{% endcontent-ref %}

{% content-ref url="/pages/wrVJtqv3ReB7YcGynMJS" %}
[반복문 (리스트) - 반복](/readme/011)
{% endcontent-ref %}

### 함수

{% content-ref url="/spaces/2FsEVYMZ6ZxyaV7EnguD/pages/um5huORACJYLucD22oFi" %}
[함수 - 약속](/readme/012)
{% endcontent-ref %}

### 추가 제공 함수

{% content-ref url="/spaces/2FsEVYMZ6ZxyaV7EnguD/pages/fPtCKjBv1ULBkIWNIYoy" %}
[기다리기](/readme/024)
{% endcontent-ref %}

{% content-ref url="/spaces/2FsEVYMZ6ZxyaV7EnguD/pages/6TA0L1cc3zOn8iDwXLcm" %}
[현재 시간 가져오기](/readme/021)
{% endcontent-ref %}

{% content-ref url="/spaces/2FsEVYMZ6ZxyaV7EnguD/pages/qqFPwLoFdCEPsMBE7Jpt" %}
[무작위 값 가져오기](/readme/023)
{% endcontent-ref %}

{% content-ref url="/spaces/2FsEVYMZ6ZxyaV7EnguD/pages/MDZGTV4JEXy6ZULZLJzP" %}
[출력창 정리하기](/readme/022)
{% endcontent-ref %}

{% content-ref url="/pages/GDCONs8VTKsqjRIRbPFs" %}
[화면 그리기](/readme/undefined-6)
{% endcontent-ref %}

{% content-ref url="/pages/hLDXYUc8MRLraeLqHsEr" %}
[시간 정보 가져오기](/readme/undefined-7)
{% endcontent-ref %}

### 하랑이랑

{% content-ref url="/spaces/2FsEVYMZ6ZxyaV7EnguD/pages/G6Hx8bnXKy7lumhsDtd2" %}
[하랑이랑](/harang/013)
{% endcontent-ref %}

{% content-ref url="/spaces/2FsEVYMZ6ZxyaV7EnguD/pages/ZE6XfrlxSubYAtnze0cD" %}
[\[하랑이랑\] 출력 - 말하기](/harang/014)
{% endcontent-ref %}

{% content-ref url="/pages/cosxhwHDBdA4PtBDy6iy" %}
[\[하랑이랑\] 보이기 / 숨기기](/harang/undefined-1)
{% endcontent-ref %}

{% content-ref url="/spaces/2FsEVYMZ6ZxyaV7EnguD/pages/ATvLhJ9TITPRNjWUqPoV" %}
[\[하랑이랑\] 이동 (상대 좌표 이동) - 만큼 이동하기](/harang/015)
{% endcontent-ref %}

{% content-ref url="/pages/fmx2pgqtg8AKmEAWt5Px" %}
[\[하랑이랑\] 이동 (절대 좌표 이동) - 위치로 이동하기](/harang/undefined-2)
{% endcontent-ref %}

{% content-ref url="/spaces/2FsEVYMZ6ZxyaV7EnguD/pages/pFxEoXOKSgTU5fT8V6xW" %}
[\[하랑이랑\] 이동 (시간 지정) - 이동하기](/harang/016)
{% endcontent-ref %}

{% content-ref url="/spaces/2FsEVYMZ6ZxyaV7EnguD/pages/0xROFVhES4sWDe5B9oLO" %}
[\[하랑이랑\] 회전 (단순 회전) - 회전하기](/harang/017)
{% endcontent-ref %}

{% content-ref url="/spaces/2FsEVYMZ6ZxyaV7EnguD/pages/dNVNljEMr03Yb2X1glTY" %}
[\[하랑이랑\] 회전 (시간 지정) - 회전하기](/harang/018)
{% endcontent-ref %}

{% content-ref url="/spaces/2FsEVYMZ6ZxyaV7EnguD/pages/WBlNMl61bMFONWpnio9o" %}
[\[하랑이랑\] 크기 (단순 크기 변경) - 만큼 변경하기](/harang/019)
{% endcontent-ref %}

{% content-ref url="/spaces/2FsEVYMZ6ZxyaV7EnguD/pages/wzeUUDgxSGyEw3yetTuk" %}
[\[하랑이랑\] 크기 (시간 지정) - 변경하기](/harang/020)
{% endcontent-ref %}

### 아두이노

{% content-ref url="/spaces/2FsEVYMZ6ZxyaV7EnguD/pages/lYKKL7KzF3inTSEMRRHy" %}
[아두이노](/arduino/025)
{% endcontent-ref %}

{% content-ref url="/spaces/2FsEVYMZ6ZxyaV7EnguD/pages/s1WRSuG4pNrqxYlOoAs6" %}
[아두이노 보드를 호랑 서비스와 연결하는 방법](/arduino/029)
{% endcontent-ref %}

{% content-ref url="/spaces/2FsEVYMZ6ZxyaV7EnguD/pages/TGrjy1ooVdlvFxYYemwq" %}
[\[아두이노\] 핀 모드 설정](/arduino/026)
{% endcontent-ref %}

{% content-ref url="/spaces/2FsEVYMZ6ZxyaV7EnguD/pages/rKj8NP7MdEYammK0KFx7" %}
[\[아두이노\] 핀 입력 (데이터 읽기)](/arduino/027)
{% endcontent-ref %}

{% content-ref url="/spaces/2FsEVYMZ6ZxyaV7EnguD/pages/tVudrXTURg2VwGznQx0a" %}
[\[아두이노\] 핀 출력 (데이터 쓰기)](/arduino/028)
{% endcontent-ref %}

{% content-ref url="/spaces/2FsEVYMZ6ZxyaV7EnguD/pages/fuvsrOG1jsuH9KEx6u7G" %}
[\[아두이노\] 초음파 센서 코드](/arduino/030)
{% endcontent-ref %}

{% content-ref url="/spaces/2FsEVYMZ6ZxyaV7EnguD/pages/IOLtCWR5X7366G13Bs0W" %}
[\[아두이노\] 온습도 센서 코드](/arduino/031)
{% endcontent-ref %}

{% content-ref url="/spaces/2FsEVYMZ6ZxyaV7EnguD/pages/MPvdEXADfWSp3db1t994" %}
[\[아두이노\] 기압 센서 코드](/arduino/032)
{% endcontent-ref %}

{% content-ref url="/spaces/2FsEVYMZ6ZxyaV7EnguD/pages/RDQI8Lfbn5kG59Enk3UN" %}
[\[아두이노\] 부저 코드](/arduino/033)
{% endcontent-ref %}

### 마이크로비트

{% content-ref url="/pages/Maxq2godBFfIqA10RrlK" %}
[마이크로비트 보드를 호랑 서비스와 연결하는 방법](/microbit/034)
{% endcontent-ref %}

{% content-ref url="/pages/kRIHZEpbvFxCjV5pvFi9" %}
[\[마이크로비트\] 점화면 (LED 화면)](/microbit/037)
{% endcontent-ref %}

{% content-ref url="/pages/mgKWh9EFO61WL7oAvM5w" %}
[\[마이크로비트\] 버튼](/microbit/038)
{% endcontent-ref %}

{% content-ref url="/pages/olFLYRB0eWxxZSYCbt9u" %}
[\[마이크로비트\] 자이로 센서 좌표](/microbit/039)
{% endcontent-ref %}

{% content-ref url="/pages/Uh4HqkkpHim1vKRYn2w0" %}
[\[마이크로비트\] 온도 센서](/microbit/040)
{% endcontent-ref %}

{% content-ref url="/pages/Uh4HqkkpHim1vKRYn2w0" %}
[\[마이크로비트\] 온도 센서](/microbit/040)
{% endcontent-ref %}

### 인공지능

{% content-ref url="/pages/L5E4rwgHtgRbsFRKiH2B" %}
[\[인공지능\] 물어보기](/ai/041)
{% endcontent-ref %}

{% content-ref url="/pages/L5E4rwgHtgRbsFRKiH2B" %}
[\[인공지능\] 물어보기](/ai/041)
{% endcontent-ref %}

{% content-ref url="/pages/a66Qr1i6o0yusvnIBOJZ" %}
[\[인공지능\] 티처블 머신 사용하기](/ai/undefined)
{% endcontent-ref %}

### 수학

{% content-ref url="/pages/IdNV3IJSIxuy4MOdQ3A0" %}
[\[수학\] 반올림 / 올림 / 버림](/math/undefined)
{% endcontent-ref %}

{% content-ref url="/pages/qQGkISdg5xaRl1otwpMu" %}
[\[수학\] 절댓값](/math/undefined-1)
{% endcontent-ref %}

{% content-ref url="/pages/XtHNLautKvyztymWOaeE" %}
[\[수학\] 제곱 / 제곱근 / 거듭제곱](/math/undefined-2)
{% endcontent-ref %}

{% content-ref url="/pages/4pZxowfBZQjMe6R8c2Fp" %}
[\[수학\] 로그 / 상용로그 / 자연로그](/math/undefined-3)
{% endcontent-ref %}

{% content-ref url="/pages/6Z47O7hxt4HbzZf6r4Xm" %}
[\[수학\] 삼각함수 - 사인 / 코사인 / 탄젠트](/math/undefined-4)
{% endcontent-ref %}

{% content-ref url="/pages/HWDYUSluk6D9FeLzwCnc" %}
[\[수학\] 역삼각함수 - 아크사인 / 아크코사인 / 아크탄젠트](/math/undefined-5)
{% endcontent-ref %}

{% content-ref url="/pages/fsEny5ccsBzSIifdPGVO" %}
[\[수학\] 상수 (파이 π, 자연상수 e)](/math/p-e)
{% endcontent-ref %}

{% content-ref url="/pages/8gCB75tWT9qxCsX4sw35" %}
[\[수학\] 기초 통계 - 합계 / 평균 / 최댓값 / 최솟값](/math/undefined-6)
{% endcontent-ref %}

{% content-ref url="/pages/CK447uRDzLV9h3VUgHaE" %}
[\[수학\] 두 수 비교하기](/math/undefined-7)
{% endcontent-ref %}

{% content-ref url="/pages/4v3bIO7QV0ktNSUzz6H4" %}
[\[수학\] 무작위 값, 나머지 연산](/math/undefined-8)
{% endcontent-ref %}

{% content-ref url="/pages/jqloZNp86FbrV3q4iDp1" %}
[\[수학\] 각도-라디안 변환](/math/undefined-9)
{% endcontent-ref %}

{% content-ref url="/pages/qQGkISdg5xaRl1otwpMu" %}
[\[수학\] 절댓값](/math/undefined-1)
{% endcontent-ref %}


# 값 종류(자료형)

### 설명

한글 코딩에서는 아래와 같은 값 종류를 지원해요.

* 숫자
  * 숫자예요.
  * 예시) <mark style="color:red;">`1`</mark>, <mark style="color:red;">`3`</mark>, <mark style="color:red;">`42`</mark>, ...
* 문자열
  * 따옴표로 둘러싸여 글자, 단어, 문장을 표현하는 값이에요.
    * 예시) <mark style="color:red;">`"가나다"`</mark>, <mark style="color:red;">`"안녕 친구들"`</mark>, <mark style="color:red;">`"띄어쓸 수도 있어요!"`</mark>, ...
* 참/거짓
  * 어떤 조건이 맞거나 틀릴 때 가지는 값이에요.
  * 예시) `3 > 2`는 <mark style="color:red;">`참`</mark>, `"안녕" == "안녕 못해"`는 <mark style="color:red;">`거짓`</mark>
* 리스트 (또는 배열)
  * 데이터의 집합체로, 여러 데이터를 순서대로 나열하여 하나로 묶은 값이에요.
  * 예시) <mark style="color:red;">`[42, "문자열", "세 번째 값", ["또 다른 리스트", 1234]]`</mark>
* &#x20;딕셔너리 (또는 사전)
  * 여러 데이터를 이름(키)과 값의 형태로 묶어 저장하는 값이에요.\
    각 값은 순서가 아니라 이름으로 구분돼요.

    예시) <mark style="color:red;">`{ 이름: "하랑이", 학년: 6 }`</mark>

***

### 💡 참/거짓과 관련한 자세한 이야기 <a href="#more-story" id="more-story"></a>

컴퓨터에서 참과 거짓을 처리할 때, 거짓은 0으로 처리하고, 참은 1로 처리해요.

그런데 처리하는 것과 별개로, 참과 거짓을 판단할 때는 거짓으로 판단되는 값은 숫자 0만, 참으로 판단되는 값은 숫자 0 이외의 모든 값이에요.

그 이유는 컴퓨터는 전기로 신호를 처리하기 때문이에요. 0은 전기를 보내지 않은 것(부정)이고, 1은 전기를 보낸 것(긍정)인거죠. 그래서 전원 버튼을 나타내는 기호가 0과 1을 합쳐둔 모양인 거예요.

그리고, 숫자 0은 거짓이고, 문자 0은 참이에요. 이건 아스키코드와 유니코드의 특성에 대해 이해해야 해요.

문자 0은 아스키코드로 숫자 48이기에 참이 되는 거예요. 또한 숫자 0은 아스키코드에서 문자로 NULL이에요. 아무 것도 없다는 뜻이고, 전기적으로는 아무 것도 보내지 않은 것(부정)이랍니다. 그래서 거짓이 되는 거예요.

***

### 검색 키워드

정수, 소수, 문자, 단어, 불, bool, int, string, array


# 변수

### 코드

```
{변수이름} = {저장할 데이터}
```

***

### 설명

변수는 '변할 수 있는 수'로, 여러 데이터를 담아두는 기억 공간이예요.

여러 종류의 데이터를 저장할 수 있고, 저장할 수 있는 데이터는 [데이터 종류](/readme/001)를 참고하시면 돼요.

또한 변수의 개념은 상자에 빗대어 개념을 쉽게 이해할 수 있어요.

***

### 주의사항

* 변수 이름은 띄어쓸 수 없어요.
* 변수 이름은 숫자로 시작할 수 없어요.
* 변수 이름에는 언더바(\_)를 제외한 특수문자를 사용할 수 없어요.
* 변수 이름으로 예약어(보여주기, 입력받기, 반복 등)를 사용할 수 없어요.

***

### 파이썬 대응 코드

```
{변수이름} = {데이터}
```

***

### 예시

{% code title="예시 코드" %}

```
변수1 = "안녕 친구들"
변수2 = 1234
변수3 = 1 + 1

변수1 보여주기  # [변수를 출력하는 것으로, 변수와 무관합니다]
변수2 보여주기  # [변수를 출력하는 것으로, 변수와 무관합니다]
변수3 보여주기  # [변수를 출력하는 것으로, 변수와 무관합니다]
```

{% endcode %}

{% code title="예시 코드의 출력" %}

```
안녕 친구들
1234
2
```

{% endcode %}


# 리스트

### 코드

```
{리스트 이름} = [{저장할 데이터1}, {저장할 데이터2}, {저장할 데이터3}, ...]
```

***

### 설명

**리스트(또는  배열)**&#xB294; 여러 데이터를 하나로 묶어놓은 변수예요.

리스트는 대괄호 안에 데이터를 넣으면 되고, 쉼표를 통해 데이터를 구분해요.

한 리스트 안에는 여러 데이터 종류가 담길 수 있고, 또 다른 리스트(ex. 2차원 리스트, 3차원 리스트 등)을 쓸 수도 있어요.

***

### 주의사항

* 리스트 이름은 띄어쓸 수 없어요.
* 리스트 이름은 숫자로 시작할 수 없어요.
* 리스트 이름에는 언더바(\_)를 제외한 특수문자를 사용할 수 없어요.
* 리스트 이름으로 예약어(보여주기, 입력받기, 반복 등)를 사용할 수 없어요.

***

### 파이썬 대응 코드

```
{리스트 이름} = [{저장할 데이터1}, {저장할 데이터2}, {저장할 데이터3}, ...]
```

***

### 예시

{% code title="예시 코드" %}

```
리스트1 = ["안녕1", "안녕2", "안녕3"]
리스트2 = [1234, 5678, 1357, 2468]
리스트3 = ["안녕1", 1234, ["반가워, "친구들"]]

리스트1 보여주기  # [리스트를 출력하는 것으로, 리스트과 무관합니다]
리스트2 보여주기  # [리스트를 출력하는 것으로, 리스트과 무관합니다]
리스트3 보여주기  # [리스트를 출력하는 것으로, 리스트과 무관합니다]
```

{% endcode %}

{% code title="예시 코드의 출력" %}

```
["안녕1", "안녕2", "안녕3"]
[1234, 5678, 1357, 2468]
["안녕1", 1234, ["반가워, "친구들"]]
```

{% endcode %}

***

### 검색 키워드

리스트, 배열, 집합, 클래스, class


# 리스트 (데이터 단일 추출)

### 코드

```
{리스트이름}[인덱스]
```

***

### 설명

선언한 리스트에서 단일 데이터를 추출할 때 사용해요.

리스트 이름을 그대로 출력하면 리스트의 모든 데이터가 리스트 형태로 출력되지만, 단일 추출을 활용해서 출력하면 리스트에서 한 개의 데이터를 출력할 수 있어요.

인덱스는 리스트의 각 데이터 위치인 주소를 나타내요. 리스트에 저장한 데이터 순서대로 인덱스는 처음이 0이 돼요.

***

### 주의사항

* 인덱스는 0부터 시작해요. 아래 코드를 참고하면 돼요.

{% code title="예시 코드1" %}

```
테스트리스트 = [1, 2, 3, 4, 5]
테스트리스트[0] 보여주기
테스트리스트[1] 보여주기
```

{% endcode %}

{% code title="예시 코드1의 출력" %}

```
1
2
```

{% endcode %}

* 리스트 이름은 띄어쓸 수 없어요.
* 리스트 이름은 숫자로 시작할 수 없어요.
* 리스트 이름에는 언더바(\_)를 제외한 특수문자를 사용할 수 없어요.
* 리스트 이름으로 예약어(보여주기, 입력받기, 반복 등)를 사용할 수 없어요.

***

### 파이썬 대응 코드

```
{배열이름}[인덱스]
```

***

### 예시

{% code title="예시 코드1" %}

```
리스트 = [1234, 5678, 1357, 2468]

리스트[0] 보여주기  # [리스트의 인덱스 위치에 있는 값을 출력하는 것으로, 리스트와 무관합니다]
리스트[1] 보여주기  # [리스트의 인덱스 위치에 있는 값을 출력하는 것으로, 리스트와 무관합니다]
리스트[2] 보여주기  # [리스트의 인덱스 위치에 있는 값을 출력하는 것으로, 리스트와 무관합니다]
리스트[3] 보여주기  # [리스트의 인덱스 위치에 있는 값을 출력하는 것으로, 리스트와 무관합니다]
```

{% endcode %}

{% code title="예시 코드1의 출력" %}

```
1234
5678
1357
2468
```

{% endcode %}

***

### 검색 키워드

리스트, 집합, 클래스, class


# 리스트 (데이터 삭제)

### 코드

```
{리스트이름} {인덱스}번째 값 제거
```

***

### 설명

선언한 리스트에서 단일 데이터를 삭제할 때 사용해요.

데이터를 삭제한 후 삭제된 새로운 리스트를 반환해요. 새로운 리스트를 기존 리스트에 자동으로 저장하지 않아요.

***

### 주의사항

* 삭제 후 새로운 리스트를 저장하지 않아요. 기존 리스트에 저장(덮어쓰기)해야 해요.
* 인덱스는 0부터 시작해요. 아래 코드를 참고하면 돼요.

{% code title="예시 코드1" %}

```
테스트리스트 = [1, 2, 3, 4, 5]
테스트리스트[0] 보여주기
테스트리스트[1] 보여주기
```

{% endcode %}

{% code title="예시 코드1의 출력" %}

```
1
2
```

{% endcode %}

***

### 파이썬 대응 코드

```
del {리스트이름}[인덱스]
```

단, 파이썬의 del은 삭제 후 새로운 리스트를 기존 리스트에 자동으로 저장해요.

***

### 예시

{% code title="예시 코드1" %}

```
리스트 = [1234, 5678, 1357, 2468]

리스트 = 리스트 1번째 값 제거
리스트 보여주기
```

{% endcode %}

{% code title="예시 코드1의 출력" %}

```
[1234, 1357, 2468]
```

{% endcode %}

***

### 검색 키워드

리스트, 집합, 클래스, class


# 딕셔너리

### 코드

```
{딕셔너리_이름} = {
 키: 값
}

{딕셔너리_이름} 보여주기
{딕셔너리_이름}["키"] 보여주기
```

***

### 설명

**딕셔너리(또는  사전)**&#xB294; 여러 개의 정보를 한 번에 묶어서 저장할 수 있는 자료형이에요.\
각 정보는 키(key)와 값(value) 한 쌍으로 이루어져 있어요.

이 예시에서는 한 학생의 정보를 딕셔너리 형태로 저장했어요.\
학년, 반, 번호, 진로와 같은 여러 정보를 하나의 변수에 담을 수 있어요.

딕셔너리 이름만 출력하면 저장된 모든 정보를 한 번에 확인할 수 있고,\
`["키"]` 문법을 사용하면 원하는 정보 하나만 꺼내서 볼 수 있어요.

***

### 주의사항

* 키 이름은 정확하게 입력해야 해요.
* 딕셔너리에 없는 키를 사용하면 값을 가져올 수 없어요.

***

### 파이썬 대응 코드

```
딕셔너리_이름 = { 키1: 값1, 키2: 값2, 키3: 값3 }
```

***

### 예시

{% code title="예시 코드" %}

```
예시
학생 = {
    학년: 6
    반: 3
    번호: 14
    진로: "개발자"
}
​
학생 보여주기
학생["학년"] 보여주기
학생["반"] 보여주기
학생["번호"] 보여주기
학생["진로"] 보여주기
```

{% endcode %}

{% code title="예시 코드의 출력" %}

```
{
    학년: 6
    반: 3
    번호: 14
    진로: "개발자"
}
6
3
14
개발자
```

{% endcode %}

***

### 검색 키워드

딕셔너리, 자료형, 키와 값, 데이터 저장, 값 종류


# 중첩 딕셔너리와 리스트

### 코드

{% code title="중첩 딕셔너리 (딕셔너리 안에 딕셔너리를 넣는 경우)" %}

```
{딕셔너리_이름} = {
    키1: 값1,
    키2: {
        하위키1: 값A,
        하위키2: 값B
    }
}

{딕셔너리_이름}["키2"]["하위키1"]
```

{% endcode %}

{% code title="딕셔너리 안에 리스트를 넣는 경우" %}

```
{딕셔너리_이름} = {
    키1: 값1,
    키2: [값A, 값B, 값C]
}

{딕셔너리_이름}["키1"]
{딕셔너리_이름}["키2"][0]
```

{% endcode %}

{% code title="리스트 안에 딕셔너리를 넣는 경우" %}

```
{리스트_이름} = [
    {키1: 값1, 키2: 값2},
    {키1: 값1, 키2: 값2},
    {키1: 값1, 키2: 값2}
]

{리스트_이름}[0]
{리스트_이름}[0]["키1"]
```

{% endcode %}

***

### 설명

**딕셔너리**는 키(key)와 값(value)의 형태로 데이터를 저장하는 자료형이에요.\
**리스트**는 여러 개의 데이터를 순서대로 저장하는 자료형이에요.

이 두 가지를 함께 사용하면\
구조가 있는 복잡한 데이터를 매우 깔끔하게 표현할 수 있어요.

특히 다음과 같은 상황에서 자주 사용돼요.

* 여러 사람의 정보 관리
* 인공지능 분류 결과를 여러 개 저장할 때
* 게임 기록, 설정 값, 사용자 정보처럼 비슷한 형식의 데이터가 많을 때

딕셔너리 안에 딕셔너리를 넣으면 중첩 딕셔너리가 되고,\
딕셔너리 안에 리스트를 넣거나, 리스트 안에 딕셔너리를 넣어\
현실 세계의 정보 구조를 그대로 표현할 수 있어요.

값에 접근할 때는

* 딕셔너리는 `["키"]`
* 리스트는 `[번호]`\
  를 사용하며, 여러 구조가 섞여 있을 경우 차례대로 이어서 접근해요.

***

### 주의사항

* 키 이름은 정확하게 입력해야 해요.
* 딕셔너리에 없는 키를 사용하면 값을 가져올 수 없어요.
* 리스트는 0부터 번호가 시작해요.

***

### 파이썬 대응 코드

```
리스트_이름 = [
    {"키1": 값1, "키2": 값2},
    {"키1": 값1, "키2": 값2},
    {"키1": 값1, "키2": 값2}
]
```

***

### 예시

{% code title="예시 코드" %}

```
학생 = {
    이름: "하랑이",
    학년: 6,
    취미: ["게임", "독서"],
    보호자: {
        이름: "하랑이 부모님"
        연락처: "010-1234-5678"
    },
    수강과목: [
        {과목명: "수학", 요일: "월요일"},
        {과목명: "과학", 요일: "수요일"}
    ]
}

학생["이름"] 보여주기
학생["취미"][0] 보여주기
학생["보호자"]["연락처"] 보여주기
학생["수강과목"][1]["과목명"] 보여주기
```

{% endcode %}

{% code title="예시 코드의 출력" %}

```
하랑이
게임
010-1234-5678
과학
```

{% endcode %}

***

### 검색 키워드

딕셔너리, 자료형, 키와 값, 데이터 저장, 값 종류, 중첩 딕셔너리, 리스트


# 길이

### 코드

```
{요소} 길이
```

***

### 설명

문자열 또는 리스트의 길이를 가져와요.

문자열 또는 리스트를 변수에 저장하고 변수 이름을 써도 돼요.

***

### 주의사항

* 문자열과 리스트 외의 다른 데이터 종류의 길이는 가져올 수 없어요.

***

### 파이썬 대응 코드

```
len({요소})
```

***

### 예시

{% code title="예시 코드1" %}

```
리스트 = [1234, 5678, 1357, 2468]
리스트 길이 보여주기
"안녕 반가워" 길이 보여주기
```

{% endcode %}

{% code title="예시 코드1의 출력" %}

```
4
6
```

{% endcode %}

***

### 검색 키워드

length


# 연산자

### 설명

연산자는 데이터를 계산하고 비교하는 등의 작업을 하기 위한 기호예요.

한글 코딩에서는 아래와 같은 연산자를 지원해요.

* 산술 연산자
  * <mark style="color:purple;">`+`</mark> : 무언가를 더합니다.
    * 숫자 + 숫자 → 숫자 (10 + 10 → 20)
    * 문자 + 문자 → 문자 ("안녕" + "친구들" → "안녕친구들")
    * 문자 + 숫자 → 문자 ("10" + 20 → "1020")
  * <mark style="color:purple;">`-`</mark> : 숫자를 뺍니다.
    * 숫자 - 숫자 → (10 - 6 → 4)
  * <mark style="color:purple;">`*`</mark> : 무언가를 곱합니다.
    * 숫자 + 숫자 → 숫자 (10 \* 2 → 20)
    * 문자 + 숫자 → 문자 ("안녕" \* 4 → "안녕안녕안녕안녕")
  * <mark style="color:purple;">`/`</mark> : 앞 수에서 뒤 수를 나눕니다.
    * 숫자 + 숫자 → 숫자 (10 / 4 → 2.5)
  * <mark style="color:purple;">`//`</mark> : 앞 수에서 뒤 수를 나누어 몫을 계산합니다.
    * 숫자 + 숫자 → 숫자 (10 // 4 → 2)
  * <mark style="color:purple;">`%`</mark> : 앞 수에서 뒤 수를 나누어 나머지를 계산합니다.
    * 숫자 + 숫자 → 숫자 (10 % 4 → 2)
  * <mark style="color:purple;">`**`</mark> : 앞 수를 뒤 수만큼 제곱합니다.
    * 숫자 + 숫자 → 숫자 (2 \*\* 3 → 8)
* 비교 연산자
  * <mark style="color:purple;">`<`</mark> : 왼쪽 수가 오른쪽 수보다 작은지(미만) 비교합니다.
    * 숫자 < 숫자 → 참/거짓 (3 < 4 → 참)
  * <mark style="color:purple;">`<=`</mark> : 왼쪽 수가 오른쪽 수보다 작거나 같은지(이하) 비교합니다.
    * 숫자 <= 숫자 → 참/거짓 (3 <= 3 → 참)
  * <mark style="color:purple;">`>`</mark> : 왼쪽 수가 오른쪽 수보다 큰지(초과) 비교합니다.
    * 숫자 > 숫자 → 참/거짓 (3 > 4 → 참)
  * <mark style="color:purple;">`>=`</mark> : 왼쪽 수가 오른쪽 수보다 크거나 같은지(이상) 비교합니다.
    * 숫자 >= 숫자 → 참/거짓 (3 >= 3 → 참)
  * <mark style="color:purple;">`==`</mark> : 왼쪽 데이터와 오른쪽 데이터가 같은지 비교합니다.
    * 숫자 == 숫자 → 참/거짓 (3 == 3 → 참)
    * 문자 == 문자 → 참/거짓 ("안녕" == "반가워" → 거짓)
  * <mark style="color:purple;">`!=`</mark> : 왼쪽 데이터와 오른쪽 데이터가 같지 않은지(다른지) 비교합니다.
    * 숫자 != 숫자 → 참/거짓 (3 != 3 → 거짓)
    * 문자 != 문자 → 참/거짓 ("안녕" != "반가워" → 참)
* 논리 연산자
  * <mark style="color:purple;">`이고`</mark>, <mark style="color:purple;">`고`</mark> : 두 개의 비교 연산 결과가 모두 참인지 확인합니다.
    * {비교 연산} 이고/고 {비교 연산}
      * (참 이고 참 → 참)
      * (참 이고 거짓 → 거짓)
      * (거짓 이고 거짓 → 거짓)
  * <mark style="color:purple;">`이거나`</mark>, <mark style="color:purple;">`거나`</mark> : 두 개의 비교 연산 결과 중 하나 이상이 참인지 확인합니다.
    * {비교 연산} 이거나/거나 {비교 연산}
      * (참 이거나 참 → 참)
      * (참 이거나 거짓 → 참)
      * (거짓 이거나 거짓 → 거짓)
  * <mark style="color:purple;">`!`</mark> : 바로 뒤의 내용을 부정(반전)합니다.
    * !{비교 연산}
      * !참 → 거짓
      * !거짓 → 참
    * <mark style="color:purple;">`!!`</mark>를 통해 **이중 부정**을 사용할 수도 있습니다. 아래의 예시 상황을 참고해 주세요.
      * !!참→ 참
      * !!거짓 → 거짓
      * 자세한 내용은 [데이터 종류의 <참/거짓과 관련한 자세한 이야기>](https://codebook.horang.it/000/001#more-story)를 참고해 주세요.

***

### 검색 키워드

더하기, 빼기, 곱하기, 나누기, 비교하기, 크다, 작다, 이상, 이하, 초과, 미만, 같다, 등호, 부등호


# 비트연산자

### 코드

{% code title="비트 단위 논리곱(AND)을 구할 때" %}

```
(값1) & (값2)
```

{% endcode %}

{% code title="비트 단위 논리합(OR)을 구할 때" %}

```
(값1) | (값2)
```

{% endcode %}

{% code title="비트 단위 배타적 논리합(XOR)을 구할 때" %}

```
(값1) ^ (값2)
```

{% endcode %}

{% code title="비트 단위 부정(NOT)을 구할 때" %}

```
~(값1)
```

{% endcode %}

{% code title="왼쪽 비트 이동 연산자, 왼쪽 시프트 연산자" %}

```
(값) << (숫자)
```

{% endcode %}

{% code title="오른쪽 비트 이동 연산자, 오른쪽 시프트 연산자" %}

```
(값) >> (숫자)
```

{% endcode %}

***

### 설명

비트 연산자는 값을 2진수로 바꿔 각 자리끼리 계산합니다.

* AND(`&`) : 두 비트가 모두 1일 때만 1
* OR(`|`) : 둘 중 하나라도 1이면 1

  <figure><img src="/files/Y5D8LX4R7yoDcu85hr0F" alt=""><figcaption></figcaption></figure>
* XOR(`^`) : 두 비트가 서로 다르면 1
* NOT(`~`) : 0과 1을 뒤집음<br>

  <figure><img src="/files/2E3Ozt212KhKAzguRV1A" alt=""><figcaption></figcaption></figure>
* `<<` : 비트를 왼쪽으로 밀어 값이 커짐
* `>>` : 비트를 오른쪽으로 밀어 값이 작아짐

  <figure><img src="/files/vHYR4Uz04a6H79hRwNLq" alt=""><figcaption></figcaption></figure>

***

### 주의사항

* `>>`에서 이동 칸 수가 비트 길이보다 크면 0이 될 수 있습니다.
* 10진수가 아닌 값을 사용할 때는 `2진수 0011`처럼 작성합니다.

***

### 파이썬 대응 코드

```
a & b
a | b
a ^ b
~a
a << n
a >> n
```

***

### 예시

{% code title="예시 코드" %}

```
ㄱ = 2진수 0011
ㄴ = 2진수 0110

ㄱ & ㄴ 보여주기
ㄱ | ㄴ 보여주기
ㄱ ^ ㄴ 보여주기
~ㄱ 보여주기
ㄱ << 1 보여주기
ㄴ >> 2 보여주기
```

{% endcode %}

{% code title="예시 코드의 출력" %}

```
2   # 0011 & 0110 = 0010
7   # 0011 | 0110 = 0111
5   # 0011 ^ 0110 = 0101
12   # ~0011 = 1100
6   # 0011 << 1 = 0110
1   # 0110 >> 2 = 0001
```

{% endcode %}

***

### 검색 키워드

비트연산자, AND, OR, XOR, NOT, 논리합, 논리곱, 배타적논리합,  부정, 시프트, 왼쪽시프트, 오른쪽시프트


# 비트연산자의 활용

### 코드

{% code title="보수와 마스크를 사용할 때" %}

```
~(값) & 16진수 FF
```

{% endcode %}

{% code title="진수를 변환할 때" %}

```
(값) 의 이진수/팔진수/십진수/십육진수 값
(값) 의 2진수/8진수/10진수/16진수 값
```

{% endcode %}

{% code title="자릿수를 맞춰 출력할 때" %}

```
(값) 의 이진수/팔진수/십진수/십육진수 값 (숫자)자리로
```

{% endcode %}

***

### 설명

비트 연산 결과를 원하는 진수 형태로 변환해 확인할 수 있습니다.

* &#x20;`의 이진수 값` : 결과를 2진수 문자열로 보여줍니다.

* &#x20;`의 십진수 값` : 결과를 10진수 문자열로 보여줍니다.

* &#x20;`(숫자)자리로` : 앞자리를 0으로 채워 자릿수를 맞춥니다.

* `~` (보수)는 비트를 뒤집어 숫자의 성질을 반대로 만듭니다.

* `& 16진수 FF` (마스크)는 무한히 뻗어 나가는 비트를 딱 8개만 남기고 잘라내는 '절단기' 역할을 합니다.

***

### 주의사항

* `16진수 FF` 같은 마스크를 사용하면 하위 비트만 남길 수 있습니다.
* 자리수 지정 시 부족한 자리는 `0`으로 채워집니다.
* 진수 변환 결과는 계산 검증용으로 함께 제시하면 이해가 쉽습니다.

***

### 파이썬 대응 코드

```
n = (~10) & 0xFF
bin(n)[2:] # 이진수 값
str(n) # 십진수 값
format(n, "08b") # 이진수 8자리
format(25, "03d") # 십진수 3자리
```

***

### 예시

{% code title="예시 코드" %}

```
ㄱ = ~10
ㄴ = ㄱ & 16진수 FF

ㄴ 의 이진수 값 보여주기
ㄴ 의 십진수 값 보여주기
ㄴ 의 이진수 값 10자리로 보여주기
25 의 십진수 값 3자리로 보여주기
```

{% endcode %}

{% code title="예시 코드의 출력" %}

```
# (ㄱ = ~(00001010) = 11110101)
# (ㄴ = 11110101 & 11111111 = 11110101)
11110101 # 11110101
245      # 이진수 11110101은 십진수로 245
0011110101 # 이진수 11110101을 10자리로 보여주기
025
```

{% endcode %}

***

### 검색 키워드

비트연산자, 비트마스크, 보수, 2진수, 8진수, 10진수, 16진수, 진수 변환, 자리 수 채우기


# 출력 - 보여주기

### 코드

```
{출력할 데이터} 보여주기
```

***

### 설명

<mark style="color:purple;">`보여주기`</mark>는 기본 출력 함수로, 원하는 데이터를 화면에 보여줄 수 있어요.

프로그램 상에서 숫자, 문자열, 연산 결과 등 원하는 종류의 데이터를 코드를 통해 출력할 수 있어요.

***

### 주의사항

* <mark style="color:purple;">`보여주기`</mark> 앞에 출력할 데이터를 작성해야 해요.
* 출력할 데이터와 <mark style="color:purple;">`보여주기`</mark> 사이에는 띄어쓰기가 있어야 해요.
* <mark style="color:purple;">`보여주기`</mark>가 잘 작동하지 않는다면, 아래 코드와 같이 출력할 데이터에 괄호를 씌워주세요.

```
(1 + 1) 보여주기
```

***

### 파이썬 대응 코드

```
print()
```

***

### 예시

{% code title="예시 코드" %}

```
"안녕 친구들" 보여주기
1234 보여주기
1 + 1 보여주기

변수이름 = "변수데이터"  # [변수를 선언하는 것으로, 출력과 무관합니다]

변수이름 보여주기
```

{% endcode %}

{% code title="예시 코드의 출력" %}

```
안녕 친구들
1234
2
변수데이터
```

{% endcode %}

***

### 검색 키워드

출력하기


# 입력 - 입력받기

### 코드

{% code title="입력받는 창에 힌트를 보여주지 않을 때" %}

```
입력받기
```

{% endcode %}

{% code title="입력받는 창에 힌트를 보여줄 때" %}

```
{힌트 문자열} 입력받기
```

{% endcode %}

***

### 설명

<mark style="color:purple;">`입력받기`</mark>는 기본 입력 함수로, 원하는 데이터를 입력할 수 있어요.

***

### 주의사항

* 입력한 데이터는 숫자만 입력하면 숫자로, 문자열은 문자열로 자동 처리돼요.

***

### 파이썬 대응 코드

```
input()
```

***

### 예시

{% code title="예시 코드" %}

```
변수1 = 입력받기
변수2 = "변수2에 들어갈 데이터를 알려줘!" 입력받기
숫자1 = "숫자1을 알려줘!" 입력받기
숫자2 = "숫자2를 알려줘!" 입력받기

변수1 보여주기  # [변수를 출력하는 것으로, 입력과 무관합니다]
변수2 보여주기  # [변수를 출력하는 것으로, 입력과 무관합니다]
숫자1 보여주기  # [변수를 출력하는 것으로, 입력과 무관합니다]
숫자2 보여주기  # [변수를 출력하는 것으로, 입력과 무관합니다]
```

{% endcode %}

{% code title="예시 코드의 출력" %}

```
{사용자가 입력한 데이터1}
{사용자가 입력한 데이터2}
{사용자가 입력한 데이터3}
{사용자가 입력한 데이터4}
```

{% endcode %}

***

### 검색 키워드

입력하기


# 조건문 - 만약

### 코드

{% code title="조건이 참일 때만 실행" %}

```
만약 {조건} 이면
    {조건 충족 시 실행할 코드}
```

{% endcode %}

{% code title="조건이 참일 때 / 거짓일 때 실행" %}

```
만약 {조건} 이면
    {조건 충족 시 실행할 코드}
아니면
    {조건 미충족 시 실행할 코드}
```

{% endcode %}

{% code title="조건이 참일 때 / 다른 조건이 참일 때 실행" %}

```
만약 {조건1} 이면
    {조건1 충족 시 실행할 코드}
아니면 만약 {조건2} 이면
    {조건2 충족 시 실행할 코드}
```

{% endcode %}

{% code title="조건이 참일 때 / 다른 조건이 참일 때 / 거짓일 때 실행" %}

```
만약 {조건1} 이면
    {조건1 충족 시 실행할 코드}
아니면 만약 {조건2} 이면
    {조건2 충족 시 실행할 코드}
아니면
    {모든 조건 미충족 시 실행할 코드}
```

{% endcode %}

이 외에도 여러 다양한 조합으로 사용할 수 있어요.

***

### 설명

<mark style="color:purple;">`만약`</mark>은 조건에 따라 원하는 코드를 실행하고 싶을 때 사용해요.

<mark style="color:purple;">`만약`</mark>은 필수지만, <mark style="color:purple;">`아니면 만약`</mark>과 아니면은 필수가 아니예요. <mark style="color:purple;">`만약`</mark> + <mark style="color:purple;">`아니면 만약`</mark> 조합, <mark style="color:purple;">`만약`</mark> + <mark style="color:purple;">`아니면`</mark> 조합, <mark style="color:purple;">`만약`</mark> + <mark style="color:purple;">`아니면 만약`</mark> + <mark style="color:purple;">`아니면`</mark> 조합 등 다양하게 조합해 사용할 수 있어요.

***

### 주의사항

* <mark style="color:purple;">`아니면 만약`</mark>은 여러 번 사용할 수 있지만, <mark style="color:purple;">`아니면`</mark>은 한 번만 사용할 수 있어요. 아래 예시를 참고해 주세요.

{% code title="사용할 수 없는 예시" %}

```
만약 1 == 2 이면
    "안녕" 보여주기
아니면
    "아닌데?" 보여주기
아니면
    "아니라고!" 보여주기
```

{% endcode %}

***

### 파이썬 대응 코드

```
if 1 > 2:
    print("1은 2보다 커")  # [출력하는 것으로, 조건문과 무관합니다]
elif 1 == 2:
    print("1은 2랑 같아!")  # [출력하는 것으로, 조건문과 무관합니다]
else:
    print("1은 2보다 작아!")  # [출력하는 것으로, 조건문과 무관합니다]
```

<mark style="color:purple;">`만약`</mark>은 <mark style="color:purple;">`if`</mark>와, 아니면 <mark style="color:purple;">`만약`</mark>은 <mark style="color:purple;">`elif`</mark>랑, <mark style="color:purple;">`아니면`</mark>은 <mark style="color:purple;">`else`</mark>랑 같아요.

***

### 예시

{% code title="예시 코드" %}

```
만약 1 > 2 이면
    "1은 2보다 커!" 보여주기  # [출력하는 것으로, 조건문과 무관합니다]
아니면 만약  1 == 2 이면
    "1은 2랑 같아!" 보여주기  # [출력하는 것으로, 조건문과 무관합니다]
아니면
    "1은 2보다 작아!" 보여주기  # [출력하는 것으로, 조건문과 무관합니다]
```

{% endcode %}

{% code title="예시 코드의 출력" %}

```
1은 2보다 작아!
```

{% endcode %}


# 반복문 (범위 지정) - 반복

### 코드

```
반복 {범위 시작}~{범위 끝} 의 {반복 횟수가 저장될 변수 이름} 마다
    {반복할 코드}
```

```
{숫자}번 반복
    {반복할 코드}
```

***

### 설명

<mark style="color:purple;">`반복문`</mark>은 원하는 코드를 여러 번 반복해서 실행할 수 있게 하는 코드예요.

***

### 주의사항

* 딱히 없습니다!

***

### 파이썬 대응 코드

```
for i in range(A, B):
    # 반복할 코드
```

***

### 예시

{% code title="예시 코드1" %}

```
반복 1~10 의 출력한횟수 마다
    "지금 반복 중인 횟수 : " + 출력한횟수 보여주기  # [문자열과 변수를 출력하는 것으로, 반복문과 무관합니다]
```

{% endcode %}

{% code title="예시 코드2" %}

```
10번 반복
    "지금 반복 중인 횟수 : " + 출력한횟수 보여주기  # [문자열과 변수를 출력하는 것으로, 반복문과 무관합니다]
```

{% endcode %}

{% code title="예시 코드1의 출력" %}

```
지금 반복 중인 횟수 : 1
지금 반복 중인 횟수 : 2
지금 반복 중인 횟수 : 3
지금 반복 중인 횟수 : 4
지금 반복 중인 횟수 : 5
지금 반복 중인 횟수 : 6
지금 반복 중인 횟수 : 7
지금 반복 중인 횟수 : 8
지금 반복 중인 횟수 : 9
지금 반복 중인 횟수 : 10
```

{% endcode %}

{% code title="예시 코드2" %}

```
5번 반복
    "반복중" 보여주기
```

{% endcode %}

{% code title="예시 코드2의 출력" %}

```
반복중
반복중
반복중
반복중
반복중
```

{% endcode %}


# 반복문 (무한 반복) - 반복

### 코드

```
반복
    {반복할 코드}
```

***

### 설명

<mark style="color:purple;">`반복문`</mark>은 원하는 코드를 여러 번 반복해서 실행할 수 있게 하는 코드예요.

***

### 주의사항

* 현재 무한 반복은 호랑에듀 서비스에서 제대로 작동하지 않아요. 코드 실행 시 웹사이트가 멈춘 것처럼 보일 수 있어요.
  * 조건문과 <mark style="color:purple;">`반복 그만`</mark>을 함께 사용해서 문제가 발생하지 않도록 사용해 주세요.

***

### 파이썬 대응 코드

{% code title="반복" %}

```
while True:
    # 반복할 코드
```

{% endcode %}

{% code title="반복 그만" %}

```
break
```

{% endcode %}

***

### 예시

{% code title="예시 코드" %}

```
반복
    "반가워!" 보여주기  # [문자열과 변수를 출력하는 것으로, 반복문과 무관합니다]
```

{% endcode %}

{% code title="예시 코드의 출력" %}

```
반가워!
반가워!
반가워!
반가워!
반가워!
반가워!
반가워!
반가워!
반가워!
반가워!
... (무한 반복)
```

{% endcode %}


# 반복문 (리스트) - 반복

### 코드

```
반복 {리스트 이름} 의 {리스트 데이터가 저장될 변수 이름} 마다
    {반복할 코드}
```

***

### 설명

<mark style="color:purple;">`반복문`</mark>은 원하는 코드를 여러 번 반복해서 실행할 수 있게 하는 코드예요.

***

### 주의사항

* 딱히 없습니다!

***

### 파이썬 대응 코드

```
for i in array:
    # 반복할 코드
```

***

### 예시

{% code title="예시 코드" %}

```
리스트1 = ["가", "나", "다", "라", "마"]
반복 리스트1 의 출력할데이터 마다
    "지금 반복 중인 데이터 : " + 출력할데이터 보여주기  # [문자열과 변수를 출력하는 것으로, 반복문과 무관합니다]
```

{% endcode %}

{% code title="예시 코드의 출력" %}

```
지금 반복 중인 횟수 : 가
지금 반복 중인 횟수 : 나
지금 반복 중인 횟수 : 다
지금 반복 중인 횟수 : 라
지금 반복 중인 횟수 : 마
```

{% endcode %}


# 함수 - 약속

### 코드

{% code title="반환할 데이터 없음 / 매개변수 없음" %}

```
약속, {선언}
    {실행할 코드}
```

{% endcode %}

{% code title="반환할 데이터 있음 / 매개변수 없음" %}

```
약속, {선언}
    {실행할 코드}  # [실행하고 싶을 코드가 있을 때만 작성, 없어도 돼요]
    {반환할 데이터} 반환하기
```

{% endcode %}

{% code title="반환할 데이터 없음 / 매개변수 있음" %}

```
약속, ({매개변수}) {선언}
    {실행할 코드}
```

{% endcode %}

{% code title="반환할 데이터 있음 / 매개변수 있음" %}

```
약속, ({매개변수}) {선언}
    {실행할 코드}  # [실행하고 싶을 코드가 있을 때만 작성, 없어도 돼요]
    {반환할 데이터} 반환하기
```

{% endcode %}

***

### 설명

<mark style="color:purple;">`약속`</mark>은 일정한 코드를 묶어두었다고 생각하면 돼요.

예를 들면 두 숫자를 더하는 코드를 여러 번 사용한다면 함수로 선언하여 더 편하게 여러 번 사용할 수 있어요.

#### 매개변수를 받는 함수

함수를 선언할 때 매개변수를 함께 받고 싶다면, 아래 예시처럼 괄호로 변수명을 묶어서 사용하면 돼요.

{% code title="예시 코드1" %}

```
약속, (첫번째숫자)이랑 (두번째숫자)를 더하고 출력하기
    첫번째숫자 + 두번째숫자 보여주기

10이랑 5를 더하고 출력하기
```

{% endcode %}

{% code title="예시 코드1의 출력" %}

```
15
```

{% endcode %}

{% code title="예시 코드2" %}

```
약속, (문자)랑 (문장)을 합치기
    문자 + 문장 반환하기

"독도"랑 "는 우리땅입니다"을 합치기
```

{% endcode %}

{% code title="예시 코드2의 출력" %}

```
독도는 우리땅입니다
```

{% endcode %}

#### 조사를 활용하는 함수

한글은 영어의 is와 are처럼 상황에 따라 을/를, 은/는 등을 구분해서 사용해야 하는 상황이 있어요. 이럴 경우에는 아래 에시처럼 슬래시(/)를 사용하면 돼요.

{% code title="예시 코드3" %}

```
약속, (첫번째숫자)이랑/랑 (두번째숫자)을/를 더하고 출력하기
    첫번째숫자 + 두번째숫자 보여주기

10이랑 5를 더하고 출력하기
92랑 3을 더하고 출력하기
```

{% endcode %}

{% code title="예시 코드3의 출력" %}

```
15
95
```

{% endcode %}

***

### 주의사항

* 사전에 정의된 함수(보여주기, 입력받기 등)도 선언할 수 있어요. (사전에 정의된 함수도 함수명으로 사용할 수 있어요.)

{% code title="예시 코드4" %}

```
약속, 입력받기
    "안녕 반가워!" 반환하기

입력받기 보여주기
```

{% endcode %}

{% code title="예시 코드4의 출력" %}

```
안녕 반가워!
```

{% endcode %}

* 매개변수를 여러 개 사용할 때는 쉼표나 띄어쓰기로 매개변수를 구분하면 안되고, 매개변수마다 괄호를 써서 괄호를 여러 개 사용해야 해요.

***

### 파이썬 대응 코드

```
def {선언}({매개변수}):
    return {반환할 데이터}
```

***

### 예시

{% code title="예시 코드5" %}

```
약속, (a)와/과 (b)을/를 더하기
    a + b 반환하기

2와 7을 더하기 보여주기  # [함수 결과를 출력하는 것으로, 함수과 무관합니다]
10과 62를 더하기 보여주기  # [함수 결과를 출력하는 것으로, 함수과 무관합니다]
```

{% endcode %}

{% code title="예시 코드5의 출력" %}

```
9
72
```

{% endcode %}


# 클래스

### 코드

{% code title="클래스 선언하기" %}

```
약속, (클래스명)
    약속, __준비__ (매개변수)
        자신.(속성) = (매개변수)  # 속성 설정 (초기 데이터 저장)
    
    약속, (매개변수) (기능명)  # 기능(메서드) 정의
        (실행할 코드)
        (반환할 데이터) 반환하기
```

{% endcode %}

{% code title="클래스 활용하기" %}

```
변수 = 새 (클래스명)(인자)  # 인스턴스 생성 (설계도로 실제 물건 만들기)
변수.(기능명)  # 기능(메서드) 호출 (만들어진 물건의 기능 사용하기)
```

{% endcode %}

***

### 설명

* **클래스(Class)**: 객체를 만들기 위한 설계도나 틀입니다. (예: 붕어빵 틀)
* **인스턴스(Instance)**: 클래스라는 설계도를 바탕으로 실제로 만들어진 실체입니다. (예: 실제로 구워진 팥 붕어빵, 슈크림 붕어빵)
* **속성(Attribute)**: 객체가 가지고 있는 상태나 특징입니다. 클래스 내부에서 `자신.속성` 형태로 저장합니다. (예: 붕어빵의 속재료, 모양)
* **메서드(Method/기능)**: 객체가 할 수 있는 행동입니다. 클래스 안에서 '`약속`'으로 정의됩니다. (예: 굽기, 인사하기)
* **준비(생성자)**: 객체가 태어날 때 실행되어 초기 속성을 설정합니다.
* **자신(self)**: 만들어진 객체 자기 자신을 가리킵니다. 여러 개의 붕어빵 중 '지금 이 붕어빵'의 재료가 무엇인지 구분할 때 사용합니다.
* **멤버 변수 접근**: `인스턴스.이름` 형태로 객체 내부의 값에 접근하거나 수정합니다.
* **멤버 메서드 호출**: `인스턴스.약속명` 형태로 호출합니다. 만약 인자가 없는 무인자 메서드라면 괄호 없이 이름만 써도 자동으로 실행됩니다.

***

### 주의사항

* `__준비__` 앞뒤의 밑줄은 두 개씩 작성합니다.
* 클래스 내부의 약속(함수)들은 첫 번째 매개변수로 반드시 `자신`을 포함해야 합니다.
* **이름 짓기**: 클래스 이름은 보통 명사(붕어빵틀)로, 기능 이름은 동사(굽기)로 지으면 이해하기 쉽습니다.

***

### 파이썬 대응 코드

```
class BungeoBreadMold:
    def __init__(self, ingredient, shape):
        self.ingredient = ingredient  # 속성 설정
        self.shape = shape

    def bake(self, count):  # 기능(메서드) 정의
        return f"{self.ingredient}가 들어간 {self.shape} 붕어빵 {count}개가 나왔습니다!"

# 인스턴스 생성 및 기능(메서드) 호출
my_bread = BungeoBreadMold("팥", "물고기")
print(my_bread.bake(3))
```

***

### 예시

{% code title="예시 코드" %}

```
클래스, 붕어빵틀
    약속, __준비__ (재료, 모양)
        자신.속재료 = 재료   # 속성 설정
        자신.겉모양 = 모양   # 속성 설정
    
    약속, (개수)개만큼 굽기   # 기능(메서드) 정의
        자신.속재료 + "이(가) 들어간 " + 자신.겉모양 + " 모양 붕어빵 " + 개수 + "개가 나왔습니다!" 반환하기

내붕어빵 = 새 붕어빵틀("팥", "물고기")  # 인스턴스 생성
내붕어빵.(3)개만큼 굽기 보여주기  # 기능(메서드) 호출
```

{% endcode %}

{% code title="예시 코드의 출력" %}

```
팥이(가) 들어간 물고기 모양 붕어빵 3개가 나왔습니다!
```

{% endcode %}

### 검색 키워드

클래스, 객체, 인스턴스, 속성, 메서드, 객체지향 프로그래밍


# 클래스 - 상속

### 코드

{% code title="부모 클래스 선언 (기본 설계도)" %}

```
약속, (부모클래스명)
    약속, __준비__
        자신.(속성) = (값)
    
    약속, (매개변수) (기능명)  # 부모기능(메서드) 정의
        (실행할 코드)
        (반환할 데이터) 반환하기
```

{% endcode %}

{% code title="자식 클래스 선언 (상속받기/물려받기)" %}

```
약속, (자식클래스명)(부모클래스명)
    약속, __준비__ (매개변수)
        상위.__준비__        # 부모의 준비 과정 실행
        자신.(새속성) = (매개변수)
```

{% endcode %}

{% code title="자식 클래스 활용하기" %}

```
변수 = 새 (자식클래스명)(인자)  # 인스턴스 생성
변수.(기능명)                 # 부모 또는 자식의 기능 호출
```

{% endcode %}

***

### 설명

* **상속**: 이미 잘 만들어진 클래스(부모)의 기능을 그대로 이어받아 새로운 클래스(자식)를 만드는 것입니다. 중복되는 코드를 줄여줍니다.
* **상위(super)**: 자식 클래스 안에서 부모 클래스의 영역을 가리키는 말입니다. 부모의 초기화 설정(`__준비__`)이나 약속을 가져올 때 사용합니다.
* **코드 재사용**: 자식 클래스(`저금통계좌`)는 직접 만들지 않은 `입금하기`, `출금하기` 기능을 부모(`계좌`)에게 물려받아 자기 것처럼 사용할 수 있습니다.

***

### 주의사항

* **상속 선언**: `약속, 자식(부모)`처럼 반드시 괄호 안에 부모 클래스 이름을 써주어야 상속이 이루어집니다.
* **준비의 연결**: 자식 클래스에서 `__준비__`를 정의했다면, 부모가 정해둔 기본 변수(`자신.금액`)를 사용할 수 있도록 `상위.__준비__`를 꼭 호출해야 합니다.

***

### 파이썬 대응 코드

```
# 부모 클래스: 계좌
class Account:
    def __init__(self):
        self.balance = 0 

    # 입금하기 속성(메소드) 정의
    def deposit(self, amount):
        self.balance += amount
        print(f"{amount}원이 입금되어 총 {self.balance}원 입니다.")
    
    # 출금하기 속성(메소드) 정의
    def withdraw(self, amount):
        if self.balance >= amount:
            self.balance -= amount
            print(f"{amount}원이 출금되어 총 {self.balance}원 입니다.")
        else:
            print("잔액이 부족합니다.")

# 자식 클래스: 저금통계좌 (Account를 상속받음)
class PiggyBank(Account):
    def __init__(self):
        super().__init__() # 부모의 생성자 호출
    
    # 자식 클래스의 용돈받기 속성(메소드) 정의
    def receive_allowance(self, allowance):
        self.deposit(allowance) # 부모의 기능(입금하기)을 내 것처럼 사용
        return self.balance # 자신.금액 반환하기

# --- 실행 부분 ---
my_account = PiggyBank() # 내계좌 = 새 저금통계좌
my_account.deposit(3000) # 내계좌.(3000)원 입금하기
my_account.withdraw(5000) # 내계좌.(5000)원 출금하기
print(my_account.receive_allowance(2000)) # 내계좌.(2000)원 용돈받기 보여주기
```

***

### 예시

{% code title="예시 코드" %}

```
# 부모 클래스: 모든 계좌의 공통 기능을 정의
클래스, 계좌
    # 인스턴스가 만들어질 때 처음 실행되는 약속
    약속, __준비__
        자신.금액 = 0  # 모든 계좌는 처음에 0원으로 시작

    # 금액을 더하는 기능
    약속, (입금액)원 입금하기
        자신.금액 += 입금액
        입금액 + "원이 입금되어 총 " + 자신.금액 + "원 입니다." 보여주기
    
    # 금액을 빼는 기능 (잔액 확인 절차 포함)
    약속, (출금액)원 출금하기
        만약 자신.금액 >= 출금액 이면
            자신.금액 -= 출금액
            출금액 + "원이 출금되어 총 " + 자신.금액 + "원 입니다." 보여주기
        아니면
            "잔액이 부족합니다." 보여주기

# 자식 클래스: '계좌'의 기능을 물려받아 새로운 기능을 추가
클래스, 저금통계좌(계좌)
    # 저금통은 처음에 돈을 넣고 시작할 수 있도록 인자를 받음
    약속, __준비__
        상위.__준비__          # 부모(계좌)의 준비 과정을 먼저 실행
    
    # 저금통만의 특별한 약속
    약속, (용돈)원 용돈받기
        자신.(용돈)원 입금하기  # 부모에게 물려받은 '입금하기' 기능을 사용
        자신.금액 반환하기      # 현재 잔액을 결과값으로 돌려줌

# --- 실행 부분 ---
# 새로운 저금통 인스턴스를 만듦
내계좌 = 새 저금통계좌

# 부모에게 물려받은 입금 기능을 사용 (결과: 3000원)
내계좌.(3000)원 입금하기

# 부모에게 물려받은 출금 기능을 사용 (결과: 잔액부족)
내계좌.(5000)원 출금하기

# 자식이 새로 만든 기능을 사용하고, 반환된 값을 보여줌 (결과: 5000원 출력)
내계좌.(2000)원 용돈받기 보여주기
```

{% endcode %}

{% code title="예시 코드의 출력" %}

```
3000원이 입금되어 총 3000원 입니다.
잔액이 부족합니다.
2000원이 입금되어 총 5000원 입니다.
5000
```

{% endcode %}

### 검색 키워드

클래스, 상속, 부모 클래스, 자식 클래스, 상위, 자신, 인스턴스, 메서드, 속성, 객체지향


# 현재 시간 가져오기

### 코드

{% code title="연도\~초까지만 가져올 때" %}

```
현재 시간 가져오기 or 지금 시간 가져오기
```

{% endcode %}

{% code title="연도\~밀리초까지 가져올 때" %}

```
현재 밀리초 가져오기 or 지금 밀리초 가져오기
```

{% endcode %}

***

### 설명

<mark style="color:purple;">`현재/지금 시간 가져오기`</mark>는 현재 시간을 가져오는 함수로, 타임스탬프 값에서 초 단위까지 숫자형으로 가져오는 함수예요.

<mark style="color:purple;">`현재/지금 밀리초 가져오기`</mark>는 현재 시간을 밀리초까지 가져오는 함수로, 타임스탬프를 숫자형으로 가져오는 함수예요.

타임스탬프는 1970년 1월 1일 0시 0분 0초(UTC)를 기준으로 지난 시간을 초 또는 밀리초 단위로 나타낸 숫자예요.

***

### 주의사항

* 딱히 없습니다!

***

### 파이썬 대응 코드

```
import time
time.time()
```

***

### 예시

{% code title="예시 코드" %}

```
현재 시간 가져오기 보여주기
현재 밀리초 가져오기 보여주기
```

{% endcode %}

{% code title="예시 코드의 출력" %}

```
1744624881
1744624881447
```

{% endcode %}

***

### 검색 키워드

시각, 날짜, 연도, 년도


# 출력창 정리하기

### 코드

```
출력창 정리하기
```

***

### 설명

<mark style="color:purple;">`출력창 정리하기`</mark>는 출력된 내용이 보이는 출력창을 모두 지우는 함수예요.

***

### 주의사항

* 출력창에 나온 데이터가 모두 지워지니 조심해서 사용해야 해요.

***

### 파이썬 대응 코드

```
import os
os.system('clear')
```

***

### 예시

{% code title="예시 코드" %}

```
출력창 정리하기
```

{% endcode %}

{% code title="예시 코드의 출력" %}

```
```

{% endcode %}

***

### 검색 키워드

전체 지우기, 비우기


# 무작위 값 가져오기

### 코드

```
{범위 시작}~{범위 끝} 사이 무작위 값 가져오기
```

***

### 설명

<mark style="color:purple;">`무작위 값 가져오기`</mark>는 범위 사이의 값에서 랜덤으로 값을 가져오는 함수예요.

범위의 시작과 끝을 포함해서 랜덤 값을 가져와요.

***

### 주의사항

* 딱히 없습니다!

***

### 파이썬 대응 코드

```
import random
num = random.randint(A, B)
```

***

### 예시

{% code title="예시 코드" %}

```
1~10 사이 무작위 값 가져오기 보여주기
```

{% endcode %}

{% code title="예시 코드의 출력" %}

```
4
```

{% endcode %}

***

### 검색 키워드

아무 값


# 기다리기

### 코드

```
{숫자}초 기다리기
```

***

### 설명

<mark style="color:purple;">`기다리기`</mark>는 원하는 만큼 기다리는 코드예요.

정수형은 물론, 실수형도 가능해요.

***

### 주의사항

* 컴퓨터는 1ms 이하로 멈출 수 없어서, 실제로는 0.001초(1ms)까지만 작동 가능해요.

***

### 파이썬 대응 코드

```
import time
time.sleep(1)
```

***

### 예시

{% code title="예시 코드" %}

```
"안녕 반가워" 보여주기
1초 기다리기
"나는 하랑이야" 보여주기
```

{% endcode %}

{% code title="예시 코드의 출력" %}

```
안녕 반가워
{1초 후}
나는 하랑이야
```

{% endcode %}

***

### 검색 키워드

대기, 지연, 멈추기


# 화면 그리기

### 코드

```
@화면 "링크" 그리기
```

{% code title="폭을 지정할 때" %}

```
@화면 "링크" 폭 {길이}로/으로 그리기
```

{% endcode %}

***

### 설명

* `@화면`은 실습 화면에 미디어나 링크를 표시하는 기능이에요.
* `@화면 "링크" 그리기`는 입력한 주소의 미디어를 화면에 보여줘요.

***

### 주의사항

* 링크는 반드시 따옴표로 감싸야 해요.
* http\:// 또는 <https://로> 시작하는 유효한 주소만 사용할 수 있어요.

***

### 파이썬 대응 코드

```
from IPython.display import Image, display
display(Image(url="링크"))
```

***

### 예시

{% code title="예시 코드" %}

```
@화면 "하랑이 사진이 있는 링크" 폭 300으로 그리기
```

{% endcode %}

{% code title="예시 코드의 출력" %}

```
(출력창에 폭이 300인 하랑이 사진이 나온다.)
```

{% endcode %}

***

### 검색 키워드

화면, 링크, 미디어, 영상


# 시간 정보 가져오기

### 코드

```
시간 정보 가져오기
```

***

### 설명

* `시간 정보 가져오기`는 현재 시간을 딕셔너리 형태로 저장해요.
* 딕셔너리는 연, 월, 일, 시, 분, 초의 순서로 시간 정보를 저장해요.

***

### 주의사항

* 출력 형태가 리스트가 아닌 딕셔너리임에 주의해 주세요.

***

### 파이썬 대응 코드

```
from datetime import datetime
now = datetime.now()
```

***

### 예시

{% code title="예시 코드" %}

```
현재_시간 = 시간 정보 가져오기

현재_시간 보여주기
"올해는 " + 현재_시간["연"] + "년이야!" 보여주기
```

{% endcode %}

{% code title="예시 코드의 출력" %}

```
{
	연: 2026
	월: 2
	일: 5
	시: 16
	분: 39
	초: 25
}
올해는 2026년이야!
```

{% endcode %}

***

### 검색 키워드

시간,  시간정보, 현재시간, 날짜, 시각, 딕셔너리


# 하랑이랑

### 설명

<mark style="color:purple;">`하랑이랑`</mark>은 인터랙티브 코딩 서비스로, 엔트리나 스크래치처럼 코딩을 통해 캐릭터를 움직일 수 있는 코딩 툴이에요.

한글 코딩을 통해 하랑이 캐릭터를 직접 움직이거나 회전시키거나 크기를 조절할 수 있어요.

약속 놀이터에서는 우측 상단의 `하랑이랑` 버튼을 눌러 <mark style="color:purple;">`하랑이랑`</mark>을 사용할 수 있고,\
실습 화면에서는 우측 상단의 `하랑이랑` 버튼을 눌러 <mark style="color:purple;">`하랑이랑`</mark>을 사용할 수 있어요.


# \[하랑이랑] 다른 오브젝트에 대해 코딩하기

### 코드

```
"다른_오브젝트_이름" 실행할_명령어
```

***

### 설명

* 하랑이랑에서는 여러 개의 오브젝트를 추가할 수 있어요.
* 하랑이랑에서는 각 오브젝트별로  코딩을 따로 할 수 있어요.
* 하랑이랑에서 현재 선택되어 있는 오브젝트가 아닌 다른 오브젝트에 대한 코딩을 할 때는 명령어 앞에 `""`로 다른 오브젝트의 이름을 적어야 해요.

***

### 주의사항

* `""` 안에 다른 오브젝트의 이름을 정확히 작성해야 해요.

***

### 파이썬 대응 코드

하랑이랑 코드는 파이썬에 대응되는 코드가 없어 제공되지 않아요.

***

### 예시

{% code title="예시 코드" %}

```
"하랑이_충격" 크기 100만큼 변경하기
"하랑이_코딩" 가로 30 세로 50 만큼 이동하기
```

{% endcode %}

{% code title="예시 코드의 결과" %}

```
("하랑이_충격" 오브젝트의 크기가 100 만큼 커짐)
("하랑이_코딩" 오브젝트가 현재 위치에서 오른쪽으로 30, 윗쪽으로 50 만큼 이동함)
```

{% endcode %}

***


# \[하랑이랑] 출력 - 말하기

### 코드

* 현재 선택되어 있는 오브젝트가 말하도록 할 때는 아래와 같이 작성해요.

```
{출력할 데이터} 말하기
```

* 현재 선택되어 있는 오브젝트가 아닌 다른 오브젝트가 말하도록 할 때는 아래와 같이 작성해요.

```
"다른_오브젝트_이름" {출력할 데이터} 말하기
```

***

### 설명

<mark style="color:purple;">`말하기`</mark>는 하랑이랑 기본 출력 함수로, 원하는 데이터를 하랑이가 말하게 할 수 있어요.

프로그램 상에서 숫자, 문자열, 연산 결과 등 원하는 종류의 데이터를 하랑이를 통해 출력할 수 있어요.

***

### 주의사항

* 만약 다른 오브젝트에 대한 명령어라면 <mark style="color:purple;">`"오브젝트 이름"`</mark>과 <mark style="color:purple;">`말하기`</mark> 사이에 출력할 데이터를 작성해야 해요.
* 띄어쓰기에 유의해 주세요.
* <mark style="color:purple;">`말하기`</mark>가 잘 작동하지 않는다면, 아래 코드와 같이 출력할 데이터에 괄호를 씌워주세요.

```
(1 + 1) 말하기
```

```
"다른_오브젝트" (1 + 1) 말하기
```

***

### 파이썬 대응 코드

하랑이랑 코드는 파이썬에 대응되는 코드가 없어 제공되지 않아요.

***

### 예시

{% code title="예시 코드" %}

```
"안녕 친구들" 말하기
1234 말하기
1 + 1 말하기

변수이름 = "변수데이터"  # [변수를 선언하는 것으로, 출력과 무관합니다]

변수이름 말하기
```

{% endcode %}

{% code title="예시 코드의 결과" %}

```
안녕 친구들 (하랑이가 말풍선으로 말함)
1234 (하랑이가 말풍선으로 말함)
2 (하랑이가 말풍선으로 말함)
변수데이터 (하랑이가 말풍선으로 말함)
```

{% endcode %}

***

### 검색 키워드

출력하기


# \[하랑이랑] 보이기 / 숨기기

### 코드

{% code title="오브젝트를 보이거나 숨기게 할 때" %}

```
보이기
숨기기
```

{% endcode %}

{% code title="시간을 지정하여 오브젝트를 보이거나 숨기게 할 때" %}

```
(시간)초 동안 보이기
(시간)초 동안 숨기기
"다른_오브젝트이름" (시간)초 동안 보이기
"다른_오브젝트이름" (시간)초 동안 숨기기
```

{% endcode %}

***

### 설명

보이기/숨기기는 하랑이랑 오브젝트를 화면에 표시하거나 감추는 명령어예요. \
오브젝트를 지정하지 않으면 현재 선택된 오브젝트가 대상이 돼요. 특정 오브젝트를 대상으로 할 때는 이름을 따옴표로 감싸서 적어야 해요. \
\
시간을 지정하면 그 시간 동안만 보이거나 숨겨져요.

***

### 주의사항

* 현재 선택된 오브젝트가 무엇인지에 따라 동작 대상이 달라져요.
* 다른 오브젝트에 대해 `보이기`/`숨기기`하고 싶다면 앞에 "다른\_오브젝트이름"을 적어야 해요.

***

### 파이썬 대응 코드

하랑이랑 코드는 파이썬에 대응되는 코드가 없어 제공되지 않아요.

***

### 예시

{% code title="예시 코드" %}

```
"하랑이" 보이기
"하랑이_뒤" 숨기기

"하랑이_앞" 보이기
"하랑이_앞" 3초 동안 숨기기
```

{% endcode %}

{% code title="예시 코드의 결과" %}

```
(하랑이 오브젝트가 화면에 보임)
(하랑이_뒤 오브젝트가 화면에서 숨겨짐)
(하랑이_앞 오브젝트가 3초 동안 숨겨짐)
```

{% endcode %}

***

### 검색 키워드

보이기, 숨기기, 하랑이랑, 오브젝트 표시, 오브젝트 숨김


# \[하랑이랑] 이동 (절대 좌표 이동) - 위치로 이동하기

### 코드

```
가로 {좌표} 위치로 이동하기
세로 {좌표} 위치로 이동하기
가로 {좌표} 세로 {좌표} 위치로 이동하기
```

***

### 설명

<mark style="color:purple;">`이동하기`</mark>는 하랑이랑에서 하랑이를 원하는 지점으로 이동하게 할 수 있어요.

하랑이가 처음 서있는 가운데가 (0, 0) 좌표이고, 수학적 좌표 평면과 동일하게 계산되고 이동해요.

***

### 주의사항

* 가로로 이동할 때에는 "가로"를, 세로로 이동할 때에는 "세로"를 꼭 써야 해요.
* 띄어쓰기에 유의해 주세요.
* {좌표}는 숫자(정수 및 소수)로만 작성해야 해요.
* <mark style="color:purple;">`위치로 이동하기`</mark>는 원점 (0, 0)을 기준으로 이동하고, <mark style="color:purple;">`만큼 이동하기`</mark>는 현재 위치를 기준으로 이동한다는 점에 주의해야 해요.

***

### 파이썬 대응 코드

하랑이랑 코드는 파이썬에 대응되는 코드가 없어 제공되지 않아요.

***

### 예시

{% code title="예시 코드" %}

```
가로 100 위치로 이동하기
세로 -10.5 위치로 이동하기
가로 -100 세로 100 위치로 이동하기
```

{% endcode %}

{% code title="예시 코드의 결과" %}

```
(하랑이가 가로 100 위치로 이동함)
(하랑이가 세로 -10.5 위치로 이동함)
(하랑이가 가로 -100, 세로 100 위치로 이동함)
```

{% endcode %}

***

### 검색 키워드

움직이기


# \[하랑이랑] 이동 (상대 좌표 이동) - 만큼 이동하기

### 코드

```
가로 {좌표} 만큼 이동하기
세로 {좌표} 만큼 이동하기
가로 {좌표} 세로 {좌표} 만큼 이동하기
```

***

### 설명

<mark style="color:purple;">`이동하기`</mark>는 하랑이랑에서 하랑이를 원하는 지점으로 이동하게 할 수 있어요.

하랑이가 처음 서있는 가운데가 (0, 0) 좌표이고, 수학적 좌표평면과 동일하게 계산되고 이동해요.

***

### 주의사항

* 가로로 이동할 때에는 "가로"를, 세로로 이동할 때에는 "세로"를 꼭 써야 해요.
* 띄어쓰기에 유의해 주세요.
* {좌표}는 숫자(정수 및 소수)로만 작성해야 해요.
* <mark style="color:purple;">`위치로 이동하기`</mark>는 원점 (0, 0)을 기준으로 이동하고, <mark style="color:purple;">`만큼 이동하기`</mark>는 현재 위치를 기준으로 이동한다는 점에 주의해야 해요.

***

### 파이썬 대응 코드

하랑이랑 코드는 파이썬에 대응되는 코드가 없어 제공되지 않아요.

***

### 예시

{% code title="예시 코드" %}

```
가로 100 만큼 이동하기
세로 -10.5 만큼 이동하기
가로 -100 세로 100 만큼 이동하기
```

{% endcode %}

{% code title="예시 코드의 결과" %}

```
(하랑이가 현재 위치에서 오른쪽으로 100 만큼 이동함)
(하랑이가 현재 위치에서 아래로 -10.5 만큼 이동함)
(하랑이가 현재 위치에서 왼쪽으로 100, 위로 100 만큼 이동함)
```

{% endcode %}

***

### 검색 키워드

움직이기


# \[하랑이랑] 이동 (시간 지정) - 이동하기

### 코드

```
가로 {좌표} 위치로/만큼{시간}초 동안 이동하기
세로 {좌표} 위치로/만큼 {시간}초 동안 이동하기
가로 {좌표} 세로 {좌표} 위치로/만큼 {시간}초 동안 이동하기
```

***

### 설명

<mark style="color:purple;">`이동하기`</mark>는 하랑이랑에서 하랑이를 원하는 지점으로 이동하게 할 수 있어요.

하랑이가 처음 서있는 가운데가 (0, 0) 좌표이고, 수학적 좌표평면과 동일하게 계산되고 이동해요.

***

### 주의사항

* 가로로 이동할 때에는 "가로"를, 세로로 이동할 때에는 "세로"를 꼭 써야 해요.
* {시간} 뒤에는 "초"를 꼭 써야 해요.
* 띄어쓰기에 유의해 주세요.
* {시간}은 초 기준이고 자연수만 사용할 수 있어요.
* {좌표}는 숫자(정수 및 소수)로만 작성해야 해요.

***

### 파이썬 대응 코드

하랑이랑 코드는 파이썬에 대응되는 코드가 없어 제공되지 않아요.

***

### 예시

{% code title="예시 코드" %}

```
가로 -100 위치로 1초 동안 이동하기
세로 10.5 만큼 5초 동안 이동하기
가로 0 세로 0 위치로 3초 동안 이동하기
```

{% endcode %}

{% code title="예시 코드의 결과" %}

```
(하랑이가 1초 동안 가운데(원점)에서 왼쪽으로 100 이동함)
(하랑이가 5초 동안 현재 위치에서 위로 10.5 만큼 이동함)
(하랑이가 3초 동안 현재 위치에서 가운데(원점) 위치로 이동함)
```

{% endcode %}

***

### 검색 키워드

움직이기


# \[하랑이랑] 회전 (단순 회전) - 회전하기

### 코드

```
{각도}도 회전하기
```

***

### 설명

<mark style="color:purple;">`회전하기`</mark>는 하랑이랑에서 하랑이를 원하는 각도로 회전하게 할 수 있어요.

***

### 주의사항

* {각도} 뒤에는 "도"를 꼭 써야 해요.
* 띄어쓰기에 유의해 주세요.
* {각도}는 숫자(정수 및 소수)로만 작성해야 해요.

***

### 파이썬 대응 코드

하랑이랑 코드는 파이썬에 대응되는 코드가 없어 제공되지 않아요.

***

### 예시

{% code title="예시 코드" %}

```
"하랑이" 100도 회전하기
(-10.5)도 회전하기
"하랑이_고민" 0도 회전하기
```

{% endcode %}

{% code title="예시 코드의 결과" %}

```
(하랑이가 100도 각도로 회전함)
(하랑이가 -10.5도 각도로 회전함)
(하랑이_고민 오브젝트가 정방향으로 회전함)
```

{% endcode %}

***

### 검색 키워드

돌리기


# \[하랑이랑] 회전 (시간 지정) - 회전하기

### 코드

```
{시간}초 동안 {각도}도 회전하기
```

***

### 설명

<mark style="color:purple;">`회전하기`</mark>는 하랑이랑에서 하랑이를 원하는 각도로 회전하게 할 수 있어요.

***

### 주의사항

* {시간} 뒤에는 "초"를 꼭 써야 해요.
* {각도} 뒤에는 "도"를 꼭 써야 해요.
* 띄어쓰기에 유의해 주세요.
* {시간}은 초 기준이고 자연수만 사용할 수 있어요.
* {각도}는 숫자(정수 및 소수)로만 작성해야 해요.

***

### 파이썬 대응 코드

하랑이랑 코드는 파이썬에 대응되는 코드가 없어 제공되지 않아요.

***

### 예시

{% code title="예시 코드" %}

```
1초 동안 100도 회전하기
10초 동안 (-10.5)도 회전하기
"하랑이_고민" 3초 동안 0도 회전하기
```

{% endcode %}

{% code title="예시 코드의 결과" %}

```
(하랑이가 0도에서 시계방향으로 100도 각도로 1초 동안 회전함)
(하랑이가 0도에서 반시계방향으로 -10.5도 각도로 10초 동안 회전함)
(하랑이_고민 오브젝트가 0도에서 정방향으로 1초 동안 회전함)
```

{% endcode %}

***

### 검색 키워드

돌리기


# \[하랑이랑] 크기 (단순 크기 변경) - 만큼 변경하기

### 코드

```
크기 {크기}만큼 변경하기
```

***

### 설명

<mark style="color:purple;">`변경하기`</mark>는 하랑이랑에서 하랑이를 원하는 크기로 변경할 수 있어요.

기본 크기는 100이에요.

***

### 주의사항

* {크기} 뒤에는 "만큼"를 꼭 써야 해요.
* {크기} 앞에는 "크기"와 띄어쓰기를 꼭 써야 해요.
* 띄어쓰기에 유의해 주세요.
* {크기}는 정수로만 작성해야 해요.

***

### 파이썬 대응 코드

하랑이랑 코드는 파이썬에 대응되는 코드가 없어 제공되지 않아요.

***

### 예시

{% code title="예시 코드" %}

```
크기 200만큼 변경하기
"하랑이_고민" 크기 (-10)만큼 변경하기
```

{% endcode %}

{% code title="예시 코드의 결과" %}

```
(하랑이가 지금보다 200 만큼 커짐)
(하랑이_고민 오브젝트가 지금보다 10 만큼 작아짐)
```

{% endcode %}

***

### 검색 키워드

크기 바꾸기


# \[하랑이랑] 크기 (시간 지정) - 변경하기

### 코드

```
{시간}초 동안 크기 {크기}만큼 변경하기
```

***

### 설명

<mark style="color:purple;">`변경하기`</mark>는 하랑이랑에서 하랑이를 원하는 크기로 변경할 수 있어요.

기본 크기는 100이에요.

***

### 주의사항

* {시간} 뒤에는 "초"를 꼭 써야 해요.
* {크기} 뒤에는 "만큼"를 꼭 써야 해요.
* {크기} 앞에는 "크기"와 띄어쓰기를 꼭 써야 해요.
* 띄어쓰기에 유의해 주세요.
* {시간}은 초 기준이고 자연수만 사용할 수 있어요.
* {크기}는 정수로만 작성해야 해요.

***

### 파이썬 대응 코드

하랑이랑 코드는 파이썬에 대응되는 코드가 없어 제공되지 않아요.

***

### 예시

{% code title="예시 코드" %}

```
1초 동안 크기 200만큼 변경하기
"하랑이_고민" 10초 동안 크기 -10만큼 변경하기
```

{% endcode %}

{% code title="예시 코드의 결과" %}

```
(하랑이가 크기 200만큼 1초 동안 커짐)
(하랑이_고민 오브젝트가 크기 10만큼 10초 동안 작아짐)
```

{% endcode %}

***

### 검색 키워드

크기 바꾸기


# 아두이노 보드를 호랑 서비스와 연결하는 방법

### 설명

아두이노 보드가 호랑 서비스와 연결되지 않는 문제가 발생하나요?

아래의 자가진단을 통해 해결할 수 있어요.

***

### 연결 문제 해결 자가진단 (자동)

<a href="https://afu.horang.it/self-test" class="button secondary">자가진단 바로가기</a>

위 버튼을 눌러 연결 상태 자가진단을 자동으로 수행할 수 있어요.

***

### 연결 문제 해결 자가진단 (수동)

1-1.  `PC 환경이라면` Chrome이나 Edge 브라우저를 사용하고 있나요? 다른 브라우저에서는 보드에 연결할 수 없어요.\
1-2. `태블릿 환경이라면` 갤럭시탭을 사용하고 있나요? 아이패드에서는 보드에 연결할 수 없어요.\
1-3. `태블릿 환경이라면` 호랑 앱을 사용하고 있나요? 태블릿 브라우저에서는 보드에 연결할 수 없어요.

2\. 보드를 USB 케이블에서 분리하고 다시 연결한 후 브라우저를 새로고침하거나, 앱을 껐다가 켜서 다시 보드에 연결해 보세요.

3\. [AFU(아두이노 펌웨어 업로드 시스템)](https://afu.horang.it/)을 사용하여 아두이노 보드에 새로운 펌웨어를 업데이트한 후 다시 시도해 보세요.

4\. 그래도 해결되지 않는다면 선생님께서 호랑에듀 고객센터[(고객센터 바로가기)](http://horangedu.channel.io/)로 연락해 주세요. 기술 상 문제로써 해결이 가능할 경우, 즉시 해결해 드리겠습니다.

***

### 아두이노 연결 드라이버 설치

<a href="https://afu.horang.it/driver.zip" class="button secondary">드라이버 다운로드</a>

아두이노 선택 창에 아무런 기기도 뜨지 않는다면 아두이노 연결을 위한 드라이버 설치가 필요할 수 있어요.

위 파일을 다운로드한 후, `UNINSTALL`을 먼저 진행하고, `INSTALL`을 진행한 후 웹사이트를 새로고침하여 확인해 보세요.

***

### 아두이노 보드를 호랑 서비스와 연결할 수 있는 조건

아래의 모든 조건이 성립되어야 아두이노 보드와 호랑 서비스를 연결해 사용할 수 있어요.

* 주식회사 호랑에듀에서 구입한 아두이노 보드 or 주식회사 호랑에듀에서 안내드린 방법을 적용한 아두이노 보드
* 아두이노 보드가 PC 또는 태블릿과 유선 연결
* (PC) Chrome 및 Edge 브라우저 / (태블릿) 플레이스토어에서 다운받은 호랑 앱 [(다운로드 바로가기)](https://play.google.com/store/apps/details?id=it.horang.app)

<table><thead><tr><th width="335">기기 및 OS</th><th>가능한 환경</th></tr></thead><tbody><tr><td>PC (windows)</td><td>Chrome 또는 Edge 브라우저</td></tr><tr><td>Mac (맥북)</td><td>Chrome 또는 Edge 브라우저</td></tr><tr><td>아이패드</td><td>X (불가능)</td></tr><tr><td>갤럭시탭</td><td>호랑 앱 <a href="https://play.google.com/store/apps/details?id=it.horang.app">(다운로드 바로가기)</a></td></tr><tr><td>모바일 (아이폰)</td><td>X (불가능)</td></tr><tr><td>모바일 (안드로이드)</td><td>호랑 앱 <a href="https://play.google.com/store/apps/details?id=it.horang.app">(다운로드 바로가기)</a></td></tr></tbody></table>

***

### 아두이노에 연결한 센서가 작동하지 않나요?

현재 호랑 서비스는 아래의 센서들의 작동을 보장하고 있어요.

| 센서명                              | 사용 방법                                                                                                                                                                           |
| -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 초음파 센서(HC-SR04)                  | [\[아두이노\] 초음파 센서 코드](/arduino/030)                                                                                                                                              |
| 온습도 센서(DHT-11)                   | [\[아두이노\] 온습도 센서 코드](/arduino/031)                                                                                                                                              |
| 기압 센서(BMP180)                    | [\[아두이노\] 기압 센서 코드](/arduino/032)                                                                                                                                               |
| 조이스틱 모듈 - 호랑에듀에서 배포한 조이스틱 모듈에 한함 | <p><a data-mention href="/pages/TGrjy1ooVdlvFxYYemwq">/pages/TGrjy1ooVdlvFxYYemwq</a><br><a data-mention href="/pages/rKj8NP7MdEYammK0KFx7">/pages/rKj8NP7MdEYammK0KFx7</a></p> |
| LED(비 모듈형, 저항 필요)                | <p><a data-mention href="/pages/TGrjy1ooVdlvFxYYemwq">/pages/TGrjy1ooVdlvFxYYemwq</a><br><a data-mention href="/pages/tVudrXTURg2VwGznQx0a">/pages/tVudrXTURg2VwGznQx0a</a></p> |
| 버튼(택트 스위치)                       | <p><a data-mention href="/pages/TGrjy1ooVdlvFxYYemwq">/pages/TGrjy1ooVdlvFxYYemwq</a><br><a data-mention href="/pages/rKj8NP7MdEYammK0KFx7">/pages/rKj8NP7MdEYammK0KFx7</a></p> |

위의 센서 리스트에 없는 센서는 아직 작동을 보장하진 않으나, 호랑에듀 고객센터[(고객센터 바로가기)](http://horangedu.channel.io/)로 연락주시면 빠르게 작동할 수 있도록 조치해 드릴게요.

그리고 별도의 조치 없이도 [\[아두이노\] 핀 모드 설정](/arduino/026)과 [\[아두이노\] 핀 입력 (데이터 읽기)](/arduino/027) 및 [\[아두이노\] 핀 출력 (데이터 쓰기)](/arduino/028)을 활용하여 사용할 수 있을 수도 있어요.


# 아두이노

### 설명

코딩의 결과를 물리적으로 확인할 수 있는 것을 피지컬 컴퓨팅이라고 부르고, 아두이노와 같은 작은 컴퓨터를 피지컬 컴퓨팅 도구라고 부릅니다.

아두이노는 크게 6종류의 핀으로 구성되어 있어요.

* **아날로그 핀 (A0\~A5번 핀)** : 아날로그 입력을 받기 위한 핀
* **디지털 핀 (2\~13번 핀)** : 디지털 입력과 출력을 하기 위한 핀
* **PWM 핀** (디지털 핀 중 \~표시가 있는 3, 5, 6, 9, 10, 11번 핀) : 디지털 핀의 기능에 더해 디지털 핀을 사용하여 아날로그 쓰기를 하기 위한 핀
* **GND** : 접지(Ground), 쉽게 생각해 전기의 +와 -중 -라고 생각하면 됨
* **VIN(5V와 같음), 5V, 3.3V** : 각 볼트만큼의 출력, 쉽게 생각해 전기의 +와 -중 +라고 생각하면 됨
* **기타 핀**
  * 디지털 0\~1번 핀 : Serial 통신 중 UART 통신을 위해 사용하는 핀 (Bluetooth, Wi-Fi 등)
  * SCL : I2C 통신 시 클럭 시그널 전송 (Serial Clock)
  * SDA : I2C 통신 시 데이터 전송 (Serial Data)
  * AREF : 아날로그 핀 레퍼런스 전압, 칩이 아날로그 핀 값을 정확히 읽기 위해 참조
  * RES : 리셋(Reset), 5V를 넣으면 아두이노를 재부팅함, 아두이노 본체의 버튼과 같은 역할

각 핀에서 가능한 것과 불가능한 것은 아래 표를 참고하면 돼요.

<table><thead><tr><th width="243"></th><th width="110">아날로그 읽기</th><th width="110">아날로그 쓰기</th><th width="110">디지털 읽기</th><th width="110">디지털 쓰기</th></tr></thead><tbody><tr><td>아날로그 핀 (A0~A5번 핀)</td><td>O</td><td>X</td><td>X</td><td>X</td></tr><tr><td>디지털 핀 (2~13번 핀)</td><td>X</td><td>X</td><td>O</td><td>O</td></tr><tr><td>PWM 핀 (3, 5, 6, 9, 10, 11번 핀)</td><td>X</td><td>O</td><td>O</td><td>O</td></tr></tbody></table>

<table><thead><tr><th width="270"></th><th width="160">아날로그 핀</th><th width="150">디지털 핀</th><th width="160">PWM 핀</th></tr></thead><tbody><tr><td><p><code>@아두이노 N번 핀 입력 설정</code></p><p>+</p><p><code>@아두이노 N번 핀 읽기</code></p></td><td>O (0~1023)<br>아날로그 값을 읽음</td><td>O (0~1)<br>디지털 값을 읽음</td><td>O (0~1)<br>디지털 값을 읽음</td></tr><tr><td><p><code>@아두이노 N번 핀 아날로그 출력 설정</code></p><p>+</p><p><code>@아두이노 N번 핀 아날로그 쓰기</code></p></td><td>X</td><td>X</td><td>O (0~255)<br>아날로그 값을 씀</td></tr><tr><td><p><code>@아두이노 N번 핀 디지털 출력 설정</code></p><p>+</p><p><code>@아두이노 N번 핀 디지털 쓰기</code></p></td><td>X</td><td>O (0~1)<br>디지털 값을 씀</td><td>O (0~1)<br>디지털 값을 씀</td></tr></tbody></table>

각 핀을 사용하는 상황을 예시를 들어 설명해 드릴게요.

* 아날로그 값을 읽어올 때 : 조도센서, 조이스틱 모듈 등 값이 0과 1로 두가지로만 구분된 게 아닌 것
* 디지털 값을 읽어올 때 : 버튼, 자석 감지 센서 등 값이 0과 1로 두가지로만 구분된 것
* 아날로그 값을 쓸 때 : LED의 밝기 조절, 스피커의 소리 크기 조절, 서보 모터 속도 조절 등 값이 0과 1로 두가지로만 구분된 게 아닌 것
* 디지털 값을 쓸 때 : LED를 단순히 켜고 끄기, 릴레이 모듈 켜고 끄기 등 값이 0과 1로 두가지로만 구분된 것

추가적으로 아두이노와 관련된 명칭을 정리해 드릴게요.

* `PWM`은 펄스 폭 변조로, 0과 1로만 데이터 전송이 가능한 디지털 핀을 극복하여 0\~1023까지 아날로그처럼 데이터 전송이 가능하게끔 하는 기술이에요.
* `I2C`는 여러 개의 디바이스(센서, 액츄에이터 등 이론 상 127개까지 가능)를 단 두 개의 선(SCL, SDA)으로 연결할 수 있게 해주는 직렬 통신 프로토콜이에요. LCD나 OLED와 같이 여러 개의 핀을 사용해야 할 때, 핀 사용 개수를 줄이고자 사용해요.


# \[아두이노] 핀 모드 설정

### 코드

```
@아두이노 {핀 번호}번 핀 입력 설정
```

```
@아두이노 {핀 번호}번 핀 디지털 출력 설정
```

```
@아두이노 {핀 번호}번 핀 아날로그 출력 설정
```

***

### 설명

<mark style="color:purple;">`핀 설정`</mark>은 아두이노와 연결된 핀을 어떻게 사용할지 설정해 주는 코드예요.

더 자세한 내용이 궁금하다면, [아두이노](/arduino/025)를 참고해 주세요.

***

### 주의사항

* 입력 설정에서 {핀 번호}에 숫자만 쓰면 디지털 핀으로, "A1"과 같이 "A+숫자"를 문자열로 쓰면 아날로그 핀으로 인식해요.
* 디지털 출력 설정은 디지털 핀만 사용 가능해요.
* 아날로그 출력 설정은 PWM 핀만 사용 가능해요.

***

### 파이썬 대응 코드

아두이노 코드는 파이썬에 대응되는 코드가 없어 제공되지 않아요.

***

### 예시

{% code title="예시 코드" %}

```
@아두이노 "A3"번 핀 입력 설정
@아두이노 3번 핀 입력 설정
@아두이노 12번 핀 디지털 출력 설정
@아두이노 6번 핀 아날로그 출력 설정
```

{% endcode %}

***

### 검색 키워드

pinMode


# \[아두이노] 핀 입력 (데이터 읽기)

### 코드

```
@아두이노 {핀 번호}번 핀 읽기
```

***

### 설명

<mark style="color:purple;">`핀 읽기`</mark>는 아두이노와 연결된 핀의 데이터를 읽어오는 코드예요.

더 자세한 내용이 궁금하다면, [아두이노](/arduino/025)를 참고해 주세요.

***

### 주의사항

* 핀 모드 설정이 우선되어야 하고, 읽어올 핀의 핀 모드가 입력으로 설정되어 있어야 해요.
* 입력 설정에서 {핀 번호}에 숫자만 쓰면 디지털 핀으로, "A1"과 같이 "A+숫자"를 문자열로 쓰면 아날로그 핀으로 인식해요.
* 디지털 핀의 값은 0과 1로, 아날로그 핀의 값은 0\~1023까지 읽어와요.

***

### 파이썬 대응 코드

아두이노 코드는 파이썬에 대응되는 코드가 없어 제공되지 않아요.

***

### 예시

{% code title="예시 코드" %}

```
@아두이노 "A3"번 핀 입력 설정
@아두이노 6번 핀 입력 설정
(@아두이노 "A3"번 핀 읽기) 보여주기
(@아두이노 6번 핀 읽기) 보여주기
```

{% endcode %}

{% code title="예시 코드의 결과" %}

```
657
0
```

{% endcode %}

***

### 검색 키워드

digitalRead, analogRead


# \[아두이노] 핀 출력 (데이터 쓰기)

### 코드

{% code title="아날로그 데이터를 쓸 때 (PWM 핀 (3, 5, 6, 9, 10, 11번 핀))" %}

```
@아두이노 {핀 번호}번 핀 아날로그 {데이터}쓰기
```

{% endcode %}

{% code title="디지털 데이터를 쓸 때 (디지털 핀(2\~13번 핀))" %}

```
@아두이노 {핀 번호}번 핀 디지털 {데이터}쓰기
```

{% endcode %}

***

### 설명

<mark style="color:purple;">`핀 쓰기`</mark>는 아두이노와 연결된 핀에 전기 데이터를 보내주는 출력 코드예요.

더 자세한 내용이 궁금하다면, [아두이노](/arduino/025)를 참고해 주세요.

***

### 주의사항

* 핀 모드 설정이 우선되어야 하고, 읽어올 핀의 핀 모드가 출력으로 설정되어 있어야 해요.
  * 아날로그 쓰기를 한다면, 핀 모드가 아날로그 출력으로 설정되어 있어야 하고, PWM 핀에 연결되어 있어야 해요.
  * 디지털 쓰기를 한다면, 핀 모드가 디지털 출력으로 설정되어 있어야 하고, 디지털 핀에 연결되어 있어야 해요.
* 아날로그 핀은 쓸 수 없어요. `@아두이노 {핀 번호}번 핀 아날로그 {데이터}쓰기`는 PWM을 위한 코드예요.
* {데이터}의 값에는 디지털 핀의 값은 0과 1로, 아날로그 출력 핀(PWM)의 값은 0\~255까지 쓸 수 있어요.

***

### 파이썬 대응 코드

아두이노 코드는 파이썬에 대응되는 코드가 없어 제공되지 않아요.

***

### 예시

{% code title="예시 코드" %}

```
@아두이노 6번 핀 아날로그 출력 설정
@아두이노 3번 핀 디지털 출력 설정
@아두이노 6번 핀 아날로그 11쓰기
@아두이노 3번 핀 디지털 1쓰기
```

{% endcode %}

{% code title="예시 코드의 결과" %}

```
(아두이노에서 6번 핀에 전기가 11만큼 흐름)
(아두이노에서 3번 핀에 전기가 흐름)
```

{% endcode %}

***

### 검색 키워드

digitalWrite, analogWrite


# \[아두이노] 초음파 센서 코드

### 코드

```
@아두이노 초음파 트리거{Trig 핀 번호} 에코{Echo 핀 번호} 읽어오기
```

***

### 설명

<mark style="color:purple;">`초음파 읽어오기`</mark>는 아두이노와 연결된 초음파 센서와의 거리 데이터를 읽어오는 코드예요.

***

### 주의사항

* Trig는 디지털 출력으로, Echo는 입력으로 핀 모드 설정을 먼저 해야 해요.
* Trig와 Echo 핀은 모두 디지털 핀(2\~13번 핀)에 연결되어야 해요.
* 초음파 센서와의 거리는 cm 단위로 반환하나, 오차가 있을 수 있어요.

***

### 파이썬 대응 코드

아두이노 코드는 파이썬에 대응되는 코드가 없어 제공되지 않아요.

***

### 예시

{% code title="예시 코드" %}

```
@아두이노 9번 핀 디지털 출력 설정
@아두이노 8번 핀 입력 설정
(@아두이노 초음파 트리거(9) 에코(8) 읽어오기) 보여주기
```

{% endcode %}

{% code title="예시 코드의 결과" %}

```
12
```

{% endcode %}

***

### 검색 키워드

초음파 피아노, 거리 측정


# \[아두이노] 온습도 센서 코드

### 코드

{% code title="온도를 읽어올 때" %}

```
@아두이노 {핀 번호}번 핀 온도 읽어오기
```

{% endcode %}

{% code title="습도를 읽어올 때" %}

```
@아두이노 {핀 번호}번 핀 습도 읽어오기
```

{% endcode %}

***

### 설명

<mark style="color:purple;">`온도/습도 읽어오기`</mark>는 아두이노와 연결된 온습도 센서와의 온도와 습도 데이터를 읽어오는 코드예요.

***

### 주의사항

* Data 핀은 디지털 핀(2\~13번 핀)에 연결해야 하고, 입력으로 핀 모드 설정을 먼저 해야 해요.
* 온도는 0\~50도까지 읽어올 수 있어요. (일부 센서는 저 범위를 넘어서 읽어올 수 있음)
  * 영하는 -가 붙지 않은 채로 읽어와요. (ex: 영하 12도는 그냥 12로 읽어옴)
  * 영하일 때 -가 붙은 채로 읽어오길 원한다면, [\[아두이노\] 기압 센서 코드](/arduino/032)를 활용해 보세요.
* 습도는 5\~95%까지 읽어올 수 있어요. (일부 센서는 저 범위를 넘어서 읽어올 수 있음)

***

### 파이썬 대응 코드

아두이노 코드는 파이썬에 대응되는 코드가 없어 제공되지 않아요.

***

### 예시

{% code title="예시 코드" %}

```
@아두이노 4번 핀 입력 설정
(@아두이노 4번 핀 온도 읽어오기) 보여주기
(@아두이노 4번 핀 습도 읽어오기) 보여주기
```

{% endcode %}

{% code title="예시 코드의 결과" %}

```
24
67
```

{% endcode %}

***

### 검색 키워드

기온, 날씨


# \[아두이노] 기압 센서 코드

### 코드

{% code title="기압을 읽어올 때" %}

```
@아두이노 기압 읽어오기
```

{% endcode %}

{% code title="온도를 읽어올 때" %}

```
@아두이노 기압센서 온도 읽어오기
```

{% endcode %}

***

### 설명

<mark style="color:purple;">`기압센서 기압/온도 읽어오기`</mark>는 아두이노와 연결된 기압 센서와의 기압과 온도 데이터를 읽어오는 코드예요.

기압센서는 온도 센서도 포함하고 있어요. 기압을 보정할 때 활용되기 때문이에요.

***

### 주의사항

* 별도의 핀 모드 설정이 필요없어요.
  * I2C 기술을 사용하여 데이터를 가져오기에, SCL과 SDA 포트에 연결하여 사용해요. 따라서 별도로 핀 모드를 설정하지 않아도 돼요.&#x20;
  * 더 자세한 내용이 궁금하다면, [아두이노](/arduino/025)를 참고해 주세요.
* 기압은 30,000Pa\~110,000Pa까지 읽어올 수 있어요. (일부 센서는 저 범위를 넘어서 읽어올 수 있음)
  * 땅에서의 기압은 보통 100,000Pa이에요. 높아질수록 기압 값은 작아져요.
* 온도는 -40\~85도까지 읽어올 수 있어요. (일부 센서는 저 범위를 넘어서 읽어올 수 있음)
  * 영하는 -가 붙은 채로 읽어와요.

***

### 파이썬 대응 코드

아두이노 코드는 파이썬에 대응되는 코드가 없어 제공되지 않아요.

***

### 예시

{% code title="예시 코드" %}

```
(@아두이노 기압 읽어오기) 보여주기
(@아두이노 기압센서 온도 읽어오기) 보여주기
```

{% endcode %}

{% code title="예시 코드의 결과" %}

```
100472
24
```

{% endcode %}

***

### 검색 키워드

높이, 대기압, 날씨


# \[아두이노] 자이로 센서 코드

### 코드

```
@아두이노 가속도 읽어오기 / 가져오기
@아두이노 X축 가속도 읽어오기 / 가져오기
@아두이노 Y축 가속도 읽어오기 / 가져오기
```

***

### 설명

* <mark style="color:purple;">`가속도 읽어오기`</mark>는 아두이노와 연결된 자이로 센서(기울기 센서)로부터 물체의 회전 속도나 기울기 데이터를 읽어오는 코드예요. 주로 물체의 균형을 잡거나 움직임을 감지할 때 사용해요.
* x축과  y축은 자이로 센서에 그려져 있는 방향과 같아요.\
  ![](/files/ElcdEgPh0Bep906lffxa)

***

### 주의사항

* 자이로 센서는 주로 I2C 통신을 사용하므로, 아두이노의 지정된 I2C 핀(SDA, SCL)에 연결해야 정확한 데이터를 받을 수 있어요.
* 센서가 작은  흔들림에도 민감하게 반응해요.

### 파이썬 대응 코드

아두이노 코드는 파이썬에 대응되는 코드가 없어 제공되지 않아요.

***

### 예시

{% code title="예시 코드" %}

```
@아두이노 가속도 읽어오기 보여주기
@아두이노 X축 가속도 가져오기 보여주기
@아두이노 Y축 가속도 읽어오기 보여주기
```

{% endcode %}

{% code title="예시 코드의 결과" %}

```
[-0.38817129671851214, -4.870921966829451]
-0.38817129671851214
-4.870921966829451
```

{% endcode %}

***

### 검색 키워드

자이로 센서, 가속도 센서, 흔들림 센서, 기울기 센서


# \[아두이노] 레이저 거리 센서 코드

### 코드

```
@아두이노 레이저 거리 재기
```

***

### 설명

* `@아두이노 레이저 거리 재기`는 아두이노와 연결된 레이저 거리 센서(ToF/거리 측정 센서)로부터 물체까지의 거리를 읽어오는 코드예요.
* 측정 결과는 mm(밀리미터) 단위로 반환돼요.

***

### 주의사항

* 자이로 센서는 주로 I2C 통신을 사용하므로, 아두이노의 I2C 핀(SDA/SCL)에 올바르게 연결해야 해요.
* 반사율이 낮은 검은색 물체나 투명한 물체는 측정값이 흔들릴 수 있어요.
* 결과값은 mm 단위 정수로 사용해요. (예: 250 = 250mm)

### 파이썬 대응 코드

아두이노 코드는 파이썬에 대응되는 코드가 없어 제공되지 않아요.

***

### 예시

{% code title="예시 코드" %}

```
거리 = @아두이노 레이저 거리 재기
거리 + "mm" 보여주기
```

{% endcode %}

{% code title="예시 코드의 결과" %}

```
500mm
(센서부터 앞의 물체까지의 거리가 500mm(=50cm)이다.)
```

{% endcode %}

***

### 검색 키워드

레이저 거리 센서, ToF 센서, 거리 측정 센서, VL53L0X, I2C 거리센서


# \[아두이노] 부저 코드

### 코드

```
@아두이노 {핀 번호}번 핀 부저 {주파수}울리기
```

***

### 설명

<mark style="color:purple;">`부저 울리기`</mark>는 아두이노와 연결된 부저의 소리를 울리는 코드예요.

***

### 주의사항

* Data 핀은 디지털 핀(2\~13번 핀)에 연결해야 하고, 디지털 출력으로 핀 모드 설정을 먼저 해야 해요.
* 부저는 끌 때까지 계속해서 소리를 울려요.
* 끌 때는 주파수 0을 울리게 하면 돼요.

***

### 파이썬 대응 코드

아두이노 코드는 파이썬에 대응되는 코드가 없어 제공되지 않아요.

***

### 예시

{% code title="예시 코드" %}

```
@아두이노 11번 핀 디지털 출력 설정
@아두이노 11번 핀 부저 312울리기
1초 기다리기
@아두이노 11번 핀 부저 0울리기
```

{% endcode %}

{% code title="예시 코드의 결과" %}

```
(1초동안 부저가 312 주파수의 소리를 울림)
```

{% endcode %}

***

### 검색 키워드

초음파 피아노, 소리 재생, 스피커, 수동 부저, 능동 부저, 주파수


# 마이크로비트 보드를 호랑 서비스와 연결하는 방법

### 설명

마이크로비트 보드가 호랑 서비스와 연결되지 않는 문제가 발생하나요?

아래의 자가진단을 통해 해결할 수 있어요.

***

### 마이크로비트 보드를 호랑 서비스와 연결하는 방법

1. 마이크로비트 보드에 전원을 공급합니다.
2. 전원이 켜지며 뜨는 영어 기기번호 5자리를 기억합니다. 이 기기번호는 마이크로비트 보드 뒷면의 버튼을 누르면 다시 볼 수 있습니다.
3. 호랑 서비스에서 연결 버튼을 누르고, 해당 기기번호와 일치하는 기기를 골라 연결합니다.
4. 중복 연결 방지를 위해 연결된 후 마이크로비트 보드에 뜨는 영어 대문자 알파벳을 보고 호랑 서비스에 입력합니다.

***

### 연결 문제 해결 자가진단 (자동)

<a href="https://horang.it/" class="button secondary">자가진단 바로가기 (제공 예정)</a>

위 버튼을 눌러 연결 상태 자가진단을 자동으로 수행할 수 있어요.

***

### 연결 문제 해결 자가진단 (수동)

1-1.  `PC 환경이라면` Chrome이나 Edge 브라우저를 사용하고 있나요? 다른 브라우저에서는 보드에 연결할 수 없어요.\
1-2. `태블릿 환경이라면` 갤럭시탭을 사용하고 있나요? 아이패드에서는 보드에 연결할 수 없어요.\
1-3. `태블릿 환경이라면` 호랑 앱을 사용하고 있나요? 태블릿 브라우저에서는 보드에 연결할 수 없어요.

2\. 보드를 USB 케이블에서 분리하고 다시 연결한 후 브라우저를 새로고침하거나, 앱을 껐다가 켜서 다시 보드에 연결해 보세요.

3\. 그래도 해결되지 않는다면 선생님께서 호랑에듀 고객센터[(고객센터 바로가기)](http://horangedu.channel.io/)로 연락해 주세요. 기술 상 문제로써 해결이 가능할 경우, 즉시 해결해 드리겠습니다.

***

### 마이크로비트 보드를 호랑 서비스와 연결할 수 있는 조건

아래의 모든 조건이 성립되어야 마이크로비트 보드와 호랑 서비스를 연결해 사용할 수 있어요.

* 주식회사 호랑에듀에서 구입한 마이크로비트 보드 or 주식회사 호랑에듀에서 안내드린 방법을 적용한 마이크로비트 보드
* 마이크로비트 보드에 전원 공급 (PC/태블릿과 직결되지 않아도 무관)
* (PC) Chrome 및 Edge 브라우저 / (태블릿) 플레이스토어에서 다운받은 호랑 앱 [(다운로드 바로가기)](https://play.google.com/store/apps/details?id=it.horang.app)

<table><thead><tr><th width="335">기기 및 OS</th><th>가능한 환경</th></tr></thead><tbody><tr><td>PC (windows)</td><td>Chrome 또는 Edge 브라우저</td></tr><tr><td>Mac (맥북)</td><td>Chrome 또는 Edge 브라우저</td></tr><tr><td>아이패드</td><td>X (불가능)</td></tr><tr><td>갤럭시탭</td><td>호랑 앱 <a href="https://play.google.com/store/apps/details?id=it.horang.app">(다운로드 바로가기)</a></td></tr><tr><td>모바일 (아이폰)</td><td>X (불가능)</td></tr><tr><td>모바일 (안드로이드)</td><td>호랑 앱 <a href="https://play.google.com/store/apps/details?id=it.horang.app">(다운로드 바로가기)</a></td></tr></tbody></table>

***

### 마이크로비트의 센서가 작동하지 않나요?

현재 호랑 서비스는 아래의 센서들의 작동을 보장하고 있어요.

| 센서명          | 사용 방법                                    |
| ------------ | ---------------------------------------- |
| 점화면 (도트매트릭스) | [\[마이크로비트\] 점화면 (LED 화면)](/microbit/037) |
| 전면 2개 버튼     | [\[마이크로비트\] 버튼](/microbit/038)           |
| 자이로 센서       | [\[마이크로비트\] 자이로 센서 좌표](/microbit/039)    |
| 온도 센서        | [\[마이크로비트\] 온도 센서](/microbit/040)        |

위의 센서 리스트에 없는 센서는 아직 작동을 보장하진 않으나, 호랑에듀 고객센터[(고객센터 바로가기)](http://horangedu.channel.io/)로 연락주시면 빠르게 작동할 수 있도록 조치해 드릴게요.


# \[마이크로비트] 점화면 (LED 화면)

### 코드

{% code title="점화면을 모두 끌 때" %}

```
@마이크로비트 점화면 초기화
```

{% endcode %}

{% code title="2차원 리스트로 점화면을 그릴 때" %}

```
@마이크로비트 점화면 [2차원 리스트] 그리기
```

{% endcode %}

{% code title="텍스트를 띄우게 할 때" %}

```
@마이크로비트 점화면 "문자열" 띄우기
```

{% endcode %}

***

### 설명

마이크로비트의 점화면(도트매트릭스)를 제어할 때 사용하는 명령어들이에요.

***

### 주의사항

* 차원 리스트로 점화면 전체를 설정할 때에는, 꼭 2차원 리스트(`[ [], [] ]`)을 사용해야 해요.
  * 초기화 리스트는 아래와 같아요.
  * `[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]`
* 텍스트를 띄울  때 한글과 (영어, 숫자, 일부 특수 문자)를 함께 작성할 수 없어요.

***

### 파이썬 대응 코드

마이크로비트 코드는 파이썬에 대응되는 코드가 없어 제공되지 않아요.

***

### 예시

{% code title="예시 코드1 (영어 띄우기)" %}

```
@마이크로비트 점화면 초기화
@마이크로비트 점화면 "A" 띄우기
```

{% endcode %}

{% code title="예시 코드2 (한글 띄우기)" %}

```
@마이크로비트 점화면 초기화
@마이크로비트 점화면 "안녕!" 띄우기
(마이크로비트에 "ㅇㅏㄴㄴㅕㅇ!"이 순서대로 나온다.)
```

{% endcode %}

{% code title="예시 코드3 (리스트로 점화면 그리기)" %}

```
@마이크로비트 점화면 [
    [0,1,0,1,0],
    [0,1,0,1,0],
    [0,0,0,0,0],
    [1,0,0,0,1],
    [0,1,1,1,0]
] 그리기
```

{% endcode %}

***

### 검색 키워드

도트매트릭스, 세그먼트, 디스플레이, 화면, 마이크로비트, LED화면, 점화면


# \[마이크로비트] 버튼

### 코드

```
@마이크로비트 오른쪽 버튼
```

```
@마이크로비트 왼쪽 버튼
```

***

### 설명

각 버튼의 상태값을 `참`/`거짓`으로 가져와요. 자세한 내용은 [값 종류(자료형)](/readme/001)를 참고해 주세요.

***

### 주의사항

* 조건문 등에 직접 넣어서 사용해야 해요. 예시 코드를 참고해 주세요.

***

### 파이썬 대응 코드

마이크로비트 코드는 파이썬에 대응되는 코드가 없어 제공되지 않아요.

***

### 예시

{% code title="예시 코드" %}

```
만약 (@마이크로비트 오른쪽 버튼) 이면
    "눌렸다!" 보여주기  # [출력하는 것으로, 마이크로비트 코드와 무관합니다]
아니면
    "안눌렸다!" 보여주기  # [출력하는 것으로, 마이크로비트 코드와 무관합니다]
```

{% endcode %}

***

### 검색 키워드

눌림 상태


# \[마이크로비트] 자이로 센서 좌표

### 코드

```
@마이크로비트 {X/Y/Z} 좌표 가져오기
```

***

### 설명

자이로 센서의 상태값을 숫자로 가져와요.

***

### 주의사항

* X/Y/Z 중 한 가지만 가져올 수 있어요.

***

### 파이썬 대응 코드

마이크로비트 코드는 파이썬에 대응되는 코드가 없어 제공되지 않아요.

***

### 예시

{% code title="예시 코드" %}

```
(@마이크로비트 X 좌표 가져오기) 보여주기
```

{% endcode %}

***

### 검색 키워드

위치, 흔들기


# \[마이크로비트] 온도 센서

### 코드

```
@마이크로비트 온도 가져오기
```

***

### 설명

마이크로비트 온도 센서의 온도값을 숫자로 가져와요.

***

### 주의사항

* ~~영하 온도를 측정할 수 없어요.~~ <mark style="background-color:$danger;">**확인 중**</mark>

***

### 파이썬 대응 코드

마이크로비트 코드는 파이썬에 대응되는 코드가 없어 제공되지 않아요.

***

### 예시

{% code title="예시 코드" %}

```
(@마이크로비트 온도 가져오기) 보여주기
```

{% endcode %}

***

### 검색 키워드

온습도


# 햄스터로봇을 호랑 서비스와 연결하는 방법

***

### 햄스터로봇을 호랑 서비스와 연결하는 방법

1. 햄스터로봇의 전원을 켠 뒤, `하드웨어 연결` 탭에서 `@햄스터`를 누릅니다.
2. `USB 동글로 연결` / `블루투스 직접 연결` 중 상황에 맞는 항목을 선택합니다.
3. 햄스터로봇을 찾아 선택한 후 `연결` 버튼을 누릅니다.

***


# \[햄스터로봇] 속도 설정하기

### 코드

{% code title="양쪽 바퀴의 속도를 설정할 때" %}

```
@햄스터 속도 (속도_크기) 설정하기
```

{% endcode %}

{% code title="바퀴의 속도를 각각 설정할 때" %}

```
@햄스터 속도 (왼쪽바퀴_속도, 오른쪽바퀴_1속도) 설정하기
```

{% endcode %}

***

### 설명

* 햄스터로봇의 기본 이동 속도를 설정할 때 사용해요.
* 이후 `@햄스터 이동하기`를 실행하면 설정한 속도로 움직여요.

***

### 주의사항

* 너무 큰 값은 제어가 불안정할 수 있어요.
* 속도만 설정하면 바로 이동하지 않고, `이동하기`가 필요해요.
* 음수/비정상 값은 환경에 따라 동작이 달라질 수 있어요.

***

### 파이썬 대응 코드

```
from roboid import *
hamster = Hamster()
hamster.wheels(40)
```

***

### 예시

{% code title="예시 코드1" %}

```
@햄스터 속도 40 설정하기
@햄스터 이동하기
1초 기다리기
```

{% endcode %}

{% code title="예시 코드1의 결과" %}

```
(햄스터로봇이 속도 40 기준으로 1초 동안 전진해요.)
```

{% endcode %}

{% code title="예시 코드2" %}

```
@햄스터 속도 (50, 0) 설정하기
@햄스터 이동하기
1초 기다리기
```

{% endcode %}

{% code title="예시 코드1의 결과" %}

```
(햄스터로봇이 오른쪽으로 돌아요. = 왼쪽바퀴만 앞으로 가요.)
```

{% endcode %}

***

### 검색 키워드

햄스터로봇, 속도 설정하기


# \[햄스터로봇] 이동하기

### 코드

```
@햄스터 이동하기
```

***

### 설명

* 햄스터로봇을 현재 설정된 속도로 이동시킬 때 사용해요.

***

### 주의사항

* `속도 설정하기`를 먼저 해두는 게 좋아요.
* 장애물/낙하 위험 환경에서는 주의해서 실행해야 해요.

***

### 파이썬 대응 코드

```
from roboid import *
hamster = Hamster()
hamster.wheels(40)
```

***

### 예시

{% code title="예시 코드" %}

```
@햄스터 속도 40 설정하기
@햄스터 이동하기
1초 기다리기
```

{% endcode %}

{% code title="예시 코드의 결과" %}

```
(햄스터로봇이 속도 40 기준으로 1초 동안전진해요.)
```

{% endcode %}

***

### 검색 키워드

햄스터로봇, 이동하기


# \[햄스터로봇] 정지하기

### 코드

```
@햄스터 정지하기
```

***

### 설명

* 이동 중인 햄스터로봇을 멈출 때 사용해요.

***

### 파이썬 대응 코드

```
from roboid import *
hamster = Hamster()
hamster.wheels(0)
```

***

### 예시

{% code title="예시 코드" %}

```
@햄스터 이동하기
2초 기다리기
@햄스터 정지하기
```

{% endcode %}

{% code title="예시 코드의 결과" %}

```
(햄스터로봇이 2초 이동 후 멈춰요.)
```

{% endcode %}

***

### 검색 키워드

햄스터로봇, 속도 설정하기


# \[햄스터로봇] 왼쪽/오른쪽 근접센서

### 코드

```
@햄스터 왼쪽 근접센서
@햄스터 오른쪽 근접센서
```

***

### 설명

* 햄스터로봇의 좌우 근접센서 값을 읽어 장애물과의 가까움을 판단할 때 사용해요.

***

### 주의사항

* 센서 값 범위는 기기/환경에 따라 달라질 수 있어요.
* 기준값(예: 30 이상)을 정해서 조건문으로 제어해요.

***

### 파이썬 대응 코드

```
from roboid import *
hamster = Hamster()
while True:
    print(hamster.left_proximity(), hamster.right_proximity()) # python 3.x.x
    print hamster.left_proximity(), hamster.right_proximity() # python 2.7.x
    wait(20)
```

***

### 예시

{% code title="예시 코드" %}

```
왼쪽값 = @햄스터 왼쪽 근접센서
오른쪽값 = @햄스터 오른쪽 근접센서
왼쪽값 + "," + 오른쪽값 보여주기
```

{% endcode %}

{% code title="예시 코드의 결과" %}

```
(햄스터로봇의 현재 좌우 근접센서 값이 출력돼요.)
```

{% endcode %}

***

### 검색 키워드

햄스터로봇, 근접센서, 왼쪽 근접센서, 오른쪽 근접센서


# \[햄스터로봇] 왼쪽/오른쪽 바닥센서

### 코드

```
@햄스터 왼쪽 바닥센서
@햄스터 오른쪽 바닥센서
```

***

### 설명

* 바닥 밝기/라인 상태를 감지할 때 사용하는 센서예요.
* 라인트레이싱 같은 활동에 활용해요.

***

### 주의사항

* 바닥 색상/조도에 따라 값이 달라져요.
* 기준값은 실습 환경에서 직접 측정 후 정하는 게 좋아요.

***

### 파이썬 대응 코드

```
from roboid import *
hamster = Hamster()
while True:
    print(hamster.left_floor(), hamster.right_floor()) # python 3.x.x
    #print hamster.left_floor(), hamster.right_floor() # python 2.7.x
    wait(20)
```

***

### 예시

{% code title="예시 코드" %}

```
왼바닥 = @햄스터 왼쪽 바닥센서
오른바닥 = @햄스터 오른쪽 바닥센서
왼바닥 + "," + 오른바닥 보여주기
```

{% endcode %}

{% code title="예시 코드의 결과" %}

```
(햄스터로봇의 현재 좌우 바닥센서 값이 출력돼요.)
```

{% endcode %}

***

### 검색 키워드

햄스터로봇, 바닥센서, 왼쪽 바닥센서, 오른쪽 바닥센서


# \[햄스터로봇] 불빛 설정하기

### 코드

```
@햄스터 불빛 (값) 설정하기
```

***

### 설명

* 햄스터로봇의 LED 상태를 설정할 때 사용해요.
* 숫자 1개를 넣으면 양쪽 LED가 같은 색으로 설정되고,\
  리스트 `[왼쪽, 오른쪽]` 형태로 넣으면 좌우를 다르게 설정할 수 있어요.

  <table><thead><tr><th width="183.88897705078125">번호</th><th>색상</th></tr></thead><tbody><tr><td>0</td><td>꺼짐</td></tr><tr><td>1</td><td>파랑</td></tr><tr><td>2</td><td>초록</td></tr><tr><td>3</td><td>하늘</td></tr><tr><td>4</td><td>빨강</td></tr><tr><td>5</td><td>자홍</td></tr><tr><td>6</td><td>노랑</td></tr><tr><td>7</td><td>흰색</td></tr></tbody></table>

***

### 주의사항

* 잘못된 값은 LED가 변경되지 않을 수 있어요.
* 숫자 범위는 `0~7`이에요.
* 범위를 벗어난 값은 `0~7` 범위로 자동 보정돼요.

***

### 파이썬 대응 코드

```
hamster.leds(Hamster.LED_BLUE)
```

***

### 예시

{% code title="예시 코드1" %}

```
@햄스터 불빛 1 설정하기
```

{% endcode %}

{% code title="예시 코드1의 결과" %}

```
(햄스터로봇 LED 상태가 파란색으로 바뀌어요.)
```

{% endcode %}

{% code title="예시 코드2" %}

```
@햄스터 불빛 [5, 6] 설정하기
```

{% endcode %}

{% code title="예시 코드2의 결과" %}

```
(햄스터로봇 LED 상태가 왼쪽은 노란색, 오른쪽은 자홍색으로 바뀌어요.)
```

{% endcode %}

***

### 검색 키워드

햄스터로봇, LED, 불빛 제어


# \[햄스터로봇] 부저 설정하기

### 코드

```
@햄스터 부저 (값) 설정하기
```

***

### 설명

* 햄스터로봇이 부저 주파수를 설정해 소리를 낼 때 사용해요.

***

### 주의사항

* 너무 높은 주파수는 불쾌한 소리로 들릴 수 있어요.
* 실습 환경 소음에 주의해요.

***

### 파이썬 대응 코드

```
from roboid import *
hamster = Hamster()
hamster.buzzer(440)
```

***

### 예시

{% code title="예시 코드" %}

```
@햄스터 부저 440 설정하기
1초 기다리기
@햄스터 부저 0 설정하기
```

{% endcode %}

{% code title="예시 코드의 결과" %}

```
(햄스터로봇이 1초 동안 440Hz 소리를 출력한 뒤 멈춰요.)
```

{% endcode %}

***

### 검색 키워드

햄스터로봇, 부저, 소리


# \[햄스터로봇] 음정 설정하기

### 코드

```
@햄스터 음정 (값) 설정하기
```

***

### 설명

* 햄스터로봇의 음계를 사용해 음정 기반 소리를 낼 때 사용해요.

***

### 주의사항

* 부저와 함께 사용할 때 출력이 겹치지 않게 주의해요.

***

### 파이썬 대응 코드

```
from roboid import *
hamster = Hamster()
hamster.buzzer(440)
```

***

### 예시

{% code title="예시 코드" %}

```
@햄스터 음정 60 설정하기
1초 기다리기
@햄스터 음정 0 설정하기
```

{% endcode %}

{% code title="예시 코드의 결과" %}

```
(지정한 음정이 재생됐다가 멈춰요.)
```

{% endcode %}

***

### 검색 키워드

햄스터로봇, 음정, 소리


# \[인공지능] 물어보기

### 코드

```
@인공지능 {내용} 물어보기
```

***

### 설명

인공지능(ChatGPT)에서 무엇이든 물어볼 수 있어요.

결과는 문자열로 반환되고, API 요청 시간이 걸림에 따라 결과를 받아오기까지 조금 시간이 걸릴 수 있어요.

***

### 주의사항

* 결과는 문자열로만 반환돼요.

***

### 파이썬 대응 코드

인공지능 코드는 파이썬에 대응되는 코드가 없어 제공되지 않아요.

***

### 예시

{% code title="예시 코드" %}

```
(@인공지능 "지구는 몇 살이야?" 물어보기) 보여주기
```

{% endcode %}

***

### 검색 키워드

AI, 인공지능, 물어보기


# \[인공지능] 티처블 머신 사용하기

### 코드

{% code title="인공지능 모델을 불러올 때" %}

```
@인공지능 "링크" 불러오기
```

{% endcode %}

{% code title="카메라로 사진을 찍을 때" %}

```
@카메라 사진찍기
```

{% endcode %}

{% code title="카메라로 찍은 사진을 인공지능 모델로 분류할 때" %}

```
@인공지능 {인공지능_모델} 로 {찍은_사진} 분류하기
```

{% endcode %}

***

### 설명

티처블 머신(Teachable Machine)에서 공유한 인공지능 모델을 불러오고, 카메라로 촬영한 사진을 해당 모델로 분류할 수 있어요.

\
`@카메라 사진찍기`를 실행하면 카메라가 켜지고, 3초 후 촬영된 사진이 변수에 저장돼요.\
사진을 분류하면 결과가 **딕셔너리 형태**로 반환돼요.\
딕셔너리에는 각 분류 항목(클래스)과 해당 항목일 확률 값(0\~1 사이의 실수)이 함께 저장돼요.

인공지능 모델을 불러오거나 사진을 분류하는 과정에서는 네트워크 및 연산 처리로 인해 약간의 시간이 걸릴 수 있어요.

***

### 주의사항

* 인공지능 분류 결과는 딕셔너리로 반환돼요.
* 불러오는 티처블 머신 링크는 인공지능 모델이 포함된 유효한 주소여야 해요.
* 사진 촬영과 분류 과정에서 결과를 받아오기까지 약간의 시간이 걸릴 수 있어요.

***

### 파이썬 대응 코드

인공지능 코드는 파이썬에 대응되는 코드가 없어 제공되지 않아요.

***

### 예시

{% code title="예시 코드" %}

```
하랑이_분류모델 = @인공지능 "https://teachablemachine.withgoogle.com/models/모델/" 불러오기

찍은_사진 = @카메라 사진찍기
분류_결과 = @인공지능 하랑이_분류모델 로 찍은_사진 분류하기

분류_결과 보여주기
```

{% endcode %}

{% code title="예시 코드의 결과" %}

```
(인공지능 모델을 불러와서 하랑이_분류모델 변수에 저장해요.)
(카메라로 찍은 사진을 찍은_사진 변수에 저장해요.)
(인공지능_모델로 찍은_사진을 분류한 결과를 분류_결과 변수에 딕셔너리 형태로 저장해요.)
{
	공부하는 하랑이: 0.9449184536933899
	신난 하랑이: 0.0017847634153440595
	졸린 하랑이: 0.0045095933601260185
	슬픈 하랑이: 0.04878726229071617
}
```

{% endcode %}

{% code title="특정 항목(클래스)의 분류 결과를 확인할 때" %}

```
분류_결과["공부하는 하랑이"] 보여주기
분류_결과['슬픈 하랑이'] 보여주기
```

{% endcode %}

{% code title="특정 항목(클래스)의 분류 결과를 확인할 때의 결과" %}

```
0.9449184536933899
0.04878726229071617
```

{% endcode %}

***

### 검색 키워드

AI, 인공지능, 이미지 분류, 티처블 머신, 카메라, 머신러닝


# \[데이터] @데이터 사용하기

***

### 코드놀이터에서 `@데이터`를 사용하는 방법

1. 코드 놀이터 상단의 `약속 확장` 버튼을 누릅니다.
2. `추가 가능한 확장`에서 데이터 항목의 `추가하기` 버튼을 누릅니다.

***

### 호랑에서 데이터를 불러오는 방법

1. 출력창 아래의 하드웨어 연결/명령어 꾸러미/데이터 항목중 `데이터`를 선택합니다.
2. 오른쪽의 `불러오기` 버튼을 누릅니다.
3. 원하는 분류를 선택합니다.
4. 분류 내 데이터  중에서 원하는 데이터들을선택합니다.
5. 아래의 `선택한 데이터 불러오기` 버튼을 누릅니다.

***

### 설명

* 불러온 데이터는 제목 옆의 `··· 버튼`을 눌러 이름을 변경하거나 삭제할 수 있어요.
* 속성의 이름과 자료형을 수정하고 싶을 땐 속성명 옆의  `··· 버튼`을 눌러 수정할 수 있어요.
* 원하는 칸을 눌러 값을 수정할 수 있어요.
* 특정 항목을 삭제하고 싶을 때는 항목 오른쪽의 `X`를 누르면 삭제돼요.
* 항목을 추가하고 싶을 때는 데이터셋 아래의 `항목 추가`를 누르면 새로운 항목이 추가돼요.

***

### 주의사항

* 데이터 관련 문법을 사용할 때는 `@데이터`를 코드 앞에 작성해야 해요.

***

### 검색 키워드

데이터 불러오기, @데이터 사용하기


# \[데이터] 데이터셋 불러오기

### 코드

```
@데이터 "데이터셋_이름" 불러오기
```

***

### 설명

저장된 데이터셋 이름을 기준으로 데이터를 불러올 때 사용해요.

***

### 주의사항

* 데이터셋 이름은 실제로 존재하는 이름이어야 해요.
* 불러오기 실패 시 이후의 코드도 동작하지 않을 수 있어요.

***

### 파이썬 대응 코드

```
df = load_by_data_name(data_name)
```

***

### 예시

{% code title="예시 코드" %}

```
인구데이터 = @데이터 "2022~2050 추계 인구" 불러오기
인구데이터 보여주기
```

{% endcode %}

{% code title="예시 코드의 결과" %}

```
[{
	연도: 2022
	총인구: 51672569
}, {
	연도: 2023
	총인구: 51712619
}, {
	연도: 2024
	총인구: 51751065
}, {
	연도: 2025
	총인구: 51684564
},
...
]
```

{% endcode %}

***

### 검색 키워드

데이터 불러오기


# \[데이터] 데이터셋에서 특정 속성만 가져오기

### 코드

```
@데이터 "데이터셋_이름"에서 "특정_속성"만 가져오기
```

***

### 설명

데이터 전체에서 특정 속성만 추출할 때 사용해요. 분석 전에 필요한 속성만 선택해 가볍게 처리할 수 있어요.

***

### 주의사항

* 속성  이름에 오탈자가 있으면 결과가 비거나 오류가 날 수 있어요.
* 단일 속성만 가져오므로 다른 컬럼 정보는 포함되지 않아요.
* 원본 데이터는 바뀌지 않고 추출 결과만 새로 만들어져요.

***

### 파이썬 대응 코드

```
selected = df[[column_name]] # 또는 df[column_name]
```

***

### 예시

{% code title="예시 코드" %}

```
인구데이터 = @데이터 "2022~2050 추계 인구" 불러오기
인구예측 = @데이터 인구데이터 에서 "총인구"만 가져오기
인구예측 보여주기
```

{% endcode %}

{% code title="예시 코드의 결과" %}

```
[51672569, 51712619, 51751065, 51684564, 51609121, 51534551, 51459877, 51384052, 51305713, 51223269, 51135265, 51040632, 50937726, 50824868, 50701389, 50567057, 50417167, 50247657, 50059218, 49851637, 49625415, 49380766, 49117432, 48835031, 48532231, 48208374, 47863071, 47495914, 47106960]
```

{% endcode %}

***

### 검색 키워드

속성 추출, 열 선택, 속성 선택, 열 추출


# \[데이터] 데이터의 최대/최소/평균

### 코드

{% code title="데이터에서 최댓값을 구할 때" %}

```
@데이터 "데이터셋_이름"에서 "속성_이름"의 최대
```

{% endcode %}

{% code title="데이터에서 최솟값을 구할 때" %}

```
@데이터 "데이터셋_이름"에서 "속성_이름"의 최소
```

{% endcode %}

{% code title="데이터에서 평균값을 구할 때" %}

```
@데이터 "데이터셋_이름"에서 "속성_이름"의 평균
```

{% endcode %}

***

### 설명

데이터에 대한 최대/최소/평균 값을 반환합니다.

* 데이터는 최대/최소/평균 계산이 가능한 숫자형 데이터여야 해요.
* 결측치/문자열이 섞여 있으면 환경에 따라 오류나 누락이 생길 수 있어요.

***

### 주의사항

* 수학 코드를 쓸 때는 앞에 `@수학`을 써야 해요.
* 반올림 기준은 0.5예요.

***

### 파이썬 대응 코드

```
import math
round(x)
math.ceil(x)
math.floor(x)
```

***

### 예시

{% code title="예시 코드" %}

```
인구데이터 = @데이터 "2022~2050 추계 인구" 불러오기
@데이터 "인구데이터"에서 "총인구"의 최대 보여주기
@데이터 "인구데이터"에서 "총인구"의 최소 보여주기
@데이터 "인구데이터"에서 "총인구"의 평균 보여주기
```

{% endcode %}

{% code title="예시 코드의 결과" %}

```
51751065
47106960
50251214.137931034
```

{% endcode %}

***

### 검색 키워드

데이터, 최대, 최소, 평균


# \[그래프] @그래프 사용하기

***

### 코드놀이터에서 `@그래프`를 사용하는 방법

1. 코드 놀이터 상단의 `약속 확장` 버튼을 누릅니다.
2. `추가 가능한 확장`에서 그래프 항목의 `추가하기` 버튼을 누릅니다.

***

### 주의사항

* 데이터 관련 문법을 사용할 때는 `@그래프`를 코드 앞에 작성해야 해요.

***

### 검색 키워드

@그래프 사용하기


# \[그래프] 막대그래프 그리기

### 코드

```
@그래프 (데이터) "가로축"별 "세로축"으로 막대그래프 그리기
```

***

### 설명

가로축과 세로축을 지정해서 막대그래프를 그릴 때 사용해요.

***

### 주의사항

* 가로축/세로축은 실제 속성과 이름이 동일해야 해요.
* 세로축의 값은 숫자형이어야 해요.

***

### 파이썬 대응 코드

```
import matplotlib.pyplot as plt
plt.bar(df[label_key], df[value_key])
plt.show()
```

***

### 예시

{% code title="예시 코드" %}

```
인구데이터 = @데이터 "2026년 3월 행정구역별 인구수" 불러오기
@그래프 인구데이터 "행정구역"별 "인구"로 막대그래프 그리기
```

{% endcode %}

{% code title="예시 코드의 결과" %}

```
(행정구역별 인구수를 보여주는 막대그래프가 표시돼요.)
```

{% endcode %}

***

### 검색 키워드

막대그래프


# \[그래프] 원그래프 그리기

### 코드

```
@그래프 (데이터) "가로축"별 "세로축"으로 원그래프 그리기
```

***

### 설명

가로축과 세로축을 지정해서 원그래프를 그릴 때 사용해요.

***

### 주의사항

* 가로축/세로축은 실제 속성과 이름이 동일해야 해요.
* 세로축의 값은 숫자형이어야 해요.

***

### 파이썬 대응 코드

```
import matplotlib.pyplot as plt
plt.pie(df[value_key], labels=df[label_key], autopct='%1.1f%%')
plt.show()
```

***

### 예시

{% code title="예시 코드" %}

```
인구데이터 = @데이터 "2026년 3월 행정구역별 인구수" 불러오기
@그래프 인구데이터 "행정구역"별 "인구"로 원그래프 그리기
```

{% endcode %}

{% code title="예시 코드의 결과" %}

```
(행정구역별 인구수를 보여주는 원그래프가 표시돼요.)
```

{% endcode %}

***

### 검색 키워드

원그래프


# \[그래프] 꺾은선그래프 그리기

### 코드

```
@그래프 (데이터) "가로축"별 "세로축"으로 꺾은선그래프 그리기
```

***

### 설명

가로축과 세로축을 지정해서 꺾은선그래프를 그릴 때 사용해요.

***

### 주의사항

* 가로축/세로축은 실제 속성과 이름이 동일해야 해요.
* 세로축의 값은 숫자형이어야 해요.

***

### 파이썬 대응 코드

```
import matplotlib.pyplot as plt
plt.plot(df[label_key], df[value_key])
plt.show()
```

***

### 예시

{% code title="예시 코드" %}

```
인구데이터 = @데이터 "2026년 3월 행정구역별 인구수" 불러오기
@그래프 인구데이터 "행정구역"별 "인구"로 꺾은선그래프 그리기
```

{% endcode %}

{% code title="예시 코드의 결과" %}

```
(행정구역별 인구수를 보여주는 꺾은선그래프가 표시돼요.)
```

{% endcode %}

***

### 검색 키워드

꺾은선그래프


# \[수학] 반올림 / 올림 / 버림

### 코드

{% code title="값을 반올림할 때" %}

```
@수학 (값) 반올림
```

{% endcode %}

{% code title="값을 올림할 때" %}

```
@수학 (값) 올림
```

{% endcode %}

{% code title="값을 내림할 때" %}

```
@수학 (값) 내림
```

{% endcode %}

{% code title="특정 자리까지의 반올림/올림/내림 값을 보여줄 때" %}

```
@수학 (값) 소수점 (숫자)번째까지 반올림/올림/내림
```

{% endcode %}

***

### 설명

값에 대한 반올림 / 올림 / 버림 결과를 반환합니다.

* 반올림 :  $$\lfloor x + 0.5 \rfloor$$
* 올림 : $$\lceil x \rceil$$
* 버림 : 소수점을 0 방향으로 깎아내는 절단(Truncation) 방식으로 음수 영역에서는 바닥 함수 $$\lfloor x \rfloor$$ 와  차이가 있어요.

***

### 주의사항

* 수학 코드를 쓸 때는 앞에 `@수학`을 써야 해요.
* 반올림 기준은 0.5예요.

***

### 파이썬 대응 코드

```
import math
round(x)
math.ceil(x)
math.floor(x)
```

***

### 예시

{% code title="예시 코드" %}

```
# 반올림
@수학 3.7 반올림 보여주기
@수학 3.2 반올림 보여주기
@수학 -3.3 반올림 보여주기

# 올림
@수학 3.1 올림 보여주기

# 버림
@수학 3.9 버림 보여주기

# 특정 소수 자리까지 보여주기
(@수학 3.735323 소수점 2번째까지 반올림) 보여주기
```

{% endcode %}

{% code title="예시 코드의 결과" %}

```
4  # 3.7 반올림
3  # 3.2 반올림
-3 # -3.3 반올림
4  # 3.1 올림
3  # 3.9 버림
3.74 #소수점 2번째까지 반올림
```

{% endcode %}

***

### 검색 키워드

수학, 반올림, 올림, 버림


# \[수학] 절댓값

### 코드

{% code title="값에 대한 절댓값을 구할 때" %}

```
@수학 (값)의 절댓값/절대값
```

{% endcode %}

### 설명

값에 대한 절댓값을 반환합니다.

$$
|x| = \begin{cases} x, & \quad x \ge 0 \ -x, & \quad x < 0 \end{cases}
$$

***

### 주의사항

* 수학 코드를 쓸 때는 앞에 `@수학`을 써야 해요.
* 절댓값은 항상 0 이상의 값이 나와요.

***

### 파이썬 대응 코드

```
abs(x)
```

***

### 예시

{% code title="예시 코드" %}

```
@수학 -5의 절댓값 보여주기
@수학 (-10)의 절대값 보여주기
```

{% endcode %}

{% code title="예시 코드의 결과" %}

```
5   # -5의 절댓값
10  # -10의 절댓값
```

{% endcode %}

***

### 검색 키워드

수학, 절댓값, 절대값


# \[수학] 제곱 / 제곱근 / 거듭제곱

### 코드

{% code title="값의 제곱을 구할 때" %}

```
@수학 (값)의 제곱
```

{% endcode %}

{% code title="값의 제곱근을 구할 때" %}

```
@수학 (값)의 제곱근
```

{% endcode %}

{% code title="값의 거듭 제곱을 구할 때" %}

```
@수학 (밑)의 (지수)제곱/거듭제곱/승
```

{% endcode %}

***

### 설명

값에 대한 제곱 / 제곱근 / 거듭 제곱 결과를 반환합니다.

* 제곱: $$x^2$$
* 제곱근: $$\sqrt{x}$$ 또는 $$x^{0.5}$$
* 거듭제곱: $$a^b$$ ($$a$$는 밑, $$b$$는 지수)

***

### 주의사항

* 수학 코드를 쓸 때는 앞에 `@수학`을 써야 해요.
* 반올림 기준은 0.5예요.

***

### 파이썬 대응 코드

```
import math

x ** y
math.sqrt(x)
pow(x, y)
```

***

### 예시

{% code title="예시 코드" %}

```
# 제곱
@수학 5의 제곱 보여주기

# 제곱근
@수학 16의 제곱근 보여주기

# 거듭제곱/제곱/승
@수학 2의 10제곱 보여주기
@수학 2의 3거듭제곱 보여주기
@수학 3의 3승 보여주기
```

{% endcode %}

{% code title="예시 코드의 결과" %}

```
25    # 5의 제곱
4     # 16의 제곱근
1024  # 2의 10제곱
8     # 2의 3거듭제곱
27    # 3의 3승
```

{% endcode %}

***

### 검색 키워드

수학, 제곱, 루트, 제곱근, 거듭제곱, 지수제곱, 승


# \[수학] 로그 / 상용로그 / 자연로그

### 코드

{% code title="값의 로그 값을 구할 때" %}

```
@수학 (밑)을/를 밑으로 하는 (값)의 로그
```

{% endcode %}

{% code title="값의 상용로그 값을 구할 때" %}

```
@수학 (값)의 상용로그
```

{% endcode %}

{% code title="값의 자연로그 값을 구할 때" %}

```
@수학 (값)의 자연로그
```

{% endcode %}

***

### 설명

값에 대한 로그 / 상용로그 / 자연로그 결과를 반환합니다.

* 로그: $$\log\_a(x)$$
* 상용로그: $$\log\_{10}(x)$$ 또는 $$\log(x)$$
* 자연로그: $$\ln(x)$$ 또는 $$\log\_e(x)$$

***

### 주의사항

* 수학 코드를 쓸 때는 앞에 `@수학`을 써야 해요.
* 로그에서 진수는 양수($$x > 0$$)이고, 밑은  양수($$a > 0$$)이면서 1이 아니어야($$a \neq 1$$) 해요.

***

### 파이썬 대응 코드

```
import math
math.log(x)        # 자연로그
math.log10(x)      # 상용로그
math.log(x, base)  # 임의 밑
```

***

### 예시

{% code title="예시 코드" %}

```
# 밑 로그
@수학 2를 밑으로 하는 8의 로그 보여주기
@수학 2를 밑으로 하는 1의 로그 보여주기

# 상용로그
@수학 100의 상용로그 보여주기

# 자연로그
@수학 2.7182818의 자연로그 보여주기
```

{% endcode %}

{% code title="예시 코드의 결과" %}

```
3  # log(2, 8)
0  # log(2, 1)
2  # log(10, 100)
0.9999999895305023 # log(e, 27182818)
```

{% endcode %}

{% code title="잘못된 로그 값을 구하려고 하는 경우" %}

```
@수학 2를 밑으로 하는 0의 로그 보여주기  # -Infinity
@수학 0를 밑으로 하는 2의 로그 보여주기  # 0
@수학 1를 밑으로 하는 2의 로그 보여주기  # Infinity
@수학 1를 밑으로 하는 1의 로그 보여주기  # NaN
@수학 -2를 밑으로 하는 2의 로그 보여주기 # NaN
@수학 2를 밑으로 하는 -2의 로그 보여주기 # NaN
```

{% endcode %}

***

### 검색 키워드

수학, 로그, 상용로그, 자연로그


# \[수학] 삼각함수 - 사인 / 코사인 / 탄젠트

### 코드

{% code title="값이 라디안인 사인/코사인/탄젠트를 구할 때" %}

```
@수학 (값)의 사인
@수학 (값)의 코사인
@수학 (값)의 탄젠트
```

{% endcode %}

{% code title="값이 각도인 사인/코사인/탄젠트를 구할 때" %}

```
@수학 사인 (각도)도
@수학 코사인 (각도)도
@수학 탄젠트 (각도)도
```

{% endcode %}

***

### 설명

입력값($$\theta$$) 라디안 또는 각도를 기준으로 삼각함수 값을 계산합니다.

* 사인: $$\sin(\theta)$$
* 코사인: $$\cos(\theta)$$
* 탄젠트: $$\tan(\theta)$$
* 도 단위 변환 시: $$\sin(\theta^\circ) = \sin\left(\frac{\pi}{180} \times \theta\right)$$

***

### 주의사항

* 수학 코드를 쓸 때는 앞에 `@수학`을 써야 해요.
* `@수학(값)의 사인/코사인/탄젠트` 는 라디안을 기준으로 값을 구해요.
* `@수학 사인/코사인/탄젠트 (각도)도`는 도 단위을 기준으로 값을 구해요.

***

### 파이썬 대응 코드

```
import math
math.sin(x)   # 라디안
math.cos(x)
math.tan(x)
math.sin(math.radians(deg))  # 도 → 라디안
```

***

### 예시

{% code title="예시 코드" %}

```
# 사인/코사인/탄젠트 (라디안)
@수학 ((@수학 파이)/2)의 사인 보여주기 # 사인(π/2) = 사인 90도
@수학 0의 코사인 보여주기
@수학 0의 탄젠트 보여주기

# 사인/코사인/탄젠트 (도)
@수학 사인 30도 보여주기
@수학 코사인 60도 보여주기
@수학 탄젠트 45도 보여주기
```

{% endcode %}

{% code title="예시 코드의 결과" %}

```
1  # π/2(90도)의 사인
1  # 0의 코사인
0  # 0의 탄젠트
0.49999999999999994 # 사인 30도
0.5000000000000001  # 코사인 60도
0.9999999999999999  # 탄젠트 45도
```

{% endcode %}

***

### 검색 키워드

수학, 삼각함수, 사인, 코사인, 탄젠트


# \[수학] 역삼각함수 - 아크사인 / 아크코사인 / 아크탄젠트

### 코드

{% code title="값이 라디안인 사인/코사인/탄젠트를 구할 때" %}

```
@수학 (값)의 사인
@수학 (값)의 코사인
@수학 (값)의 탄젠트
```

{% endcode %}

{% code title="값이 각도인 사인/코사인/탄젠트를 구할 때" %}

```
@수학 사인 (각도)도
@수학 코사인 (각도)도
@수학 탄젠트 (각도)도
```

{% endcode %}

***

### 설명

삼각함수의 함숫값을 입력받아 각도(라디안)를 반환합니다.

* 아크사인: $$\arcsin(x)$$ 또는 $$\sin^{-1}(x)$$   ($$-1 \le x \le 1$$)
* 아크코사인: $$\arccos(x)$$ 또는 $$\cos^{-1}(x)$$   ($$-1 \le x \le 1$$)
* 아크탄젠트: $$\arctan(x)$$ 또는 $$\tan^{-1}(x)$$ ( $$x \in \mathbb{R}$$ (실수))

***

### 주의사항

* 수학 코드를 쓸 때는 앞에 `@수학`을 써야 해요.
* 역삼각함수의 결과는 라디안으로 나와요.
* 아크사인/아크코사인의 정의역(입력 범위)는 \[-1, 1]이에요.

***

### 파이썬 대응 코드

```
import math
math.asin(x)
math.acos(x)
math.atan(x)
```

***

### 예시

{% code title="예시 코드" %}

```
@수학 0의 아크사인 보여주기
@수학 -1의 아크코사인 보여주기
@수학 1의 아크탄젠트 보여주기
```

{% endcode %}

{% code title="예시 코드의 결과" %}

```
0 # 0의 아크사인
3.141592653589793  # 1의 아크코사인
0.7853981633974483 # 1의 아크탄젠트
```

{% endcode %}

***

### 검색 키워드

수학, 역삼각함수, 아크사인, 아크코사인, 아크탄젠트


# \[수학] 상수 (파이 π, 자연상수 e)

### 코드

{% code title="파이(π) 값을 구할 때" %}

```
@수학 파이
```

{% endcode %}

{% code title="자연상수(e) 값을 구할 때" %}

```
@수학 자연상수
```

{% endcode %}

***

### 설명

파이 $$\pi$$, 자연상수 $$e$$를 반환합니다.

* 원주율(파이) : $$\pi \approx 3.141592...$$
* 자연상수 : $$e \approx 2.718281...$$

***

### 주의사항

* 수학 코드를 쓸 때는 앞에 `@수학`을 써야 해요.
* 상수는 값이 고정되어 변하지 않아요.

***

### 파이썬 대응 코드

```
import math
math.pi
math.e
```

***

### 예시

{% code title="예시 코드" %}

```
@수학 파이 보여주기
@수학 자연상수 보여주기
```

{% endcode %}

{% code title="예시 코드의 결과" %}

```
3.141592653589793  # 원주율 (파이, π)
2.718281828459045  # 자연상수 (e)
```

{% endcode %}

***

### 검색 키워드

수학, 상수, 원주율, 파이, 자연상수, π, e


# \[수학] 기초 통계 - 합계 / 평균 / 최댓값 / 최솟값

### 코드

{% code title="리스트의 합계를 구할 때" %}

```
@수학 (리스트)의 합계/총합
```

{% endcode %}

{% code title="리스트의 평균 구할 때" %}

```
@수학 (리스트)의 평균
```

{% endcode %}

{% code title="리스트에서 최댓값을 구할 때" %}

```
@수학 (리스트)중/에서 최댓값/최대값
```

{% endcode %}

{% code title="리스트에서 최솟값을 구할 때" %}

```
@수학 (리스트)중/에서 최솟값/최소값
```

{% endcode %}

***

### 설명

리스트에서 합계 / 평균 / 최댓값 / 최솟값을 구해 반환합니다.

***

### 주의사항

* 수학 코드를 쓸 때는 앞에 `@수학`을 써야 해요.

***

### 파이썬 대응 코드

```
sum(list)
sum(list) / len(list)
max(list)
min(list)
```

***

### 예시

{% code title="예시 코드" %}

```
# 합계
@수학 [1, 2, 3, 4, 5]의 합계 보여주기
@수학 [2, 4, 6, 8, 10]의 총합 보여주기

# 평균
@수학 [2, 4, 6, 8, 10]의 평균 보여주기

# 최댓값/최솟값
@수학 [1, 5, 3, 9, 2]중 최댓값 보여주기
@수학 [1, 5, 3, 9, 2]에서 최솟값 보여주기
```

{% endcode %}

{% code title="예시 코드의 결과" %}

```
15  # [1, 2, 3, 4, 5]의 합계
30  # [2, 4, 6, 8, 10]의 총합
6   # [2, 4, 6, 8, 10]의 평균
9   # [1, 5, 3, 9, 2]중 최댓값
1   # [1, 5, 3, 9, 2]에서 최솟값
```

{% endcode %}

***

### 검색 키워드

수학, 통계, 합계, 총합, 평균, 최댓값, 최솟값, 최대값, 최소값


# \[수학] 두 수 비교하기

### 코드

{% code title="두 수 중 더 큰 값을 구할 때" %}

```
@수학 (값1)와/과 (값2)중/에서 더 큰 값/수
```

{% endcode %}

{% code title="두 수 중 더 작은 값을 구할 때" %}

```
@수학 (값1)와/과 (값2)중/에서 더 작은 값/수
```

{% endcode %}

***

### 설명

두 수 중 더 큰/작은 값을 반환합니다.

***

### 주의사항

* 수학 코드를 쓸 때는 앞에 `@수학`을 써야 해요.

***

### 파이썬 대응 코드

```
max(a, b)
min(a, b)
```

***

### 예시

{% code title="예시 코드" %}

```
@수학 3과 7중 더 큰 값 보여주기
@수학 5와 7에서 더 작은 수 보여주기
```

{% endcode %}

{% code title="예시 코드의 결과" %}

```
7
5
```

{% endcode %}

***

### 검색 키워드

수학, 통계, 두 수 비교하기


# \[수학] 무작위 값, 나머지 연산

### 코드

{% code title="0\~1 사이의 무작위 값을 구할 때" %}

```
@수학 랜덤/무작위 값/수
```

{% endcode %}

{% code title="정수 중 무작위 값을 구할 때" %}

```
@수학 (값1)부터/이상 (값2)까지/이하/미만 랜덤/무작위 정수 
```

{% endcode %}

{% code title="나머지 값을 구할 때" %}

```
@수학 (값1)을 (값2)로 나눈 나머지
```

{% endcode %}

***

### 설명

무작위 값과 나머지 연산을 한 결과를 반환합니다.

`@수학 무작위 값`은 0\~1 사이의 값을 반환해요.

***

### 주의사항

* 수학 코드를 쓸 때는 앞에 `@수학`을 써야 해요.
* 난수는 실행할 때마다 값이 달라져요.
* 나머지는 정수 나눗셈 기준이에요.

***

### 파이썬 대응 코드

```
import random, math
random.random()            # 0~1
random.randint(a, b)       # a~b 정수
a % b
```

***

### 예시

{% code title="예시 코드" %}

```
# 무작위 값
@수학 랜덤 값 보여주기

# 무작위정수
@수학 1부터 10까지 랜덤 정수 보여주기

# 나머지
@수학 17을 5로 나눈 나머지 보여주기
```

{% endcode %}

{% code title="예시 코드의 결과" %}

```
0.1649935765702365
6
2
```

{% endcode %}

***

### 검색 키워드

수학, 통계, 랜덤, 난수, 무작위수, 나머지


# \[수학] 각도-라디안 변환

### 코드

{% code title="각도를 라디안으로 바꿀 때" %}

```
@수학 (각도) 라디안으로/라디안
```

{% endcode %}

{% code title="라디안을 각도로 바꿀 때" %}

```
@수학 (라디안) 도로/각도로
```

{% endcode %}

***

### 설명

각도와  라디안 사이의 변환을 제공합니다.

* 라디안 = 각도 $$\times \frac{\pi}{180}$$
* 각도= 라디안 $$\times \frac{180}{\pi}$$

***

### 주의사항

* 수학 코드를 쓸 때는 앞에 `@수학`을 써야 해요.

***

### 파이썬 대응 코드

```
math.radians(deg)
math.degrees(rad)
```

***

### 예시

{% code title="예시 코드" %}

```
# 각도를 라디안으로 변환
@수학 180 라디안으로 보여주기

# 라디안을 각도로 변환
@수학 (@수학 파이) 각도로 보여주기
@수학 3.14 각도로 보여주기
```

{% endcode %}

{% code title="예시 코드의 결과" %}

```
3.141592653589793
180
179.90874767107852
```

{% endcode %}

***

### 검색 키워드

수학, 통계, 각도, 라디안, 변환, 도


