11. 표준 라이브러리 2 (더 많은 도구)
수학, 통계, 텍스트, 목록, 인코딩, 해시 도구를 더 알아봐요.
10장에서 도구를 가져오는 법을 익혔다면, 이번에는 파이썬 표준 라이브러리에서 자주 쓰이는 도구들을 하자 말로 옮긴 것들을 살펴봐요. 모두 파일이나 네트워크를 쓰지 않는 순수한 도구라서 브라우저 플레이그라운드에서도 똑같이 동작해요.
| 모듈 | 하는 일 | 도구 |
|---|---|---|
[수학] |
계산 더하기 | <제곱근> <거듭제곱> <절댓값> <반올림> <사인> <코사인> <탄젠트> <로그> <파이> <최대공약수> <팩토리얼> |
[통계] |
숫자 목록 요약 | <합계> <최솟값> <최댓값> <평균> <중앙값> <표준편차> |
[텍스트] |
글자 다루기 | <대문자> <소문자> <다듬기> <왼쪽채우기> <오른쪽채우기> <반복> <거꾸로> <시작하는지> <끝나는지> <잇기> <세기> <위치> |
[목록] |
목록 다루기 | <정렬> <뒤집기> <중복제거> <범위> <평탄화> <조각내기> <짝짓기> <변환하기> <걸러내기> <접기> <찾기> <하나라도> <모두> <기준정렬> |
[인코딩] |
글자 바꿔 담기 | <베이스64인코딩> <베이스64디코딩> <주소인코딩> <주소디코딩> |
[해시] |
글자의 지문 | <SHA256> |
[CSV] |
표 글자 읽고 쓰기 | <파싱> <문자열화> |
[무작위] |
(10장에 더해) 고유번호 | <고유번호> |
수학
<제곱근>, <거듭제곱>(밑, 지수), <절댓값>은 이름 그대로예요. <반올림>(수, 자릿수)은 0.5는 올리는 방식(2.5는 3, -2.5는 -3)이고 자릿수는 생략할 수 있어요. <로그>(수)는 자연로그, <로그>(수, 밑)은 밑을 정한 로그예요. 삼각함수는 라디안을 써요. <최대공약수>와 <팩토리얼>(0부터 170까지)은 정수만 받아요. 계산할 수 없는 값(음수의 제곱근, 0의 로그, 너무 커서 넘치는 결과)은 에러가 나요. 삼각함수와 로그 같은 계산은 엔진마다 마지막 자리가 다를 수 있어요.
[수학]에서 <제곱근>을 가져오자
[수학]에서 <거듭제곱>을 가져오자
[수학]에서 <반올림>을 가져오자
[수학]에서 <최대공약수>를 가져오자
[수학]에서 <팩토리얼>을 가져오자
<제곱근>(2)를 출력하자
<거듭제곱>(2, 10)을 출력하자
<반올림>(1234.5678, 2)를 출력하자
<최대공약수>(12, 18)을 출력하자
<팩토리얼>(10)을 출력하자
통계
숫자만 든 목록을 받아요. <표준편차>는 파이썬의 statistics.stdev처럼 표본 표준편차(n-1로 나눔)라서 값이 두 개 이상 있어야 해요. 값이 부족한 목록(빈 목록의 평균 등)은 에러가 나요.
[통계]에서 <평균>을 가져오자
[통계]에서 <중앙값>을 가져오자
[통계]에서 <최댓값>을 가져오자
[통계]에서 <표준편차>를 가져오자
'점수'를 [70, 85, 92, 60, 88]로 정하자
틀"평균 {<평균>('점수')}, 중앙값 {<중앙값>('점수')}, 최고 {<최댓값>('점수')}"를 출력하자
<표준편차>('점수')를 출력하자
텍스트
글자 수와 위치는 모두 글자 단위(한글 한 글자가 하나)로 세요. <다듬기>는 앞뒤의 공백과 줄바꿈, 전각 공백까지 지워요. <왼쪽채우기>(글, 너비, 채울글자)는 글이 너비보다 짧을 때만 채우고 자르지는 않아요. <위치>는 처음 나온 곳을 1부터 세어 알려주고 없으면 비어있음이에요. 대소문자 바꾸기는 영어 같은 일반 글자 기준이에요.
[텍스트]에서 <대문자>를 가져오자
[텍스트]에서 <다듬기>를 가져오자
[텍스트]에서 <왼쪽채우기>를 가져오자
[텍스트]에서 <잇기>를 가져오자
[텍스트]에서 <위치>를 가져오자
[텍스트]에서 <세기>를 가져오자
<대문자>("hello 하자")를 출력하자
틀"[{<다듬기>(" 여백 ")}]"를 출력하자
<왼쪽채우기>("7", 3, "0")을 출력하자
<잇기>(["사과", "배", "귤"], ", ")를 출력하자
<위치>("가나다라", "다")를 출력하자
<세기>("banana", "an")을 출력하자
목록
<정렬>은 숫자끼리 또는 문자열끼리만 정렬하고, 정렬한 새 목록을 돌려줘요(원래 목록은 그대로예요). <범위>(시작, 끝)은 끝까지 포함해서 정수 목록을 만들고, 시작이 끝보다 크면 알아서 거꾸로 세요. 세 번째 값은 간격이에요. <중복제거>는 처음 나온 것만 남기고, <평탄화>는 목록 안의 목록을 한 단계 펼쳐요.
[목록]에서 <정렬>을 가져오자
[목록]에서 <범위>를 가져오자
[목록]에서 <중복제거>를 가져오자
[목록]에서 <조각내기>를 가져오자
[목록]에서 <짝짓기>를 가져오자
<정렬>([3, 1, 2])를 출력하자
<범위>(1, 5)를 출력하자
<범위>(10, 0, (0 - 5))를 출력하자
<중복제거>([1, 2, 1, 3, 2])를 출력하자
<조각내기>([1, 2, 3, 4, 5], 2)를 출력하자
<짝짓기>(["가", "나"], [1, 2])를 출력하자
함수를 받는 목록 도구
목록의 항목마다 내가 만든 함수를 적용하는 도구들이에요. 하자에는 이름 없는 함수가 없어서, 이름을 붙여 만든 함수를 <이름>으로 넘겨요(함수는 항목 하나를 받는 모양이에요).
| 도구 | 하는 일 |
|---|---|
<변환하기>(목록, <함수>) |
항목마다 함수를 적용한 결과의 새 목록이에요 |
<걸러내기>(목록, <함수>) |
함수가 참을 돌려준 항목만 남긴 새 목록이에요 |
<접기>(목록, <함수>, 처음값) |
함수(지금까지의 값, 항목)를 차례로 적용해 값 하나로 줄여요 |
<찾기>(목록, <함수>) |
함수가 참을 돌려준 첫 항목이에요 (없으면 비어있음) |
<하나라도>(목록, <함수>) |
하나라도 참이면 참이에요 (빈 목록은 거짓) |
<모두>(목록, <함수>) |
모두 참이면 참이에요 (빈 목록은 참) |
<기준정렬>(목록, <함수>) |
함수가 준 값(숫자끼리 또는 문자열끼리)이 작은 순서로 정렬한 새 목록이에요 (같으면 원래 순서를 지켜요) |
<걸러내기>, <찾기>, <하나라도>, <모두>에 넘기는 함수는 참이나 거짓을 돌려줘야 해요. 다른 값을 돌려주면 에러가 나요.
[목록]에서 <변환하기>와 <걸러내기>와 <접기>를 가져오자
[목록]에서 <찾기>와 <기준정렬>을 가져오자
<두배>를 만들자 ('x'):
('x' * 2)를 돌려주자
<짝수>를 만들자 ('x'):
만약 ('x' % 2 == 0) 라면:
참을 돌려주자
거짓을 돌려주자
<더하기>를 만들자 ('합', 'x'):
('합' + 'x')를 돌려주자
<글자수>를 만들자 ('글'):
'글'의 '길이'를 돌려주자
<변환하기>([1, 2, 3], <두배>)를 출력하자
<걸러내기>([1, 2, 3, 4], <짝수>)를 출력하자
<접기>([1, 2, 3, 4], <더하기>, 0)를 출력하자
<찾기>([1, 3, 4, 6], <짝수>)를 출력하자
<기준정렬>(["하늘하늘", "나무", "산"], <글자수>)를 출력하자
인코딩과 해시
글자는 UTF-8로 다뤄요. <베이스64인코딩>과 <베이스64디코딩>은 base64로, <주소인코딩>과 <주소디코딩>은 주소창에 넣을 수 있게 %EA%B0%80처럼 바꿔요(글자, 숫자, - _ . ~ 말고는 전부 바꿔요). 형식이 틀린 글을 읽으면 에러가 나요. <SHA256>은 글자의 SHA-256 값을 16진수 64자로 돌려줘요.
[인코딩]에서 <베이스64인코딩>을 가져오자
[인코딩]에서 <베이스64디코딩>을 가져오자
[인코딩]에서 <주소인코딩>을 가져오자
[해시]에서 <SHA256>을 가져오자
[무작위]에서 <고유번호>를 가져오자
<베이스64인코딩>("한글")을 출력하자
<베이스64디코딩>("7ZWc6riA")를 출력하자
<주소인코딩>("가 나")를 출력하자
<SHA256>("abc")를 출력하자
<고유번호>()를 출력하자
<고유번호>()는 실행할 때마다 다른 무작위 UUID(3b241101-e2bb-4255-8caf-4136c566a962 같은 글)를 만들어요.
CSV
[CSV]는 쉼표로 나눈 표 글자(CSV)를 읽고 써요. <파싱>(글)은 글을 행들의 목록으로 바꿔요. 행은 칸 글자들의 목록이에요. 칸은 언제나 글자라서 숫자가 필요하면 <숫자로>로 바꿔 쓰세요. 칸 안에 쉼표나 줄바꿈이 있으면 "로 감싸고, 따옴표 자체는 ""로 써요. 두 번째 값으로 구분자를 글자 하나로 줄 수 있어요(";", "\t").
[CSV]에서 <파싱>을 가져오자
'표'를 [목록]인 <파싱>("이름,점수\n하나,90\n둘,85")로 정하자
'표'를 출력하자
'둘째줄'을 [목록]인 '표'의 2번째로 정하자
'점수'를 [숫자]인 <숫자로>('둘째줄'의 2번째)로 정하자
('점수' + 10)을 출력하자
<문자열화>(행들)는 반대로 행들의 목록을 글로 만들어요. 따옴표는 필요한 칸에만 붙이고, 칸에는 글자, 숫자, 비어있음(빈 칸)만 쓸 수 있어요. 행 사이는 줄바꿈이고 마지막 줄 뒤에는 붙지 않아요.
[CSV]에서 <문자열화>를 가져오자
'행들'을 [목록]인 [["이름", "메모"], ["하나", "쉼표, 그리고 \"따옴표\""], ["둘", 비어있음]]로 정하자
<문자열화>('행들')를 출력하자
<문자열화>([["가", "나"]], ";")를 출력하자
[JSON]에도 <파싱>과 <문자열화>가 있어서 둘을 함께 쓸 때는 [CSV]에서 <파싱>을 <표읽기>로 가져오자처럼 별칭을 붙이세요. 닫히지 않은 따옴표처럼 형식이 틀린 글은 에러가 나요.
[CSV]에서 <파싱>을 가져오자
<파싱>("\"열기만 하고 닫지 않았어요")를 출력하자