03-2 여러 값을 묶는 두 가지 방법
1 / 1
3회 · 둘째 차시第 3 次课 · 第 2 课时

여러 값을 묶는 두 가지 방법组合多个值的两种方法

값이 여러 개일 때 순서로 묶는 방법과 이름으로 묶는 방법을 봅니다.当值有多个时,看按顺序组合与按名称组合两种方法。
이전 차시 · 3-1. 실습 환경 준비와 비교 결과로 판단하기
다음 차시 · 4-1. Matplotlib으로 그래프 이해하기
上一课时 · 3-1. 准备实践环境并用比较结果进行判断
下一课时 · 4-1. 用 Matplotlib 理解图表
1. 왜 묶는가1. 为什么要组合03-2

이름을 하나씩 붙이다 보면 막힌다一个个起名字,很快就行不通了

2-2
korean_score = 82
english_score = 91
math_score = 76
생각해 보기想一想

우리 반 여덟 명의 점수를 이렇게 적으면 몇 줄이 될까요? 학년 전체면?把班上八个人的分数这样写要几行?整个年级呢?

2-2에서 값 하나에 이름 하나를 붙였습니다. 값이 여덟 개, 백 개가 되면 이름을 그만큼 지어야 하고, 다 지어도 “세 번째 사람의 점수”를 꺼내려면 그 이름을 기억하고 있어야 합니다.2-2 中我们给一个值起了一个名字。值变成八个、一百个时就要起同样多的名字,而且即使都起好了,要取“第三个人的分数”还得记住那个名字。

책상 위에 이름표 쪽지가 수십 장 붙어 있고, 한 학생이 아직 붙이지 못한 쪽지를 든 채 곤란한 표정으로 보고 있다.
그림 3-2-1. 값이 늘어날 때마다 이름을 하나씩 붙이면 곧 감당이 안 된다.图 3-2-1. 每多一个值就起一个名字,很快就管不过来了。

그래서 값이 여러 개일 때는 하나로 묶어 두고 필요할 때 꺼내는 방법을 씁니다. 오늘은 그 방법 두 가지를 봅니다.因此值有多个时会先组合起来,需要时再取出。今天看这两种方法。

2. list2. list03-2

list는 순서로 묶는다list 按顺序组合 실습实践

여러 값을 순서대로 묶은 것을 list라고 합니다. 대괄호 [] 안에 값을 쉼표로 나열합니다.把多个值按顺序组合起来叫 list。在方括号 [] 内用逗号列出值。

03-2_structures.ipynb
scores = [72, 85, 90, 68]

print(scores)
실행 결과运行结果
[72, 85, 90, 68]

scores라는 이름 하나에 값 네 개가 들어 있습니다.一个名为 scores 的名称里装了四个值。

개발에서는 이렇게 순서대로 늘어선 값의 묶음을 배열(array)이라고 부르기도 합니다. Python에서는 list라고 부릅니다. AI가 둘 중 어느 이름으로 말해도 같은 것을 가리키는 경우가 많습니다.在开发中,这样按顺序排列的一组值也叫数组(array)。Python 中称为 list。AI 不管用这两个名称中的哪一个,通常指的都是同一个东西。

3. list · 그림3. list · 图03-2

값이 늘어서고 자리마다 번호가 붙는다值排成一行,每个位置都有编号

한 줄로 늘어선 네 칸에 72, 85, 90, 68이 들어 있고 아래에 0, 1, 2, 3 번호가 붙어 있다. 첫 칸이 강조되어 있다.
그림 3-2-2. 값이 순서대로 늘어서고, 그 자리마다 번호가 붙는다.图 3-2-2. 值按顺序排列,每个位置都有编号。
4. 하나씩 꺼내기4. 逐个取出03-2

번호로 하나씩 꺼내 본다用编号逐个取出来看 실습实践

03-2_structures.ipynb
print(scores[0])
print(scores[1])
print(scores[2])
print(scores[3])
실행 결과运行结果
72
85
90
68
5. 0부터인 이유5. 为什么从 0 开始03-2

번호는 0부터 시작한다编号从 0 开始 핵심核心

생각해 보기想一想

scores[0]이 72였습니다. 그럼 0은 무슨 뜻일까요?scores[0] 是 72。那么 0 是什么意思?

scores[0]의 0은 “첫 번째”라는 번호가 아닙니다. “맨 앞에서 0칸 떨어진 곳”이라는 뜻입니다.scores[0] 中的 0 不是“第一个”这个序号,而是“距最前 0 格的位置”的意思。

자를 대고 길이를 잴 때를 떠올려 보세요. 자의 시작점은 1cm가 아니라 0cm입니다. 시작점에서 아무 데도 안 갔으면 0입니다.想想用尺子量长度时,尺子的起点不是 1cm 而是 0cm。从起点没有移动就是 0。

0에서 시작하는 자 위에 블록 네 개가 놓여 있고, 각 블록이 시작점에서 몇 칸 떨어졌는지를 화살표로 나타낸 그림. 첫 블록은 시작점에 붙어 있어 화살표 길이가 0이다.
그림 3-2-3. 자의 시작점은 1cm가 아니라 0cm다. 번호가 아니라 시작점에서 몇 칸 떨어졌는지를 세는 것이다.图 3-2-3. 尺子的起点不是 1cm 而是 0cm。数的不是编号,而是离起点有几格。
6. 거리로 읽기6. 按距离来读03-2

거리로 읽으면 마지막 번호가 풀린다按距离读,最后一个编号就清楚了 핵심核心

번호编号뜻含义값值
0맨 앞에서 0칸距最前 0 格72
1맨 앞에서 1칸距最前 1 格85
2맨 앞에서 2칸距最前 2 格90
3맨 앞에서 3칸距最前 3 格68

번호가 아니라 거리로 읽으면 그다음이 저절로 풀립니다. 값이 4개이면 마지막 번호는 3입니다. 개수보다 하나 작습니다.按距离而不是编号来读,后面的就自然清楚了。值有 4 个时最后的编号是 3,比个数小一。

7. 없는 자리7. 不存在的位置03-2

범위를 넘으면 멈춘다超出范围就会停止 실습实践

이 셀은 오류가 나는 것이 정상입니다. 긴 글을 다 읽지 말고 마지막 줄만 보세요.这个单元格出错是正常的。不用把长长的报错全读完,只看最后一行。

부르기 전에 몇 개가 들어 있는지 먼저 세어 봅니다. len은 length, 곧 길이입니다.取值之前,先数一下里面有几个。len 是 length,也就是长度。

03-2_structures.ipynb
print(len(scores))
실행 결과运行结果
4

값이 4개이므로 자리 번호는 0 · 1 · 2 · 3이고 4번 자리는 없습니다. 아래에서 일부러 그 없는 자리를 불러 봅니다.值有 4 个,所以位置编号是 0 · 1 · 2 · 3,没有 4 号位置。下面故意去取这个不存在的位置。

03-2_structures.ipynb
print(scores[4])
마지막 줄最后一行
IndexError: list index out of range

IndexError와 out of range가 보입니다. index는 자리 번호, range는 범위라는 뜻입니다. 그러니까 「자리 번호가 범위를 벗어났다」는 말입니다. 값이 네 개인데 4번을 불렀으니 없는 자리입니다.可以看到 IndexError 和 out of range。index 是位置编号,range 是范围,合起来就是「位置编号超出了范围」。只有四个值,却去取 4 号位置,那是不存在的位置。

없는 자리를 부르면 프로그램이 멈춥니다. 코드를 고치지 않아도 됩니다. 이 사실만 확인하고 넘어갑니다.去取不存在的位置,程序就会停止。不用修改代码,确认这一点即可。

8. 없는 자리 · 화면8. 不存在的位置 · 画面03-2

오류 문장에서 볼 것은 두 부분뿐이다报错里只需要看两个部分

Notebook에서 scores[4]를 실행해 오류가 난 화면. 마지막 줄의 IndexError와 out of range 부분이 표시되어 있다.
그림 3-2-4. 긴 오류 문장에서 볼 것은 마지막 줄 두 부분뿐이다.图 3-2-4. 长长的报错里,只需要看最后一行的两个部分。
9. 같은 문제9. 同一类问题03-2

하나 차이로 갈리는 자리一步之差就不同的地方

지난 시간에 60점 이상에서 정확히 60점인 사람이 통과인지 아닌지가 갈렸습니다. 오늘은 값이 4개일 때 마지막 번호가 3인지 4인지가 갈립니다.上次课上,在「60 分以上」这个条件里,正好 60 分的人算不算通过,成了分界。今天则是值有 4 个时,最后编号是 3 还是 4,成了分界。

언제何时갈리는 지점分界点맞는 답正确答案
3-160점은 >=에서 통과, >에서 탈락60 分在 >= 通过,在 > 不通过기준에 따라 다르다取决于标准
3-2값 4개의 마지막 번호는 3인가 4인가4 个值的最后编号是 3 还是 43

둘 다 하나 차이로 결과가 달라지는 문제입니다. 프로그램에서 틀리기 가장 쉬운 곳이 이런 경계입니다.两者都是一步之差就改变结果的问题。程序中最容易出错的正是这种边界。

10. dict10. dict03-2

dict는 이름으로 찾는다dict 用名称查找 실습实践

dict는 dictionary, 곧 사전을 줄인 말입니다. 사전에서 낱말을 찾을 때 「몇 번째 쪽」이 아니라 낱말 자체로 찾지요. dict도 같습니다.dict 是 dictionary(词典)的缩写。查词典时不是按「第几页」,而是用词本身来找。dict 也一样。

dict는 이름과 값을 짝지어 묶습니다. 중괄호 {}를 쓰고, 이름과 값 사이에 콜론 :을 넣습니다.dict 把名称与值配对组合。使用大括号 {},名称与值之间加冒号 :。

03-2_structures.ipynb
student = {
    "name": "민준",
    "score": 85,
    "passed": True,
}

print(student)
print(student["name"])
print(student["score"])
실행 결과运行结果
{'name': '민준', 'score': 85, 'passed': True}
민준
85
11. dict · 그림11. dict · 图03-2

번호를 세지 않고 이름으로 연다不数编号,用名字打开

서랍 세 칸에 name·score·passed 이름표가 붙어 있고, 손이 세지 않고 곧장 score 서랍을 연다.
그림 3-2-5. 번호를 세지 않는다. 이름표를 보고 바로 연다.图 3-2-5. 不用数编号,看标签就能直接打开。
12. dict 뜯어보기12. 拆解 dict03-2

dict 한 줄씩 뜯어본다逐行拆开看 dict 핵심核心

부분部分무엇인가是什么
"name", "score", "passed"이름표标签
"민준", 85, True그 이름표에 붙은 값贴在标签上的值

값을 꺼낼 때는 번호가 아니라 이름표를 적습니다. 2-2에서 숫자 하나에 korean_score 같은 이름표를 붙였는데, 그때는 값 하나에 이름 하나였고 이번에는 이름표가 붙은 값들을 한 묶음으로 모읍니다.取值时写的是标签而不是编号。2-2 中给一个数字贴上了 korean_score 这样的标签,那时是一个值一个名字,这次是把带标签的值收成一组。

13. 두 가지 비교13. 两者比较03-2

찾는 방법이 다르다查找方法不同

자료구조数据结构값을 찾는 기준查找值的依据잘 맞는 예合适的例子
list순서와 위치顺序与位置여러 날의 점수, 메뉴 목록多天的分数、菜单列表
dict이름과 의미名称与含义한 사람의 이름·점수·통과 여부一个人的姓名·分数·是否通过

둘 다 여러 값을 묶습니다. 다른 것은 찾는 방법입니다. 줄을 서 있으면 몇 번째인지 알아야 하고, 이름표가 붙어 있으면 이름을 알아야 합니다.两者都组合多个值,不同的是查找方法。排成一列就要知道是第几个,贴了标签就要知道名称。

같은 종류가 여러 개 늘어서는가?   →  list
한 대상의 서로 다른 항목인가?     →  dict
同一类的东西排成好几个吗?   →  list
是一个对象的不同项目吗?       →  dict

어느 쪽이 맞는지는 담을 정보가 정합니다. 문법이 정하는 것이 아닙니다.哪一种合适由要装的信息决定,不是由语法决定。

14. 두 가지 비교 · 그림14. 两者比较 · 图03-2

세어서 찾기와 바로 찾기数着找与直接找

왼쪽은 0·1·2·3 번호가 붙은 사물함 네 칸을 손가락으로 세어 가며 찾는 모습, 오른쪽은 name·score·passed 이름표가 붙은 서랍에서 곧장 score를 여는 모습.
그림 3-2-6. 왼쪽은 세어서 찾고, 오른쪽은 이름을 보고 바로 찾는다.图 3-2-6. 左边靠数着找,右边看名字直接找。
15. 워크시트 ①15. 练习纸 ①03-2

정보를 어디에 담을지 고른다选择把信息装在哪里 실습实践

WORKSHOP ①어디에 담을까装在哪里

여덟 항목을 읽고 두 칸을 채웁니다. 코드를 실행하지 않고 직접 생각해서 적습니다.阅读八个项目并填写两栏。不运行代码,自己想出来再写。

#담아야 할 정보要装的信息list / dict왜 그렇게 골랐는가为什么这样选
1이번 주 급식 메뉴 5개本周 5 个午餐菜单
2친구 한 명의 이름·반·연락 방법一位朋友的姓名·班级·联系方式
3동아리 부원 이름 전체社团全体成员姓名
4내 사물함 번호·층·비밀번호 여부我的储物柜号·楼层·是否设密码
5이번 달 매일의 기상 시각本月每天的起床时间
6도서관 책 한 권의 제목·저자·대출 가능 여부图书馆一本书的书名·作者·可否借出
7우리 반이 좋아하는 과목 순위本班喜欢的科目排名
8오늘 시간표의 1교시부터 7교시까지今天课表的第 1 节到第 7 节
스스로 확인自我确认
  • 여덟 칸을 모두 채웠다.八个项目都填完了。
  • 순서가 뜻을 가지는 항목을 찾아 표시했다.找出并标记了顺序本身有意义的项目。
  • 4번에서 비밀번호 자체는 담지 않는다는 것을 확인했다.在第 4 项确认了不装密码本身。
16. 워크시트 ②16. 练习纸 ②03-2

나를 이름표 묶음으로 적는다把自己写成一组标签 실습实践

WORKSHOP ②내 정보를 dict로把我的信息写成 dict

왼쪽에 이름표를, 오른쪽에 값을 적습니다. 코드를 쓰는 활동이 아닙니다.左边写标签,右边写值。这不是写代码的活动。

이름표 (영어 소문자)标签(英文小写)값值왜 이 항목이 필요한가为什么需要这一项
name
스스로 확인自我确认
  • 이름표를 값의 뜻이 드러나게 적었다. (a가 아니라 grade처럼)标签写得能看出值的含义(不是 a 而是 grade)。
  • 다른 사람에게 보여도 괜찮은 항목만 적었다. 비밀번호·연락처·주소는 적지 않았다.只写了给别人看也没关系的项目,没写密码·联系方式·住址。
  • 항목을 다섯 개 이하로 줄였다. 무엇을 뺄지 골랐다.把项目减到五个以内,选择了要去掉什么。
17. 대조17. 对照03-2

적은 것을 코드와 맞춰 본다把写的内容和代码对照 실습实践

03-2_structures.ipynb
me = {
    "name": "민준",
    "grade": 1,
    "club": "밴드",
    "favorite_subject": "음악",
}

print(me["club"])
print(me["favorite_subject"])

내가 적은 이름표가 따옴표 안에 들어가고, 값이 콜론 뒤에 온다는 대응만 확인합니다. 코드는 고치지 않습니다.只需确认我写的标签放在引号内、值放在冒号后这一对应关系。不修改代码。

18. 여러 명18. 多个人03-2

묶음이 여러 개면 표가 된다多个组合就成了表格

한 명이 이름표 묶음 하나입니다. 그럼 우리 반 여덟 명은 어떻게 담을까요? 같은 종류가 여러 개 늘어서면 순서로 묶습니다.一个人就是一组标签。那班上八个人怎么装?同一种东西排成一列、有很多个时,就按顺序组合。

03-2_structures.ipynb
students = [
    {"name": "민준", "club": "밴드"},
    {"name": "서연", "club": "미술"},
]

print(students[0])
print(students[1]["club"])
실행 결과运行结果
{'name': '민준', 'club': '밴드'}
미술

문법을 외우지 않습니다. 이 모양이 곧 표 한 장이라는 것만 봅니다.不用背语法。只要看出这个形状就是一张表格,就可以了。

nameclub
민준밴드
서연미술

이름표가 표의 열 이름이 되고, 묶음 하나가 표의 한 행이 됩니다. 다음 주에 표를 다루는 도구를 쓰는데, 그 표가 오늘 만든 이 모양입니다.标签成为表格的列名,一组就是表格的一行。下周会用到处理表格的工具,那里的表格就是今天做出的这个形状。

19. 여러 명 · 그림19. 多个人 · 图03-2

묶음 여러 개가 표 한 장이 된다组多起来就成了一张表格

name·club 탭을 단 카드 묶음 세 뭉치가 화살표를 지나 표 한 장이 된다. 두 이름표가 표의 머리줄이 되고 뭉치 셋이 세 줄이 된다.
그림 3-2-7. 같은 이름표를 가진 묶음이 여러 개 모이면 표 한 장이 된다.图 3-2-7. 带有相同标签的组聚在一起,就成了一张表格。
20. 정리20. 小结03-2

오늘 남길 것今天要记住的

이번 차시에서 남길 것本课时要记住的
  • 값이 여러 개일 때는 하나로 묶어 두고 필요할 때 꺼낸다.值有多个时先组合起来,需要时再取出。
  • list는 순서로, dict는 이름으로 값을 찾는다.list 按顺序查找,dict 按名称查找。
  • 번호 0은 “첫 번째”가 아니라 “맨 앞에서 0칸”이다.编号 0 不是“第一个”,而是“距最前 0 格”。
  • 값이 n개면 마지막 번호는 n-1이다. 범위를 넘으면 오류가 난다.值有 n 个时最后编号是 n-1,超出范围会出错。
  • 담을 정보의 모양이 구조를 정한다.要装的信息的形状决定结构。
  • dict를 여러 개 모으면 표 한 장이 된다.多个 dict 聚在一起就是一张表格。
확인하기确认一下
  1. scores[0]의 0은 무슨 뜻인가?scores[0] 中的 0 是什么意思?
  2. 값이 여섯 개인 list의 마지막 번호는 몇인가?有六个值的 list,最后编号是几?
  3. “우리 반 시간표 1교시부터 7교시”는 list와 dict 중 어디에 담는 것이 알맞은가? 왜인가?“本班课表的第 1 到第 7 节”应装在 list 还是 dict?为什么?
21. 다음으로21. 下一步03-2

다음 차시로走向下一课时

오늘 채운 워크시트는 JDH_VibeCoding_자기이름 안 03 폴더에 남깁니다. 6주차에 “내 서비스는 무엇을 기억해야 하는가”를 정할 때 다시 씁니다.今天填写的练习纸留在 JDH_VibeCoding_自己的名字 文件夹里的 03 文件夹中。第 6 周决定“我的服务要记住什么”时会再用。

다음 차시下一课时

다음에는 오늘 묶은 값들을 그림으로 바꾸는 도구를 가져와 씁니다. 그 도구가 없으면 어떻게 되는지도 함께 봅니다.下次会用把今天组合起来的这些值变成图表的工具,也会一起看看没有这个工具时会怎样。