"미운코딩새끼"의 두 판 사이의 차이

잔글 (봇: 자동으로 텍스트 교체 (-source +syntaxhighlight))
 
(사용자 48명의 중간 판 660개는 보이지 않습니다)
1번째 줄: 1번째 줄:
==김왼손과 집단지성들==
{{보호-훼손}}
* '''김왼손과 집단지성들'''은 잉끼유튜버 [[김왼손]]과 그 열혈 구독자들이 함께하는 코딩계의 아이돌 그룹입니다.  
==미운코딩새끼==
* 정규 1집 '''미운코딩새끼'''는 남녀노소 상관없이 누구나 기여할 수 있습니다. 여러분도 지금 참여해보세요.  
{{youtube|c2mpe9Xcp0I}}
 
대학 새내기 시절 코딩이 너무 어려웠습니다. 잘해보려 아등바등 노력해 봤지만 매번 실패하다가 결국 미워하게 돼버렸습니다. 지금 돌아보면 그렇게 미워할 정도는 아니었는데 말이죠. 지금도 같은 고민을 하는 분들이 많을 거라고 생각합니다. 그 때 그 시절 이런 강의가 있었으면 어땠을까 하는 마음으로 미운코딩새끼를 만들었습니다.


* 앨범 제작 방식은 아래와 같습니다.
미운코딩새끼는 코딩이 너무 어려워 포기한 분, 또는 코딩을 처음 접하는 분을 위한 강의입니다. 파이썬이라는 프로그래밍 언어의 기초 문법을 쉽게 배울 수 있습니다. 코딩을 왜 배워야 하는지, 왜 필요한지에 대해서 답을 주지는 않지만 코딩이란 이런 거구나, 파이썬이란 이런 거구나 하는 정도의 감을 잡을 수 있습니다.
** [[김왼손]]은 강의한다.
** 집단지성들은 본다.
** 모두 함께 정리한다.


인스타그램 김왼손([https://www.instagram.com/lefty_khim/ @lefty_khim])을 팔로우하세요!


<youtube>https://youtu.be/2V39BtC1wdo</youtube>
이 문서는 코딩계의 아이돌 그룹 [[김왼손]]과 집단지성들이 함께 정리했습니다. 미운코딩새끼는 남녀노소 상관없이 누구나 기여할 수 있습니다. 여러분도 지금 참여해보세요!!!


* 아래는 현재까지 '''미운코딩새끼'''에 기여해 주신 분들입니다. 고맙습니다.
* [[김왼손]]의 왼손코딩: https://goo.gl/xHi84G
** 켈리(Kelly)(rnrmf3apdlf@gmail.com): List, Tuple 등 요약
* 미운코딩새끼 모아보기: https://goo.gl/r6bYSk
** MANGO 망고(mingyu041209@naver.com)
* 위키독스 완성본 : https://wikidocs.net/book/1421
** 이프리트(adbdcd123@naver.com)
** 요거트(changeunp04@gmail.com)
** 묘인봉
** pro memoria
** H2SO4
** 이에스(hubolab10@gmail.com): 전체적인 컨셉, 디자인 정리
** JW호박 pumkin(pjwbrain@naver.com): 아래쪽에 Tuple부터 요약
** Meta27-익명의 거북(leeyoungmin2788@gmail.com)
** 김레이(leykim0907@naver.com)
** 토미유튜브 Tommy Youtube
** JY HAN(jyhan35@gmail.com)
** 김씨가족(wearekimsfamily@gmail.com)
** 겜맨(yun040803@naver.com)


==추천 코딩 코스==
===김왼손과 집단지성들===
* 코딩이라는 말을 처음 들어보았어요!!! -> 엔트리> 미운코딩 > 엘리스 코딩유치원(유료)
[[김왼손]]과 집단지성들은 잉끼유튜버 [[김왼손]]과 그 열혈 구독자들이 함께하는 코딩계의 아이돌 그룹입니다. 정규 1집 미운코딩새끼에 참여해 주신 분들은 아래에 기록을 꼭 남겨주세요. 참여해 주신 모든 여러분들께 감사드립니다.
* 학교에 코딩이 나온다 해서 코딩을 배우려 해요!
* 김레이 (leykim0907@naver.com) : 딕셔너리 부분 편집
* (초등) -> 엔트리> 스크래치> 코드컴뱃> 미운코딩
* 켈리(Kelly) (rnrmf3apdlf@gmail.com) : list, tuple 등 요약
* (, 고등) -> 미운코딩 > 앨리스> 야간자율학습
* MANGO 망고 (mingyu041209@naver.com) : 전체적인 디자인 다듬기
* 재미로 코딩을 하려고 해요! -> 스크래치 > 미운코딩 > 야간자율학습
* 요거트 (changeunp04@gmail.com) : 전체적인 내용 편집
* 코딩의 더 심화된 내용을 배우고 싶어요 -> 미운코딩 2편> 야간자율학습 > C 강의
* H2SO4
* 회사에 취직하고 싶어요! -> 미운코딩 > 야간자율학습 > 고급 강의 > C 강의
* 이에스 (hubolab10@gmail.com) : 파이썬이란, 이 책을 읽는 방법 제작 및 보기 좋게 다듬기
* JW호박 pumkin (pjwbrain@naver.com) : 기본 내용들의 부족한 부분 보충
* Meta27-익명의 거북 (leeyoungmin2788@gmail.com) : 약간의 수정, 조건문, IDLE 커스텀, While문, 문자열 등
* 토미유튜브 (tjdwn1416@gmail.com) : 무한루프 내용 추가
* 김씨가족 (wearekimsfamily@gmail.com) : 수정 및 추가, 소소한 부분 정리
* 스치 (junhg0211@gmail.com)
* 류도영 (ryudo1023@gmail.com) : 사소한 내용 고침
* 호옹 (v1000401@gmail.com) : 사소한 내용 고침
* 문용석 (weedss9@naver.com) : 귀도 반 로섬은 누구인가? 제목 제작, 미운코딩새끼 요약 다듬기, 파이썬이란? 일부분 수정
* 불탄고등어 : 사소한 내용 고침
* 이다은(Danna) (daeunlee0720@gmail.com) : 사소한 내용 고침, 맞춤법/띄어쓰기 오류 수정
* 몹쓸 프포자(thekeaon0509@naver.com)
* mn스토브(ministove3yo@gmail.com) : 맞춤법 수정


==미운코딩새끼==
===멤버 모집 영상===
<youtube>https://youtu.be/c2mpe9Xcp0I</youtube>
{{youtube|2V39BtC1wdo}}
* 4주간 파이썬 기초 문법 강의
* 파이썬 프로그래밍을 위한 재료 / 반복문 / 조건문 / 컨테이너(기본 재료를 모으는 것) / 함수(미리 묶어놓은 것, 이름을 붙여 놓은 기능)
* 강의 대상 : 코딩 처음 접하는 사람을 위한 강의


===앨범 제작 방식===
* [[김왼손]]은 강의합니다.
* 집단지성들은 공부합니다.
* 모두 함께 정리합니다.


==프로그램과 프로그래밍==
==프로그램과 프로그래밍==
<youtube>https://youtu.be/4temEoXl8mE</youtube>
{{youtube|4temEoXl8mE}}
===프로그램과 프로그래밍===
 
====코딩이란?====
===프로그램이란?===
* 코딩 = 프로그래밍 : 엄밀하게는 다르지만 같게 쓰이는 추세
* 문제를 해결하기 위해서 명령을 모아놓은 것을 말합니다.
* Coding = Programming
* 컴퓨터를 이용해서 우리 일상의 문제들을 해결할 수 있습니다.
* 프로그래밍 : 프로그램을 만드는 작업
* 프로그램은 고대 그리스어에서 유래되었습니다. 미리 정해놓은 것이라는 뜻을 가지고 있습니다.
* 방송 프로그램, 운동 프로그램처럼 일상 속에서도 프로그램이라는 말을 사용하고 있습니다.
* 일상 속 여러 프로그램들처럼 미리 정해놓은 것을 순서대로 실행하는 것을 말합니다.
* 코딩(coding)과 프로그래밍(programming)은 엄밀히 말하면 다르지만 혼용해서 많이 사용합니다.
* 프로그래밍 언어란 컴퓨터가 알아듣는 언어를 말합니다. 세상에는 다양한 프로그래밍 언어가 있습니다.


====프로그램이란?====
===프로그램의 기본 구조===
* 프로그램 : 어떤 문제를 해결하기 위해서 명령을 모아놓은 것 //일상의 문제를 컴퓨터를 이용해서 해결하는 것
* 모든 프로그램은 순차, 선택, 반복 세 가지 기본 구조로 구성되어 있습니다.
* 프로그래밍 언어 : 컴퓨터가 알아듣는 언어. 다양함.
** 순차 : 정해진 순서대로 명령을 수행하는 것을 말합니다.
* 일상 속 프로그램 : 방송 프로그램, 운동 프로그램, 연주회 프로그램 등등
** 선택 : 조건에 따라 흐름을 바꾸는 것을 말합니다.
* 고대 그리스어에서 어원. 미리 정해놓은 것
** 반복 : 같은 명령을 조건이나 횟수에 따라 반복하는 것을 말합니다.
* 일상 속 프로그램처럼 미리 정해놓은 것을 순서대로 위에서 아래로 실행함


====프로그램의 기본 구조====
==왜 파이썬일까요?==
* 순차 : 위에서 아래로 한 줄씩 명령을 수행
{{youtube|C2jbff0AU_E}}
* 선택 : 분기. 선택의 순간, 예와 아니오 중 선택
* 반복 : 같은 명령을 되풀이하는 것
* 모든 프로그램은 이 세 가지 기본 구조가 쌓여서 이루어짐


===쉽습니다===
* 문법이 쉽고 간결해서 배우고 사용하기 쉽습니다.
* 코딩은 쉽지 않지만 파이썬은 다른 언어들보다는 비교적 쉽습니다.
* 우리가 사용하는 영어와 유사하기 때문에 친숙한 느낌을 받을 수 있습니다.
* 외국의 경우 파이썬을 입문 언어로 많이 사용합니다. 우리나라도 바뀌고 있는 추세입니다.
* 범용 프로그래밍 언어라서 데이터 분석, 게임 개발, 보안 등 다방면에 사용이 가능합니다.
* 아래는 자바라는 언어로 "Life is Short!"를 분리하고 출력하는 코드입니다.


===왜 파이썬일까요?===
<syntaxhighlight lang='java'>
<youtube>https://youtu.be/C2jbff0AU_E</youtube>
====쉽다====
* 코딩은 기본적으로 쉽지 않다. 하지만 다른 언어에 비해서 비교적 쉽다.
* Java
<source lang='java'>
public static void main(String[] args) {
public static void main(String[] args) {
     String msg = “Life is Short!;
     String msg = "Life is Short!";
    for(String m : msg.split(“ “))
        for(String m : msg.split(" "))
        System.out
            System.out.println(m);
</source>
}
* Python
</syntaxhighlight>
<source lang='python'>
 
msg = ’Life is Short!
* 아래는 파이썬으로 "Life is Short!"를 분리하고 출력하는 코드입니다.
 
<syntaxhighlight lang='python'>
msg = 'Life is Short!'
print(msg.split())
print(msg.split())
</source>
</syntaxhighlight>
* 입문 언어로 많이 사용(전에 블록코딩을 배우고 오면 더 좋음)
 
* 범용 프로그래밍 언어 : 게임, 보안 등등에서 사용이 가능
* 같은 기능인데도 파이썬이 자바보다 간결한 것을 볼 수 있습니다.
* 우리가 사용하는 영어와 유사한 문법
 
===많습니다===
* 파이썬을 사용하는 사람이 아주 많기 때문에 참고할 자료도 많습니다.
* 스택오버플로우 (https://stackoverflow.com/) : 코딩계의 네이버 지식인이라 할 수 있습니다.
* 질문도 엄청 많지만 답변은 이보다 훨씬 많습니다. 훑어보는 것만으로도 공부가 됩니다.
* 파이썬의 모토 : "어떤 문제를 해결하는 가장 아름다운 방법이 있다."
* 파이썬과 자주 비교되는 언어로 [[펄]]이 있는데 [[펄]]은 문제를 해결할 때 다양한 방법을 선호합니다.
** [[파이썬의 도]]
<syntaxhighlight lang='python'>
>>> import this
The Zen of Python, by Tim Peters


====많다====
Beautiful is better than ugly.
* 인터넷에 널리 퍼져 있는 자료가 많다. 파이썬 프로그래머가 많음
Explicit is better than implicit.
* https://stackoverflow.com/ 프로그래밍계의 네이버 지식인
Simple is better than complex.
* 파이썬의 모토 : 어떤 문제를 해결하는 가장 아름다운 방법이 있다.
Complex is better than complicated.
** 파이썬의 도 : http://blog.naver.com/PostView.nhn?blogId=sungback&logNo=220763967758&redirect=Dlog&widgetTypeCall=true
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
</syntaxhighlight>


====빠르다====
===빠릅니다===
* 실행속도가 아니라 빠르게 개발이 가능하다.
* 실행속도가 빠르다는 것이 아니라 개발을 빠르게 할 수 있다는 말입니다.
* 배터리 포함 : 다양한 라이브러리가 많아서 바로 갖다 쓸 수 있다는 의미.
* 배우는데 걸리는 시간도 다른 언어에 비해 비교적 적게 드는 편입니다.
** 있는 바퀴를 만들지 마라.
* 제품을 구매했을 때 배터리가 포함되어 있어 따로 구매하거나 필요가 없는 경우가 있습니다.
* 파이썬은 제공하는 라이브러리들이 많아서 구현할 필요 없이 바로 가져다 쓸 수 있습니다.
* 보통 이런 라이브러리들은 충분히 검증이 되어있기 때문에 직접 만드는 것보다 성능이 좋습니다.
** [[있는 바퀴를 만들지 말아라]]


===파이썬 설치하기: IDLE===
==파이썬 시작하기==
<youtube>https://youtu.be/X7MHIrFiJek</youtube>
{{youtube|X7MHIrFiJek}}
===파이썬 설치하기===
* https://www.python.org/ → Downloads → 3.X 클릭
* https://www.python.org/ → Downloads → 3.X 클릭
* 더블클릭 후 Install Now 누르기 전에 ?Add Python? 3.6 to PATH 체크하고 Next~!
* 더블클릭 후 Install Now 누르기 전에 ?Add Python? 3.6 to PATH 체크하고 Next
* 3.6.2 (가장 최신) 버전을 이용하는 것을 추천함. (본 강의는 3.6.0 버전 기준)
* 본 강의는 3.6.0 버전을 기준으로 합니다. 가장 최신 버전을 사용해도 관계 없습니다.
* IDLE : 통합 개발 환경
* 2.x 버전을 사용하면 미운코딩새끼의 예제가 정상적으로 동작하지 않을 수 있습니다.
** 인터랙티브 : 컴퓨터와 핑퐁하듯이 주고받을 수 있는 명령창
 
** 자신이 한번 명령어를 던지면 컴퓨터가 한번 대답을 던져주는 형식
===IDLE===
* IDLE (Integrated Development and Learning Environment)
* 초보자들이 처음 파이썬을 입문할 때 사용하기에 간편합니다.
* 개발을 할때도 보조 도구로 사용하기 좋습니다.
* 인터렉티브 모드
** 컴퓨터와 탁구를 치듯이 주고받을 수 있는 모드입니다.
** 한번 명령어를 던지면 컴퓨터가 대답을 하는 형식입니다.
* 에디터 모드
** 여러 줄의 코드를 작성할 수 있는 모드입니다.
 
==입력과 출력==
===출력하기===
{{youtube|Ulfudc1pF5Q}}
* print()는 값을 출력해주는 함수입니다.
* 입력한 메시지나 값을 출력합니다.
* 문자나 숫자 등을 출력할 수 있습니다.
* 쉼표(,)로 여러 값을 출력할 수 있습니다.
* 괄호(()) 안의 값을 출력합니다.
 
<syntaxhighlight lang="python">
>>> print()


==오늘의 실습==
>>> print('Hello world!')
<source lang='python'>
Hello world!
>>> print
>>> print(1)
>>> printn
1
>>> print(‘Hello world!’)
>>> print([1, 2, 3])
>>> print([1, 2, 3])
>>> print(1, 2)
[1, 2, 3]
>>> print(1 2)
</syntaxhighlight>
>>> print(‘My name is’, ‘Left’)
 
>>> input()
* 정확하게 print()를 입력해야 합니다. 잘못 입력하면 에러가 발생합니다.
>>> input(‘이름을 입력하세요’)
 
>>> input(‘당신의 나이는? :’)
<syntaxhighlight lang="python">
>>> age = input(‘당신의 나이는?)
>>> pritn()
>>> age
Traceback (most recent call last):
  File "<pyshell#105>", line 1, in <module>
    pritn()
NameError: name 'pritn' is not defined
</syntaxhighlight>
 
* 컴퓨터는 개떡같이 말하면 찰떡같이 알아듣지 못합니다. 그냥 개떡같이 알아 듣습니다.
* 이 때문에 컴퓨터가 알아들을 수 있도록 문법에 맞게 찰떡같이 말해줘야 합니다.
 
<syntaxhighlight lang="python">
>>> print(1)
1
>>> print(1, 2, 3)
1 2 3
>>> print(1,2,3)
1 2 3
>>> print(123)
123
>>> print('python')
python
>>> print('My name is', 'Bob')
My name is Bob
</syntaxhighlight>
 
===입력하기===
{{youtube|V9bTS16hCS0}}
* 실행 중 사용자의 입력을 받습니다.
* 입력 값은 항상 문자열로 받아옵니다.
* 프로그램에게 정보를 전달할 수 있습니다.
* 괄호 안에 문자열을 넣으면 프롬프트의 역할을 수행합니다.
* 입력 받은 값을 변수에 저장할 수 있습니다.
 
<syntaxhighlight lang='python'>
>>> name = input('What is your name?')
What is your name?
</syntaxhighlight>
 
==변수==
===변수===
{{youtube|b3ituFojqU0}}
* 변수에는 값을 할당할 수 있습니다.
* 파이썬에서 =은 할당을 의미합니다.
* 할당된 값은 변할 수 있습니다.
 
<syntaxhighlight lang='python'>
>>> my_int = 1
>>> my_int = 1
>>> my_int + 3
>>> my_str = 'Python'
>>> my_int * 100
>>> count = 1 # 1
>>> my_bool = True
>>> count = count + 1  # 2
>>> print(my_bool)
</syntaxhighlight>
>>> my_list = [1, 2, 3]
>>> my_list
>>> my_dict = {‘김왼손’:’여’}
>>> print(‘Hello World!’) # 안녕!
>>> print(2 + 3) # 계산결과를 출력
</source>


* http://www.pythontutor.com/


==입력과 출력==
===변수의 이름===
===출력하기: print()===
* 아주 예전에는 메모리에 저장되어 있는 값을 불러오기 위해 번호를 사용했습니다.
<youtube>https://youtu.be/Ulfudc1pF5Q</youtube>
* 번호가 많아지면서 관리가 어려워지고 숫자 대신 이름을 붙이기 시작했습니다.
* 출력!
* 변수의 이름은 다른 사람들과 함께 쓰기에 편한 이름으로 짓는 것이 좋습니다.
* 괄호 안의 어떤 값을 출력해주는 함수
* 혼자만이 아닌 모두가 이해할 수 있게 작성하는 것을 권장합니다.
* 콤마 뒤에 띄어쓰기는 넣어주는 편이 일반적임
* 글자나 밑줄 문자(_)를 사용합니다.
* print 안의 내용이 출력됨. 파이썬의 가장 기본 언어임
* 대문자와 소문자를 구분합니다.
* 프로그래밍 언어는 약속
* 개떡 = 개떡, 찰떡 = 찰떡. 융통성이 없음


===입력하기: input()===
<syntaxhighlight lang='python'>
<youtube>https://youtu.be/V9bTS16hCS0</youtube>
>>> python = 1
* 입력!
>>> PYTHON = 2
* 내가 컴퓨터에게 이야기해주는 것. 사용자에게 입력받는 것.
</syntaxhighlight>
* ()안에다가 ‘’로 묶어서 문자 입력 가능
* age = input(‘당신의 나이는?’) 처럼 input 받은 값을 어딘가에 저장할 수 있다.
* 변수에 사용할 수 있는 경우가 많음


==변수==
* 숫자로 시작하는 이름은 쓸 없습니다.
===변수와 변수이름===
* 띄어쓰기를 포함할 없습니다. 보통 띄어쓰기 대신 밑줄 문자(_)를 사용합니다.
<youtube>https://youtu.be/b3ituFojqU0</youtube>
* 유니코드 방식을 사용하기 때문에 변수명으로 한글도 지원합니다.
* age 변수를 봤음
* 하지만 대부분의 경우 영어 변수명을 사용합니다.
* 변수에는 값을 저장(할당)하는데 변할 있음
* my_int = 1
** =은 할당한다는 의미. 1을 my_int에 할당한다는 의미.
** 1에 my_int라는 이름을 붙여줌
* http://www.pythontutor.com/
* 메모리 번호를 사용했으나 복잡하므로 이름을 붙여줌. 이게 변수!
* my_int에 2라는 자연수를 저장하고 my_float에 2.1이라는 실수를 저장할 경우 두 변수를 더하면 2 + 2.1이 계산된다.
* 변수 이름은 타인과 함께 쓰기에 편한 이름으로 짓기. 약속 있음
* 자신만 이해할 있는 언어보다 모두가 이해할 수 있게 네임을 짓는 것을 권장함.
* 글자, 밑줄 문자 가능
** abdfdfdsfd___sdfsdfsjdklfj = 1
* 대소문자 구분이 가능
** python = 1
** PYTHON = 2
* 한글도 됨. 왜죠? 유니코드 방식을 사용함.  
** 파이썬 = 1
** 김왼손 = 20
* 그럼 뭐가 안 되나?
** 숫자로 시작하는 이름 안됨
** 띄어쓰기 안됨(_로 띄어쓰기 대신)


<syntaxhighlight lang='python'>
>>> 파이썬 = 1
>>> 김왼손 = 20
</syntaxhighlight>


==프로그램의 기본재료==
==프로그램의 기본재료==
===숫자형, 문자열, 부울===
===숫자형, 문자열, 불린===
<youtube>https://youtu.be/Np0PQhQQY2c</youtube>
{{youtube|Np0PQhQQY2c}}
* 숫자형
* 숫자형 (Numeric)
** 정수형
** 숫자로 이루어진 자료형입니다.
*** 1, 2, 3,’ int’로 불림
** 정수나 실수 등을 다룰 수 있습니다.
** 실수형
** 숫자끼리 연산도 가능합니다.
*** 1.2, 3.23 ‘ float’이라고 불림
 
* type() 함수
<syntaxhighlight lang='python'>
** 변수의 데이터 타입을 확인해줌.  
>>> my_int1 = 1
** 파이썬에서는 거의 모든 것이 객체
>>> my_int2 = -2
* 문자열string
>>> my_int3 = 4096
** ‘ ‘ 또는 “ “로 구분
>>> my_float1 = 1.0
*** 짝은 맞춰주세요.
>>> my_float2 = 2.0
** 글자
>>> my_float3 = 3.14
* 불린Boolean
</syntaxhighlight>
** 참과 거짓, True와 False
 
* 하이라이트 기능
* 문자열 (String)
** 예약된 단어(예약어)에 색칠해주는 기능
** 문자나 문자들을 늘어놓은 것입니다.
** 큰따옴표와 작은따옴표로 구분합니다.
** 리스트와 함께 시퀀스 자료형입니다.
** 작은따옴표(' ') 또는 큰따옴표(" ")로 구분합니다.
 
<syntaxhighlight lang='python'>
>>> my_str1 = 'a'
>>> my_str2 = '3.14'
>>> my_str3 = 'coding'
>>> my_str4 = "coding"
</syntaxhighlight>
 
* 불린 (Boolean)
** 참(True)과 거짓(False)을 말합니다.
** 비교나 논리연산자의 결과입니다.
 
<syntaxhighlight lang='python'>
>>> my_bool1 = True  # True
>>> my_bool2 = False  # False
>>> my_bool3 = 1 < 2  # True
>>> my_bool4 = 1 == 2  # False
</syntaxhighlight>


===리스트, 튜플, 딕셔너리===
===리스트, 튜플, 딕셔너리===
<youtube>https://youtu.be/MxEOz1Lfylk</youtube>
{{youtube|/MxEOz1Lfylk}}
* 리스트List
* 리스트 (List)
** 컨테이너
** 여러 값을 함께 모아서 저장합니다.
** 숫자형, 문자열 등을 한번에 모아서 씀
** 값을 변경할 수 있으며 순서가 있습니다.
** my_list = [ ]  
 
* 튜플Tuple
<syntaxhighlight lang='python'>
** 컨테이너
>>> my_list = []  # []
** 리스트와 비슷하지만, 값을 바꿀 수 없다.
>>> my_list.append(123)  # [123]
* 딕셔너리Dictionary
>>> my_list.append('abc') # [123, 'abc']
** 컨테이너
>>> my_list.append(True)  # [123, 'abc', True]
** 키와 값의 쌍으로 저장.
</syntaxhighlight>
** 저장 가능
 
* 자료형 변환
* 튜플 (Tuple)
** float()
** 여러 값을 함께 모아서 저장합니다.
*** 실수가 아닌 걸 실수로
** 값을 변경할 수 없으며 순서가 있습니다.
** str()
 
*** 숫자를 문자열로
<syntaxhighlight lang='python'>
** list()
>>> my_tuple1 = ()
*** 강제로 리스트형으로
>>> my_tuple2 = (1,)
>>> my_tuple3 = ('a', 'b', 'c')
>>> my_tuple4 = 3.14, 'Python', True
</syntaxhighlight>
 
* 딕셔너리 (Dictionary)
** 관련된 정보를 서로 연관시켜 놓은 것입니다.
** 키와 값의 쌍으로 이루어져 있습니다.
 
<syntaxhighlight lang='python'>
>>> my_dict = {}  # {}
>>> my_dict[1] = 'a'  # {1: 'a'}
>>> my_dict['b'] = 2  # {1: 'a', 'b': 2}
>>> my_dict['c'] = 'd'  # {1: 'a', 'b': 2, 'c': 'd'}
</syntaxhighlight>


===자료형 변환하기===
===자료형 변환하기===
<youtube>https://youtu.be/eAFabVpmNEc</youtube>
{{youtube|eAFabVpmNEc}}
* 자료형끼리 변환할 수 있는 함수도 있습니다.
* int(): 정수형으로 변환합니다.
 
<syntaxhighlight lang='python'>
>>> print(int(3.14))
3
</syntaxhighlight>
 
* float(): 실수형으로 변환합니다.
 
<syntaxhighlight lang='python'>
>>> print(float(3))
3.0
</syntaxhighlight>
 
* str(): 문자열로 변환합니다.
 
<syntaxhighlight lang='python'>
>>> print(str(3.0))
3.0
>>> print(type(str(3.0)))
<class 'str'>
</syntaxhighlight>
 
* list(): 리스트로 변환합니다.
 
<syntaxhighlight lang='python'>
>>> print(list('3.0'))
['3', '.', '0']
</syntaxhighlight>
 
==주석==
{{youtube|baCBhEZxbhU}}
* 사람을 위한 설명을 메모합니다.
* 코멘트(comment)라고도 합니다.
* 컴퓨터는 주석을 무시합니다.
* #을 사용합니다.
* 지나치게 많거나 코드와 상관없는 주석은 오히려 방해가 될 수 있습니다.


===주석===
<syntaxhighlight lang='python'>
<youtube>https://youtu.be/baCBhEZxbhU</youtube>
>>> print('Hello Python!')  # 문자열을 출력합니다.
* 컴퓨터는 알아듣지 못하는 우리끼리의 대화
Hello Python!
* # 을 이용해서 주석 사용!
>>> print(12345)  # 숫자를 출력합니다.
<source lang='python'>
12345
print(2 + 3)  # 계산결과를 출력
>>> print(2 + 3)  # 계산결과를 출력합니다.
</source>
5
</syntaxhighlight>


==문자열==
==문자열==
===문자열===
===기본구조===
<youtube>https://youtu.be/nxalF9tsqAQ</youtube>
{{youtube|nxalF9tsqAQ}}
* 큰따옴표나 작은따옴표로 나열
* 문자나 문자들을 나열한 것입니다.
* 값이나 순서 변경이 불가
* 값을 변경할 수 없으며 순서가 있습니다.
<source lang='python'>
* 큰따옴표나 작은따옴표로 구분합니다.
>>> my_str = "김씨가족"
 
<syntaxhighlight lang='python'>
>>> my_str = 'python'
>>> print(my_str)
>>> print(my_str)
>>> type(my_str)  
python
>>> my_str = 'JW호박 Pumpkin'
>>> type(my_str)
</source>
<class 'str'>
* ''' ''' """ """ 모두 표현 가능
</syntaxhighlight>
* 세 개씩 “””는 의미가 따로 있음 : 여러 줄을 한 문자열에 넣을 있음.
 
<source lang='python'>
* 문자열 안에 큰따옴표나 작은따옴표를 넣고 싶을 때는 서로 다른 따옴표를 함께 씁니다.
>>> my_str = """제스퍼
 
토미
<syntaxhighlight lang='python'>
메타
>>> print("Let's go!")
>>> print('I said, "Hello!"')
</syntaxhighlight>
 
* 따옴표를 번씩 쓰면 여러 줄을 표현할 있습니다.
 
<syntaxhighlight lang='python'>
>>> my_str = """버스
지하철
택시
"""
"""
</source>
</syntaxhighlight>


===문자열 포맷팅===
===문자열 포맷팅===
<youtube>https://youtu.be/2j24tW2rnFQ</youtube>
{{youtube|2j24tW2rnFQ}}
* %s : 문자열 대입에 사용
* % 연산자를 이용해 문자열에 숫자, 문자열 등을 대입합니다.
<source lang='python'>
* 문자열을 자유롭게 표현하는 방법입니다.
>>> my_str = 'My name is %s' % 'Young Choi'
 
>>> my_str
<syntaxhighlight lang='python'>
'My name is Young Choi'
>>> print('My name is %s' % 'Tom')
</source>
My name is Tom
* %d : 정수형 숫자 대입: (정수란 -1, -2, 1, 2처럼 부호 뒤의 절댓값이 자연수입니다.
>>> print('x = %d, y = %d' % (1, 2))
<source lang='python'>
x = 1, y = 2
>>> '%d %d' % (1, 2)
>>> print('%d x %d = %d' % (2, 3, 2 * 3))
'1 2'
2 x 3 = 6
</source>
</syntaxhighlight>
* %f : 실수형 숫자 대입: ( 실수란 -1.1처럼 부호 뒤의 절댓값이 자연수가 아닌 경우입니다.)
 
<source lang='python'>
* %d : 정수형 숫자를 대입할 수 있습니다.
>>> '%f' % 3.14
 
'3.14'
<syntaxhighlight lang='python'>
</source>
>>> print('%d %d' % (1, 2))
* '{ }'.format() : 파이썬스러운 연산자. 문자열을 자유롭게 표현하는 방법, 순서 지정 가능
1 2
<source lang='python'>
</syntaxhighlight>
>>> 'My name is %s' % '조희진'
 
'My name is 조희진'
* %f : 실수형 숫자를 대입할 수 있습니다.
>>> 'My name is{}'.format('조희진')
 
'My name is 조희진'
<syntaxhighlight lang='python'>
>>> '{} x {} ={}'.format(2, 3, 2*3)
>>> print('%f' % 3.14)
'2 x 3 = 6'
3.14
>>> '{1} x {0} ={2}'.format(2, 3, 2*3)  # 괄호 안의 숫자는 순서를 지정
</syntaxhighlight>
'3 x 2 = 6'
 
</source>
* %s : 문자열을 대입할 수 있습니다.
 
<syntaxhighlight lang='python'>
>>> print('%s' % 'coding')
coding
</syntaxhighlight>
 
===format()===
{{youtube|8mWUHoB8A-I}}
* 포맷팅을 수행하는 문자열의 메소드입니다.
* 중괄호 { }를 이용해 값을 대입합니다.
* 보다 파이썬스러운 방법입니다.
* 순서도 지정할 수 있습니다.
 
<syntaxhighlight lang='python'>
>>> print('My name is %s' % 'Tom')
My name is Tom
>>> print('My name is {}'.format('Tom'))
My name is Tom
>>> print('{} x {} ={}'.format(2, 3, 2 * 3))
2 x 3 = 6
>>> print('{1} x {0} ={2}'.format(2, 3, 2 * 3))  # 괄호 안의 숫자는 순서를 지정
3 x 2 = 6
</syntaxhighlight>


==문자열==
===인덱싱===
===인덱싱===
* 주소, 위치, 색인
{{youtube|wNBTyl4lov4}}
* 위치에 따른 주소값
* 위치(index)를 이용해 각 문자에 접근할 수 있습니다.
* Python → 인덱스로는 0 = P, 1 = y, t = 2, h = 3, o = 4, n = 5
* 'Python' : 0 = P, 1 = y, t = 2, h = 3, o = 4, n = 5
* 실제 숫자와는 다르게 0부터 시작. 공백 포함
* 위치는 0부터 시작합니다. 공백도 포함합니다.
<source lang='python'>
 
<syntaxhighlight lang='python'>
>>> alphabet = 'abcde'
>>> print(alphabet[0])
a
>>> print(alphabet[3])
d
>>> print(alphabet[5])
Traceback (most recent call last):
  File "<pyshell#12>", line 1, in <module>
    print(alphabet[5])
IndexError: string index out of range
 
>>> my_name = '김왼손의 왼손코딩'
>>> my_name = '김왼손의 왼손코딩'
>>> my_name[3]
>>> my_name[3]
''
>>> my_name[8]
>>> my_name[8]
''
</source>
</syntaxhighlight>
* 음수를 주소로 사용할 수 있음. 가장 마지막을 -1로 설정 거꾸로 세어감
 
<source lang='python'>
* 음수를 인덱스로 사용할 수 있습니다.  
* 가장 뒤의 값을 -1부터 해서 거꾸로 세어갑니다.
 
<syntaxhighlight lang='python'>
>>> my_name = '김왼손의 왼손코딩'
>>> my_name = '김왼손의 왼손코딩'
>>> my_name[-1]
>>> my_name[-1]
''
</source>
</syntaxhighlight>
* 리스트 자료형에서도 똑같음. 인덱스 기억!
 
* 리스트 자료형에서도 거의 비슷합니다.


===슬라이싱===
===슬라이싱===
* 자르다. 나누다
{{youtube|xAW1OXEc9Lc}}
* [시작:끝]
* 문자열에서 여러 값을 한꺼번에 잘라옵니다.
* Python [1:4] → yth 를 의미 1부터 4전까지
* 콜론(:)을 이용해 여러 값을 한꺼번에 가져올 수 있습니다.
* Python [2:5] → tho 2부터 5전까지
* 기존 문자열은 그대로 두고 복사해서 사용합니다.
<source lang='python'>
 
my_name = '김왼손의 왼손코딩'
<syntaxhighlight lang='python'>
>>> my_name[5:7]
>>> my_str = 'Hello Python!'
'왼손'
>>> print(my_str[0:1])
</source>
H
* 앞이나 뒤의 값 생략 가능
>>> print(my_str[0:2])
<source lang='python'>
He
my_name = '김왼손의 왼손코딩'
>>> print(my_str[3:7])
lo P
 
>>> my_name = '김왼손의 왼손코딩'
>>> print(my_name[5:7])
왼손
</syntaxhighlight>
 
* 앞이나 뒤 숫자를 생략할 수도 있습니다.
 
<syntaxhighlight lang='python'>
>>> my_name = '김왼손의 왼손코딩'
>>> my_name[:2]
>>> my_name[:2]
'김왼'
김왼
>>> my_name[7:]
>>> my_name[7:]
'코딩'
코딩
</source>
</syntaxhighlight>
* 기존 문자열은 그대로 존재, 복사해서 사용


===메서드===
===메서드===
* 함수
{{youtube|BIE3gF_YT5U}}
* 어떤 기능을 수행하기 위해 모아놓고 이름을 붙여 쉽게 불러 쓰게 함
* 특정한 기능을 수행하기 위한 코드를 모아두고 이름을 붙인 것을 함수라고 합니다.
* string.split()
* 메서드는 특정 객체만 사용할 수 있는 함수를 말합니다.
* string만 사용할 수 있는 함수
* string.split(): 문자열을 공백 기준으로 분리합니다.
* 문자열이 공백을 기준으로 잘리는 split() 향후 설명
 
<source lang='python'>
<syntaxhighlight lang='python'>
my_name.split()
>>> fruit_str = 'apple banana lemon'
>>> fruits = fruit_str.split()
>>> print(fruits[0])
apple
>>> print(fruits[1])
banana
 
>>> my_name = '김왼손의 왼손코딩'
>>> print(my_name.split())
['김왼손의', '왼손코딩']
['김왼손의', '왼손코딩']
</source>
</syntaxhighlight>
* https://wikidocs.net/13 중간에 split 설명 참고


===독스트링===
===독스트링===
* 문자열을 사용할 때 큰따옴표, 작은따옴표 개씩 사용하는 걸 주석으로 사용할 수 있음.  
{{youtube|HO_hquCSivY}}
* 기본 주석 >>> # 주석입니다.
* 문서화 문자열(Documentation string)입니다.
* 독스트링 >>> ‘’’ 이것도 주석입니다 ‘’’ // “”” 이것도 주석입니다 “””
* 함수가 어떤 일을 수행하는지 설명합니다.
* 함수 설명용으로 주로 사용하는 주석
* 보통 큰따옴표 세 개를 사용합니다.
 
<syntaxhighlight lang='python'>
def 함수이름(인자1, ...):
    """함수에 대한 설명"""
    실행할 명령1
    실행할 명령2
    ...
    return 결과
</syntaxhighlight>
 
===end===
{{youtube|xHMs7j-EGZ0}}
* print() 함수에서 출력의 끝을 지정합니다.
* 파이썬에서는 줄 바꿈(\n)이 기본 값입니다.
 
<syntaxhighlight lang='python'>
>>> print(' ', end='')


===이스케이프 코드===
>>> print('집단지성', end='/')
* print 함수 한 가지 더- 보통
* 출력의 끝을 지정하는 방법>>> print(‘’, end=’’)
<source lang='python'>
>>> print(‘집단지성’, end=/)
집단지성/
집단지성/
>>> print(‘집단지성’, end=’미운코딩새끼’)
>>> print('집단지성', end='미운코딩새끼')
집단지성미운코딩새끼
집단지성미운코딩새끼
</source>
</syntaxhighlight>
* Escape code- 어려움
 
* 특별한 따옴표나 괄호 없이 사용
===이스케이프 코드===
* 특정 기능을 수행하는 문자의 조합
* 특정한 기능을 수행하는 문자의 조합입니다.
* \n : 개행, 줄바꿈
* 문자열에 포함해서 사용할 수 있습니다.
<source lang='python'>
* 키보드에서 백슬래쉬와 원화는 같은 키입니다.
>>> print(‘미운코딩새끼의 집단지성들’)
* \n : 개행, 줄 바꿈
미운코딩새끼의 집단지성들
 
>>> print(‘미운코딩새끼의/n집단지성들’)
<syntaxhighlight lang='python'>
>>> print('미운코딩새끼의 집단지성들')
미운코딩새끼의 집단지성들
>>> print('미운코딩새끼의\n집단지성들')
미운코딩새끼의
미운코딩새끼의
집단지성들
집단지성들
</source>
</syntaxhighlight>
 
* \t : 탭(tab)


* \t : tab 칸 (공백 4칸) 띄는 것.
<syntaxhighlight lang='python'>
* \가 없는 키보드는 원화(\)’,
>>> print('미운', end='\t'); print('코딩')
<source lang='python'>
>>> print(‘미운’, end=\t’); print(‘코딩’)  
미운    코딩
미운    코딩
</source>
</syntaxhighlight>
* ; (세미콜론) 한 줄이 끝났다. 권장사항은 아님
* C의경우 세미콜론(;)은 필수이나, 파이썬은 아님 ← 대신 파이썬은 콜론(:)을 자주 사용함


==리스트==
==리스트==
* List : 몇만개의 자료를 한꺼번에 저장
===기본구조===
* immutable : 값 변경 불가, mutable : 값 변경 가능
{{youtube|p1cwtlQoaN4}}
* [val1, val2…] ←리스트
* 여러 값을 한꺼번에 모을 수 있습니다.
* 리스트에는 값을 처음부터 넣을 있고, 나중에 넣을 수도 있다.
* 값들은 변경할 수 있고 순서가 있습니다.
* append는 리스트에 값을 추가할 때 사용 
** 가변(mutable) : 값을 변경할 있습니다. 리스트, 딕셔너리 등이 해당됩니다.
* append는 번호를 리스트 내의 번호를 붙여서 사용
** 불변(immutable) : 값을 변경할 수 없습니다. 문자열, 튜플 등이 해당됩니다.


* 빈 리스트 만들기


★animals[1] == ‘하이에나’ ★
<syntaxhighlight lang='python'>
>>> my_list = []
[]
>>> type(my_list)
<class 'list'>
</syntaxhighlight>


* del : delete
* 값을 가지고 있는 리스트 만들기
<syntaxhighlight lang='python'>
>>> my_list = [1, 2, 3]
>>> print(my_list)
[1, 2, 3]
</syntaxhighlight>


===값 추가하기===
{{youtube|hrjcktiEdk0}}
* list.append()를 사용해서 값을 추가할 수 있습니다.


* list.sort  ##sort 메서드 정렬 하는 메서드
<syntaxhighlight lang='python'>
>>> students = ['Tom', 'Alice', 'Sally']
>>> students.append('Betty')
>>> students.append('Angela')
>>> print(students)
['Tom', 'Alice', 'Sally', 'Betty', 'Angela']
</syntaxhighlight>


<source lang='python'>
* 리스트는 그릇과 같습니다. 그릇이 없는 상태에서 식재료를 쏟을 수 없습니다.
animals.sort()
* 리스트가 없는 상태로 append()를 이용해 값을 추가할 수 없습니다.
</source>


* list.count
<syntaxhighlight lang='python'>
>>> humans.append('David')
Traceback (most recent call last):
  File "<pyshell#16>", line 1, in <module>
    humans.append('David')
NameError: name 'humans' is not defined
</syntaxhighlight>


<source lang='python'>
===인덱싱===
animals.count(‘바다소’)  # 2  ##해석 : animals 리스트에 ‘바다소’가 몇개 있냐?
{{youtube|NiXYjXBrzOg}}
animals.count(‘코알라’)  # 1  ##해석 : animals 리스트에 ‘코알라’가 몇개 있냐?
* 인덱싱, 슬라이싱은 문자열과 상당히 유사합니다.
animals.count(‘하이에나’)  # 10 ## 해석: animals 리스트에 하이에나가 몇개있냐? > 1
* 위치를 이용해서 값에 접근하는 것을 인덱싱이라고 합니다.
len(animals)  # 6  ## 해석 : animals 리스트에 몇가지 동물들이 있는가
</source>


===추가하기===
<syntaxhighlight lang='python'>
* 리스트는 여러 개의 값을 한 개에 저장할 수 있다.
>>> animals = ['코알라', '하이에나', '바다소', '땅다람쥐', '바다코끼리', '스컹크', '아나콘다']
* 수많은 숫자를 한 번에 저장. 인덱스 사용.
>>> print(animals[1])
* immutable vs mutable // 불가변  vs  가변
['하이에나']
* immutable : 문자열
</syntaxhighlight>
* mutable : 리스트
* [val1, val2]
<source lang='python'>
>>> my_list = []  ## my_list라는 빈 그릇을 생성
[]
>>> my_list = [1, 2, 3] ## my_list에 처음부터 1,2,3 값을 저장
>>> std = [‘이에스’, ‘이에스2’, ‘이에스3’]
>>> std.append(‘토미’) ## append 리스트에 추가하는 메서드
>>> std.append(‘찹쌀떡’) ##
</source>


>>> humans.append(‘test’) ## 에러!!!
===값 제거하기===
* 리스트는 그릇이라 생각할  수 있다.  그릇을 만들지도 않고 append로     
* del : 리스트의 값을 제거합니다.
* 더할 수는 없음!!! append는 반드시 먼저 그릇(리스트)이 있어야 함
* 리스트 중간에 끼워넣기 http://mwultong.blogspot.kr/2006/12/python-list-array-item-insert-example.html
* insert 메서드
* pop 메서드


===제거하기===
<syntaxhighlight lang='python'>
>>> animals = ['코알라', '하이에나', '바다소', '땅다람쥐', '바다코끼리', '스컹크', '아나콘다']
>>> print(animals[4])
'바다코끼리'
>>> del animals[4]  # 4번째 값 삭제
>>> print(animals)
['코알라', '하이에나', '바다소', '땅다람쥐', '스컹크', '아나콘다']
</syntaxhighlight>


===인덱싱===
===슬라이싱===
* 리스트의 예제
* 리스트에서 여러 값을 한꺼번에 잘라옵니다.
<source lang='python'>
* 콜론(:)을 이용해 여러 값을 한꺼번에 가져올 수 있습니다.
>>> animals =[‘코알라’, ‘하이에나’, ‘바다소’, ‘땅다람쥐’, ‘바다코끼리’, ‘스컹크’, ‘아나콘다’]
* 기존 리스트는 그대로 두고 복사해서 사용합니다.
>>> animals = [4]
<syntaxhighlight lang='python'>
‘바다코끼리’
>>> animals = ['코알라', '하이에나', '바다소', '땅다람쥐', '바다코끼리', '스컹크', '아나콘다']
>>> del animals[4] ### 4번째 인덱스 삭제
>>> print(animals[1:3])
[‘코알라’, ‘하이에나’, ‘바다소’, ‘땅다람쥐’, ‘스컹크’, ‘아나콘다’]
['하이에나', '바다소']
>>> animals.append(‘바다코끼리’)
</syntaxhighlight>
>>> animals
[‘코알라’, ‘하이에나’, ‘바다소’, ‘땅다람쥐’, ‘스컹크’, ‘아나콘다’, ‘바다코끼리’]
</source>


===슬라이싱===
===메서드===
* 리스트의 예제
{{youtube|bxRyJUhOiE4}}
<source lang='python'>
* 리스트도 다양한 메서드가 있습니다.
>>> animals[1:3]
* 외우는 건 중요하지 않습니다. 필요할 때 검색해서 사용할 수 있으면 됩니다.
[‘하이에나’, ‘바다소’]
* list.sort(): 리스트 안의 값을 정렬합니다.
animals[1:3]  #[1]부터 [3]전까지
[0]
[1]
[2]
[3]
[4]
[5]
[6]
코알라
하이에나
바다소
땅다람쥐
스컹크
아나콘다
바다코끼리
</source>


===메소드===
<syntaxhighlight lang='python'>
* https://wikidocs.net/14 :: 추가 메서드는 검색으로
>>> animals =['코알라', '하이에나', '바다소', '땅다람쥐', '바다코끼리', '스컹크', '아나콘다']
* list.sort()
<source lang='python'>
>>> animals.sort()
>>> animals.sort()
>>> animals
>>> print(animals)
[‘땅다람쥐’, ‘바다소’, ‘바다코끼리’, ‘스컹크’, ‘아나콘다’, ‘코알라’, ‘하이에나’]
['땅다람쥐', '바다소', '바다코끼리', '스컹크', '아나콘다', '코알라', '하이에나']
</source>
</syntaxhighlight>
* list.count()  
 
<source lang='python'>
* list.count(): 해당 값의 개수를 셉니다.
>>> animals.append(‘바다소’)
 
>>> animals.count(‘바다소’) ## 리스트에 값이 몇 개인가?
<syntaxhighlight lang='python'>
2
>>> animals =['코알라', '하이에나', '바다소', '땅다람쥐', '바다코끼리', '스컹크', '아나콘다']
</source>
>>> print(animals.count('바다소'))
* 길이(개수)를 알려줌. 내장함수(파이썬에서 이미 만들어둔 함수)
1
<source lang='python'>
</syntaxhighlight>
>>> del animals[1]
>>> len(animals)
7
>>> animals
[‘땅다람쥐’, ‘바다코끼리’, ‘스컹크’, ‘아나콘다’, ‘코알라’, ‘하이에나’, ‘바다소’]
</source>


* 리스트의 메서드에 대해서 더 알고 싶다면 구글에 검색해보세요.


==튜플==
==튜플==
* Tuple (리스트와 거의 유사) : 값 변경 불가.
===기본구조===
* 리스트 대괄호[]
{{youtube|dNagCepV6Cw}}
* 리스트와 거의 유사합니다.
* 여러 값을 한꺼번에 모을 수 있습니다.
* 값을 변경할 수 없다는 점이 리스트와 다릅니다.
* 튜플은 괄호를 쓰지 않아도 됩니다.


* 튜플은 괄호 안써도 됨
<syntaxhighlight lang='python'>
<source lang='python'>
>>> my_tuple = (1, 2, 3)
my_tuple = 1, 2, 3
>>> type(my_tuple)
my_tuple = (1, 2, 3)
<class 'tuple'>
</source>
>>> my_tuple = 1, 2, 3
>>> type(my_tuple)
<class 'tuple'>
</syntaxhighlight>


===패킹, 언패킹===
{{youtube|Hnsli2sUp4M}}
* 패킹(Packing) : 여러 개의 값을 한꺼번에 묶는 것을 말합니다.
* 언패킹(Unpacking) : 묶여 있는 값을 풀어놓는 것을 말합니다.


<syntaxhighlight lang='python'>
>>> my_tuple = (1, 2, 3)
>>> num1, num2, num3 = my_tuple
>>> print(num1)
1
>>> print(num2)
2
</syntaxhighlight>


* Packing : 자료를 쌓아놓는 것
* 두 변수의 값을 서로 바꿀 때도 사용할 수 있습니다.
* Unpacking : 자료를 풀어놓는 것
<source lang='python'>
num1, num2, num3 = my_tuple
num1 = 1
num2 = 2
</source>
* 둘의 자료 순서가 바뀌려면..
<source lang='python'>
num1, num2 = num2, num1
</source>


===패킹, 언패킹===
<syntaxhighlight lang='python'>
* 여러 값을 모아서 저장
* 리스트와 차이는 값을 변경할 수 없음! immutable
* (val1, val2)  또는 val1, val2 괄호 없어도 됨
<source lang='python'>
>>> my_tuple = () ## 빈튜플 작성 가능함
>>> my_tuple = 1, 2, 3
</source>
* Packing vs Unpacking : 여러 개 값을 하나로 묶기 vs 묶인 값을 풀기 // Packing 뭔가를 쌓는 것. Unpacking 뭔가를 푸는 것.
<source lang='python'>
>>> my_tuples = 1, 2, 3 ## 이게 Packing
>>> num1, num2, num3 = my_tuple ## 이게 Unpacking 각각에 튜플 값이 들어감
>>> num1 = 1
>>> num1 = 1
>>> num2 = 2 ## 값을 바꾸고 싶음
>>> num2 = 2
>>> num1, num2 = num2, num1
>>> num1, num2 = num2, num1
>>> num1
>>> print(num1)
2
2
>>> num2
>>> print(num2)
1
1
</source>
</syntaxhighlight>


==for==
==for==
* 모든 변수를 거칠때까지 이 명령문 안에 있는 것을 반복
===반복문===
* 컨테이너 = [1, 2, 3]
* 반복되는 지루한 작업을 처리하기 위해 사용합니다.
* 파이썬에는 for와 while 두 가지 반복문이 있습니다.
* for는 횟수를 기준으로, while은 조건을 기준으로 반복합니다.


<source lang='python'>
===기본구조===
{{youtube|fStlO0uBYtQ}}
 
<syntaxhighlight lang='python'>
for 변수 in 컨테이너:
for 변수 in 컨테이너:
_ _ _ _실행할 명령 1
    실행할 명령1
_ _ _ _실행할 명령 2
    실행할 명령2
변수가 다 떨어질 때 까지 반복
    ...
4칸의 들여쓰기, tab, 8칸 들여쓰기
</syntaxhighlight>
들여쓰기는 모두 하나로 통일
 
(4칸 띄어쓰기 권장!)
* 컨테이너 안의 값을 전부 순회할 때까지 반복합니다.
</source>
* 반복하는 부분을 코드블럭이라고 합니다.
* 코드블럭을 구분하기 위해 콜론(:)과 들여쓰기를 사용합니다.


<source lang='python'>
<syntaxhighlight lang='python'>
animals = [땅다람쥐, 바다코끼리, 스컹크, 아나콘다, 코알라, 하이에나, 바다소]
for animal in animals:
for animal in animals:
     print(animal)
     print(animal)
출력 결과 ↓
 
땅다람쥐
땅다람쥐
바다코끼리
바다코끼리
551번째 줄: 771번째 줄:
하이에나
하이에나
바다소
바다소
</source>


<source lang='python'>
for num in [1, 2, 3]:
for num in [1, 2, 3]:
     print(num)
     print(num)
1
1
2
2
3
3
</source>


* range(n)은 0부터 n 전의 숫자까지를 나타낸다.
for ch in '김왼손':
* 또, range(n, i)는 n부터 i 전의 숫자까지를 나타낸다
     print(ch)
* 예) range(3) → [0, 1, 2]
 
* range(1,4) → [1, 2, 3]
* 중첩 반복문
<source lang='python'>
for j in range(2, 10):
</syntaxhighlight>
     for i in range(1, 10):
        print(‘{}x{}={}’.format(j, i, j*i))
</source>


===기본구조===
===들여쓰기===
* 반복을 나타내는 중요한! 문법 ( 파이썬에서 가장 중요한 요소중에 하나입니다)
* 파이썬에서는 들여쓰기가 선택이 아닌 필수입니다.
* 반복 처리 = 컴퓨터 주특기. 빠르고 정확하게 수행 가능
* 띄어쓰기의 종류는 하나로 통일해야 합니다.
* 파이썬에서는 두 가지가 있음 for, while
* 보통 4칸 띄어쓰기를 권장합니다.
* 파이썬의 들여쓰기 : 탭과 스페이스바는 섞어쓸 수 없음. 4칸!
* 콜론과 들여쓰기(띄어쓰기 4칸)가 중요 ← 코드블록
<source lang='python'>
for 변수 in 컨테이너 :
    실행할 명령1 ## 명령1과 명령2는 코드블럭이라고 칭함.  
    실행할 명령2
</source>
컨테이너의 첫 번째 값이 변수에 들어간 다음 명령1과 2 실행, 컨테이너의 두 번째 값이 변수에 들어간 다음 명령 1과 2 실행…. 컨테이너의 마지막 값까지 반복
<source lang='python'>
>>> for animal in animals: ## animals의 값을 불러다 모두 출력
          print(animal)


땅다람쥐
===range()===
바다코끼리
{{youtube|End06FuccEE}}
스컹크
* for와 함께 자주 사용되는 내장함수입니다.
아나콘다
* range(stop)은 0부터 stop 전까지의 숫자를 나열합니다.
코알라
* range(start, strop)는 start부터 stop 전까지의 숫자를 나열합니다.
하이에나
바다소
</source>
<source lang='python'>
>>> for num in [1, 2, 3]:
            print(num)


1
<syntaxhighlight lang='python'>
2
for n in range(3):
3
    print(n)
</source>


===range()===
내장 함수
<source lang='python'>
>>> range(3)
>>> range(0,3)
</source>
* for n in [0, 1, 2]:과  for n in range(0,3): 같음 0부터 수를 시작해서 세 번째 숫자 전(2)까지
<source lang='python'>
>>> for n in range(0,3):
            print(n)
0
0
1
1
2
2
</source>
===중첩 for문===


* 반복문 안의 반복
for n in range(4, 6):
* ## 구구단 2단
     print(n)
<source lang='python'>
 
for i in range(2, 10):
4
     print('{}x{}={}'.format(2,i,2*1))          #작은따옴표를 넣을 것!
5
</syntaxhighlight>


===for x 2===
{{youtube|UAaapRsJlYs}}
* 반복문을 중첩해서 사용할 수 있습니다.
* 아래는 for를 이용해 구구단 2단을 출력하는 예제입니다.


    # 2x1=2
<syntaxhighlight lang='python'>
     # 2x2=4
for i in range(1, 10):
</source>
     print('{}x{}={}'.format(2, i, 2 * 1))
</syntaxhighlight>


* for를 중첩해서 사용하면 2단부터 9단까지 모두 출력할 수도 있습니다.


* ## 구구단
<syntaxhighlight lang='python'>
<source lang='python'>
for j in range(2, 10):
for j in range(2, 10):
     for i in range(1, 10):
     for i in range(1, 10):
         print('{}x{}={}'.format(j,i,j*i))
         print('{}x{}={}'.format(j, i, j * i))
</syntaxhighlight>


===컴프리헨션===
{{youtube|ztVK2Cl5Saw}}
* 리스트를 만드는 강력하고 간결한 방법입니다.
* 초보자에게는 쉽지 않지만 많이 사용됩니다.
* 주어진 리스트에서 홀수만 뽑아내는 코드를 작성해봅시다.


    # 2x1=2
<syntaxhighlight lang='python'>
    # 2x2=4
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
 
</source>
* Comprehension(매우매우 많이 사용됨!) : 여러줄의 코드를 한줄로 나타내는 것
<source lang='python'>
numbers = [1,2,3,4,5,6,7,8,9,10]
odd_numbers = []
odd_numbers = []


for number in numbers:
for number in numbers:
     if number % 2 == 1: #2로 나눴을때 1이 남으면
     if number % 2 == 1: # 2로 나눴을 때 1이 남으면 홀수입니다.
         odd_numbers.append(number)
         odd_numbers.append(number)


print(odd_numbers)
print(odd_numbers)
</source>
</syntaxhighlight>
* #위에는 numbers에서 odd_numbers로 홀수만 옮기는 것
 
* #위의 코드와 아래의 코드는 같다.
* 다음은 컴프리헨션을 이용한 방법입니다.
<source lang='python'>
<syntaxhighlight lang='python'>
[number for number in numbers if number % 2 == 1]
>>> odd_numbers = [number for number in numbers if number % 2 == 1]
</source>
</syntaxhighlight>
 
==연산자==
===할당===
{{youtube|Cz6cHtVWl58}}
* 수학에서 =는 같다는 뜻입니다.
* 파이썬에서 =은 할당 연산자입니다.
* 오른쪽의 값을 왼쪽의 변수에 할당합니다.
 
<syntaxhighlight lang='python'>
>>> my_int = 1
>>> my_float = 2.0
>>> my_list = []
</syntaxhighlight>


<source lang='python'>
* +=와 같은 것들을 복합 할당 연산자라고 합니다.
for i in range (0, 11):
    print (“!”)
</source>


<syntaxhighlight lang='python'>
>>> count = 0
>>> count = count + 1
>>> print(count)
1
>>> count += 1  # count = count + 1과 같습니다.
>>> print(count)
2
</syntaxhighlight>


===산술===
{{youtube|7dgVDoVZiMk}}
* 숫자끼리 연산을 할 수 있게 합니다.
* 아래와 같이 더하기, 빼기, 곱하기, 나누기를 할 수 있습니다.


* C언어로 작성해 본다면
<syntaxhighlight lang='python'>
<source lang='c'>
>>> print(3 + 3)
for (i = 1, i < 10, i++)
6
    printf (“레이님 왜이렇게 귀여워요?”)
>>> print(20 - 5)
</source>
15
>>> print(6 * 2)
12
>>> print(12 / 3)
4.0
</syntaxhighlight>


* JS로 작성해 본다면
* 아래는 특수 연산자입니다.
<source lang='javascript'>
for (var i=1; i < 10; i++)
console.log(“JS욥”)


print animals [0:5]
<syntaxhighlight lang="python">
</source>
>>> print(3 ** 2)  # 3의 2제곱
9
>>> print(4 ** 3)  # 4의 3제곱
64
>>> print(7 / 3)  # 7 나누기 3
2.3333333333333335
>>> print(7 // 3)  # 7 나누기 3의 몫
2
>>> print(7 % 3)  # 7 나누기 3의 나머지
1
</syntaxhighlight>




===컴프리헨션===
{{youtube|ndqPcu30EJQ}}
* 어렵지만 많이 쓰임. 우선 알아는 두고 갑시다.
* %의 경우에는 홀수, 짝수의 구분 등에 사용될 수 있습니다.
* 갑자기 엄청 고급으로 넘어갑니다! 컴프레션은 어려운데 많이 쓰여요.그래서 알아두면 좋긴해요 지금말고  나중에라도 이런게있다는 것만 알아두시면 좋아요 그냥 바로 볼게요 하시고 뭘할거냐면요 넘버스라는 리스트가 있어요 1 2 3 4 5 6 7 8 9 10 이라는 리스트가 잇어요 오드 넘버스라는 리스트가 있어요. 넘버스에서 오드 홀수값만 뽑아와서 1, 3, 5, 7, 9만 넣을거에요
* 아래 코드는 %를 이용해 홀짝 구분을 하는 코드입니다.


<source lang='python'>
<syntaxhighlight lang="python">
numbers=range(1,11)
numbers = [1, 2, 3, 4, 5, 6, 7]
for number in numbers:
for number in numbers:
     if number % 2 == 1:
     if number % 2 == 1:
         odd_numbers.append(number)
         print(number, ': 홀수')
    else:
        print(number, ': 짝수')
 
1 : 홀수
2 : 짝수
3 : 홀수
4 : 짝수
5 : 홀수
6 : 짝수
7 : 홀수
</syntaxhighlight>
 
=== 문자열 ===
{{youtube|hftBFjwimaA}}
* 문자열에도 연산자가 있습니다.
* + : 문자열끼리 연결합니다.
 
<syntaxhighlight lang="python">
>>> print('김왼손'+ 'X' + '집단지성들')
김왼손X집단지성들
>>> print('안녕하세요' + ' ' + '반갑습니다')
안녕하세요 반갑습니다
</syntaxhighlight>
 
* * : 문자열을 곱한 수만큼 반복합니다.
<syntaxhighlight lang="python">
>>> print('안녕' * 3)
안녕안녕안녕
>>> print('안녕 ' * 5)
안녕 안녕 안녕 안녕 안녕
</syntaxhighlight>
 
===비교===
{{youtube|xP7cbOZwb_U}}
* 비교연산자는 말 그대로 비교를 하는 것입니다.
* 비교의 결과는 불린(True, False)입니다.
* == : 왼쪽과 오른쪽이 같은 지
* != : 왼쪽과 오른쪽이 다른 지
* > : 왼쪽이 더 큰 지
* < : 오른쪽이 더 큰 지
* >= : 왼쪽이 더 크거나 같은 지
* <= : 오른쪽이 더 크거나 같은 지
 
<syntaxhighlight lang='python'>
>>> print(1 < 2)
True
>>> print(1 > 2)
False
>>> print(1 == 1)
True
>>> print(1 != 1)
False
>>> print(4 <= 6)
True
>>> print(5 <= 5)
True
</syntaxhighlight>
 
===논리===
{{youtube|Qf8nHIOXfHk}}
* 파이썬의 논리 연산자에는 and, or, not이 있습니다.
* and : 둘 다 True일 때에만 True
* or : 한 쪽이라도 True이면 True
* not : True이면 False, False이면 True
 
<syntaxhighlight lang="python">
>>> print(True)
True
>>> print(False)
False
 
>>> print(True and True)
True
>>> print(True and False)
False
>>> print(False and True)
False
>>> print(False and False)
False
 
>>> print(True or True)
True
>>> print(True or False)
True
>>> print(False or True)
True
>>> print(False or False)
False
 
>>> print(not False)
True
>>> print(not True)
False
</syntaxhighlight>
 
* 놀이동산의 청룡 열차를 타기 위해서는 키와 나이 제한이 있다고 생각해봅시다.
* 키가 140cm 이상이면서 나이도 10살 이상이어야 청룡 열차를 탈 수 있다고 합니다.
* 일단 키도 120cm 이하면서 나이가 8살이면 결과는 어떻게 될까요?
* 키와 나이 조건 모두 False이기 때문에 결과는 False입니다.
 
<syntaxhighlight lang="python">
>>> my_height = 120
>>> my_age = 8
>>> print(my_height > 140 and my_age > 10)
False
</syntaxhighlight>
 
* 키가 190cm이면서 나이가 9살이면 어떨까요?
* 키 조건은 True이지만 나이 조건은 False이므로 결과는 False입니다.
 
<syntaxhighlight lang="python">
>>> my_height = 190
>>> my_age = 9
>>> print(my_height  > 140 and my_age > 10)
False
</syntaxhighlight>
 
* 키가 150cm이면서 나이가 32살이면 어떨까요?
* 키와 나이 조건 모두 True이므로 결과는 True입니다.
 
<syntaxhighlight lang="python">
>>> my_height = 150
>>> my_age = 32
>>> print(my_height > 140 and my_age > 10)
True
</syntaxhighlight>
 
=== 멤버쉽 ===
{{youtube|8JXbc7N1R28}}
* 리스트, 튜플 등의 안에 해당하는 값이 있는 지 확인합니다.
* in, not in 키워드를 사용합니다.
 
<syntaxhighlight lang="python">
>>> fruits = ['사과', '딸기', '망고', '브로콜리', '바나나']
>>> print(fruits)
['사과', '딸기', '망고', '브로콜리', '바나나']
>>> print('딸기' in fruits)
True
>>> print('딸기' not in fruits)
False
>>> print('상추' in fruits)
False
>>> print('상추' not in fruits)
True
</syntaxhighlight>
 
==조건문==
===if===
{{youtube|V0-zxFwFmyo}}
 
<syntaxhighlight lang="python">
if 조건:
    실행할 명령1
    실행할 명령2
    ...
</syntaxhighlight>
 
* 조건이 참인지 거짓인지 판단합니다.
* 조건에 따라 처리의 흐름을 바꿉니다.
* if 키워드를 사용합니다.
** 참일 경우 코드블럭을 실행합니다.
** 거짓일 경우 코드블럭을 넘어갑니다.
 
<syntaxhighlight lang='python'>
name = 'Edwin'
if name == 'Edwin':
    print('당신이 Edwin이군요.')
    print('만나서 반가워요 Edwin.')
 
당신이 Edwin이군요.
만나서 반가워요 Edwin
</syntaxhighlight>
 
===else, elif===
{{youtube|0dZtOB0iaO8}}
 
<syntaxhighlight lang='python'>
if 조건:
    실행할 명령1
    실행할 명령2
else:
    실행할 명령3
    실행할 명령4
</syntaxhighlight>
* if와 함께 사용할 수 있는 친구들입니다.
* else: 이전의 if나 elif가 모두 거짓일 경우 else로 넘어갑니다.
 
<syntaxhighlight lang='python'>
name = 'Bob'
if name == 'Alice':
    print('당신이 Ailce이군요.')
else:
    print('아니 당신은!?')
 
아니 당신은!?
</syntaxhighlight>
 
* elif : 이전의 if나 elif가 거짓일 경우 elif의 조건문으로 넘어갑니다.
 
<syntaxhighlight lang='python'>
if 조건:
    실행할 명령1
    실행할 명령2
elif 조건:
    실행할 명령3
    실행할 명령4
</syntaxhighlight>
 
<syntaxhighlight lang='python'>
name = 'Bob'
if name == 'Alice':
    print('당신이 Ailce이군요.')
elif name == 'Bob':
    print('당신이 Bob이군요.')
else:
    print('아니 당신은!?')
 
당신이 Bob이군요.
</syntaxhighlight>
 
==while==
===기본구조===
{{youtube|j1_Og0zl-jU}}
 
<syntaxhighlight lang="python">
while 조건:
실행할 문장 1
실행할 문장 2
...
</syntaxhighlight>
* 반복문은 반복되는 지루한 작업을 처리합니다.
* 코드의 양이 줄어들고 읽기 쉬워집니다.
* while은 조건을 기준으로 반복합니다.
 
<syntaxhighlight lang="python">
count = 0
whlie count < 3:
    print('횟수: ', count)
    count += 1
 
횟수: 0
횟수: 1
횟수: 2
</syntaxhighlight>
 
===continue, break===
{{youtube|xSB8zkvtFp4}}
* continue : 다시 조건으로 돌아갑니다.
* break : 반복문을 끝내 버립니다.
 
<syntaxhighlight lang='python'>
count = 0
while count < 10:
    count += 1
    if count < 4:
        continue
    if count == 8:
        break
</syntaxhighlight>
 
==딕셔너리==
===기본구조===
{{youtube|yW2MZzAyjmE}}
 
<syntaxhighlight lang='python'>
{key1: value1, key2: value2, key3: value3 ...}
</syntaxhighlight>
 
* 딕셔너리를 말 그대로 해석하면 사전입니다.
* 딕셔너리는 키(key)와 값(value)을 쌍으로 갖는 자료형입니다.
* 리스트와의 차이점은 관련된 정보를 연관시킨다는 것입니다.
* 리스트는 값을 다루기 위해 인덱스를 사용하지만 딕셔너리는 키를 사용합니다.
 
<syntaxhighlight lang='python'>
>>> my_dict = {}  # {}
>>> my_dict[1] = 'a'  # {1: 'a'}
>>> my_dict['b'] = 2  # {1: 'a', 'b': 2}
>>> my_dict['c'] = 'd'  # {1: 'a', 'b': 2, 'c': 'd'}
</syntaxhighlight>
 
===값 추가하기===
* 딕셔너리는 아래와 같은 방법으로 값을 추가합니다.
 
<syntaxhighlight lang='python'>
>>> my_dict['학생1'] = 'Tom'
>>> print(my_dict)
{'학생1': 'Tom'}
>>> my_dict['학생2'] = 'Sally'
>>> my_dict['학생3'] = 'Betty'
>>> my_dict['학생4'] = 'Angela'
{'학생1': 'Tom', '학생2': 'Sally', '학생3': 'Betty', '학생4': 'Angela'}
</syntaxhighlight>
 
===값 제거하기===
* del을 이용해 키, 값 쌍을 제거합니다.
 
<syntaxhighlight lang='python'>
>>> my_dict = {'학생1': 'Tom', '학생2': 'Sally', '학생3': 'Betty', '학생4': 'Angela'}
>>> del my_dict['학생4']
>>> print(my_dict)
{'학생1': 'Tom', '학생2': 'Sally', '학생3': 'Betty'}
</syntaxhighlight>
 
=== 메서드 ===
{{youtube|mAf_gK6EEmg}}
* 메서드는 특정 객체만 사용할 수 있는 함수를 말합니다.
* dict.values(): 딕셔너리에서 값만 뽑아 돌려줍니다.
 
<syntaxhighlight lang="python">
students = {'학생1': 'Tom', '학생2': 'Sally', '학생3': 'Betty'}
for student in students.values():
    print(student)
 
Tom
Sally
Betty
</syntaxhighlight>
 
* dict.keys(): 딕셔너리에서 키만 뽑아 돌려줍니다.
 
<syntaxhighlight lang="python">
students = {'학생1': 'Tom', '학생2': 'Sally', '학생3': 'Betty'}
for key in students.keys():
    print(key)
 
학생1
학생2
학생3
</syntaxhighlight>
 
* dict.items(): 딕셔너리에서 키와 값 쌍을 뽑아 돌려줍니다.
 
<syntaxhighlight lang="python">
students = {'학생1': 'Tom', '학생2': 'Sally', '학생3': 'Betty'}
for key, val in students.items():
    print(key, val)
 
학생1 Tom
학생2 Sally
학생3 Betty
</syntaxhighlight>
 
==함수==
===기본구조===
{{youtube|SndQ4sG4qek}}
* 수학에도 함수가 있고, 엑셀에도 함수가 있습니다.
* 우리가 사용해왔던 print(), input() 등도 모두 함수입니다.
* 반복되는 코드에 이름을 붙여서 다시 사용할 수 있게 합니다.
* 필요할 때 함수의 이름을 불러서 사용할 수 있습니다.
* 통나무가 마술모자에 들어가면 마술빗자루가 나옵니다.
* 이와 유사하게 입력 값이 함수에 들어가면 출력 값이 나옵니다.
 
<syntaxhighlight lang="python">
def 함수이름(인자1, ...):
    실행할 명령1
    실행할 명령2
    ...
    return 결과
</syntaxhighlight>
 
* 함수에게 전달하는 값을 인자 혹은 매개변수라고 합니다.
* 굳이 따지자면 다른 용어이지만 보통 혼용해서 사용합니다.
* 함수에게 받아오는 값을 리턴 값, 반환 값, 결과 값이라고 합니다.
* 마치 내가 함수와 함께 캐치볼을 하는 것과 같습니다.
* 인자와 결과 값은 있을 수도 있고 없을 수도 있습니다.
 
===함수의 종류===
* 내장 함수: 파이썬에서 기본으로 제공하는 함수입니다.
* 모듈의 함수: 모듈에 포함되어 있는 함수입니다.
* 사용자 정의 함수: 사용자가 직접 정의한 함수입니다.
 
* 일반적인 함수
 
<syntaxhighlight lang='python'>
def 함수이름(인자1, ...):
    실행할 명령1
    실행할 명령2
    ...
    return 결과
</syntaxhighlight>
 
* 결과 값이 없는 함수
 
<syntaxhighlight lang='python'>
def sum(a, b):
    print('%d, %d의 합은 %d입니다.' % (a, b, a+b))
</syntaxhighlight>
 
* 입력 값도, 결과 값도 없는 함수
 
<syntaxhighlight lang='python'>
def say():
    print('Hi')
</syntaxhighlight>
 
===여러 개 돌려받기===
{{youtube|pq7GYqVKHF4}}
* 콤마(,)를 사용해서 여러 개의 값을 돌려받을 수 있습니다.
* 여러 개를 돌려줄 때는 하나의 튜플로 묶어서 전달합니다.
 
<syntaxhighlight lang="python">
def add_mul(num1, num2):
    return num1 + num2, num1 * num2
 
my_add, my_mul = add_mul(1, 2)  # 3, 2
</syntaxhighlight>
 
=== 함수를 사용하는 이유 ===
{{youtube|V8bodX3iPB4}}
* 다시 사용할 수 있습니다.
* 코드를 관리하기 쉬워집니다.
* 조립해서 사용할 수 있습니다.
 
==모듈==
===기본구조===
{{youtube|qN2X_1KAv-M}}
* 비슷한 기능의 함수들을 모아둔 파일입니다.
* 직접 만들 수도 있고 가져와서 사용할 수도 있습니다.
* import 키워드로 모듈을 가져옵니다.
* 마침표(.)를 이용해 함수를 사용합니다.
 
<syntaxhighlight lang="python">
import 모듈이름
</syntaxhighlight>
 
* 제품을 구매했을 때 배터리가 포함되어 있어 따로 구매할 필요가 없는 경우가 있습니다.
* 파이썬은 제공하는 라이브러리들이 많아서 구현할 필요 없이 바로 가져다 쓸 수 있습니다.
* 보통 이런 라이브러리들은 충분히 검증이 되어있기 때문에 직접 만드는 것보다 성능이 좋습니다.
** [[있는 바퀴를 만들지 말아라]]
 
===random===
{{youtube|DMydLshdX4I}}
* 난수를 만들거나 무작위와 관련된 함수를 포함합니다.
* random.choice(): 리스트의 값 중 하나를 랜덤하게 선택합니다.
 
<syntaxhighlight lang='python'>
>>> import random
>>> students = ['Tom', 'Sally', 'Betty', 'Eric', 'Angela', 'Stephany']
>>> print(random.choice(students))
Betty
>>> print(random.choice(students))
Eric
>>> print(random.choice(students))
Tom
</syntaxhighlight>
 
* random.sample(): 리스트의 값 중에서 지정한 개수만큼 랜덤하게 선택합니다.
 
<syntaxhighlight lang='python'>
import random
fruits = ['apple', 'banana', 'lemon']
my_fruit = random.sample(fruits, 2)
print(my_fruit) # ['apple', 'banana'] or ['banana', 'lemon'] or ...
</syntaxhighlight>
 
* random.randint(): 특정 범위의 정수 중 하나를 랜덤하게 선택합니다.
 
<syntaxhighlight lang='python'>
import random
my_int = random.randint(0, 10)
print(my_int)  # 0~10
</syntaxhighlight>
 
==객체==
{{youtube|OtWjuvfE5Do}}
* 현실의 물건, 물체, 사물을 컴퓨터 안에 재현하는 것입니다.
* 함수와 데이터를 한꺼번에 묶어둔 것을 말합니다.
* 파이썬에서는 대부분의 것들이 객체입니다.
* 통기타 객체
** 데이터: 이름, 색깔, 종류
** 함수: 핑거스타일로 연주하기, 스트럼으로 연주하기
* 게임 속 용사 객체
** 데이터: 성별, 이름, 레벨
** 함수: 앞으로 가기, 때리기, 점프 뛰기
* http://pythontutor.com/
 
==코딩 스타일==
{{youtube|E5QTokmXrIY}}
 
===PEP8===
* 코드를 작성하다 보면 나보다 다른 사람들이 보는 경우가 더 많습니다.
* 일관된 기준을 가지고 코드를 작성하면 다른 사람들과의 협업에 도움이 됩니다.
* PEP8은 파이썬 제작자인 귀도 반 로썸이 제안하는 코딩 스타일 가이드입니다.
** 원본 : https://www.python.org/dev/peps/pep-0008/
** 번역본 : https://b.luavis.kr/python/python-convention
* 코드를 일관성 있게 작성할 수 있게 하는 기준이자 약속입니다.
* 하지만 무리하게 일관성을 지키는 것은 별로 현명한 행동이 아닙니다.
 
==구글링 방법==
{{youtube|Q-sHj1WRKbw}}
* 프로그래밍을 하다 보면 검색을 해야 할 경우가 많습니다.
* 구글링이란 필요한 정보를 구글에서 검색하는 것을 말합니다.
* 영어로 된 자료가 훨씬 많지만 입문자는 한국어 자료로도 충분합니다.
* 구글링으로 모듈을 검색해 오늘 날짜를 구하는 코드를 작성해보세요.
 
<syntaxhighlight lang='python'>
>>> import datetime
>>> datetime.datetime.now()
datetime.datetime(2017, 9, 20, 22, 48, 1, 48263)
>>> print(datetime.datetime.now())
2017-09-20 22:48:19.225368
</syntaxhighlight>
 
==강의 외 내용==
===[[파이썬]]이란?===
1989년 12월 [[귀도 반 로섬]]은 크리스마스 이브를 의미 있게 보내기 위해 취미로 [[인터프리터 언어]]를 만들기로 결심하였다. 그는 ABC 라는 프로그래밍 언어를 주로 사용하였는데 ABC 프로그래밍 언어의 장점은 그대로 살리고 단점은 제거 함을 시작으로 1990년 파이썬이 만들어졌다.
파이썬은 우리나라를 비롯한 동아시아 지역에서는 아직 대중적으로 사용되지 않지만 서양에서는 교육을 비롯해 많은 곳에서 사용되고 있다.
파이썬은 구글이 애용하는 언어 중 하나로 컴퓨터에서 쉽게 사용될 수 있는 언어이다.
파이썬은 다른 언어들에 비해서 쉽고 배우기도 편해서 요즈음 핫한 언어로 떠오르고 있다. 하지만 파이썬은 다른 언어에 비해 실행 속도가 빠른 앱을 만들기 어렵고
복잡한 명령어는 수행하기 어려워 빠른 속도가 필요한 앱에는 사용되지 않고 있다.
그래도 파이썬을 먼저 배우면 다른 언어를 배우기 쉬운 만큼 지금 먼저 같이 배우기를 추천한다.(프로그래밍 경험이 없는 사람도 같이 즐길 수 있다!)


[number for number in numbers if number %2 == 1]
===[[귀도 반 로섬]]은 누구인가?===
</source>
[[귀도 반 로섬]] (Guiido van Rossum)은 네덜란드 출신의 컴퓨터 프로그래머이며, 프로그래밍 언어인 파이썬을 개발했다. 로섬은 2005년부터 2012년까지 [[구글]]에서 일했으며, 2013년부터 구글에서 퇴사해 현재까지 [[드롭박스]]에서 일하고 있다.
귀도 반 로섬은 Stichting Mathematisch Centrum (CWI)에서 일하면서 1986년에 BSD Unix에 glob () 루틴을 작성하고 기고했다. 또한 로섬은 ABC 프로그래밍 언어의 개발에 참여했으며, 나중에 a,b,c언어는 파이썬을 제작할 때 쓰였다.


* 만약에 넘버 퍼센트라는 것은 얘를 2로 나눴을때 나머지가 1이냐 라는 것이죠 2를 2로 나누면 영이 남고 이렇게 영 일 영일 이러면서 홀수와 짝수를 구분할수 있고 홀수인것만 오드 넘버스에 넣어라 의미죠
===책을 읽는 방법===
* 이거는 고급기술이지만요 말씀드리는것은 정말 많이 사용되기 때문이죠
요즈음 시대는 단순히 암기하는 시대가 아니다. 이러한 명령문이 있다는 것을 알고 다시 활용하거나 [[구글]]에 검색할 수 있게 되면 이 강의는 많은 도움이 될 것이다. 그래서 모든 내용을 외우려 하지 마시고 편안한 마음으로 봐주시면 좋겠다.
* 네 한번 실행시켜 보렉요 네 일삼오칠구만 나오는걸 보실수 있어요
왜 구글으로 검색해야 하나?
구글은 [[네이버]]보다 코딩 관련 자료가 훨씬 많다. 구글에는 다양한 문제 예시와 강의들이 있어 검색하기 편하다.


* 핵심입니다.,
=== 삼항연산자 ===
* 연산자에는
* if문을 이용해 변수의 값을 선택할 때, 보통 우리는 이렇게 한다
* - * / % 가 있습니다
* a, b 두 값중 더 큰 값을 넣을 때
* 순서대로 더하기 빼기 곱하기 나누기 나머지 구하기
* 그리고 또 다른 연산자


* ==, ===, !=, !, 등등..
<syntaxhighlight lang="python">
* 그리고 연산자에 의해서 비교되거나 이용되는 것들은 피연산자.
>>> a, b = 1, 2
* a==6 에서 피연산자는 a와 6, 연산자는 ==.
>>> if a > b:
... print(a, end="")
... else:
... print(b, end="")
2
# 더 큰 값을 출력하는 if-else문이다.
</syntaxhighlight>
* 하지만, 우리가 코딩을 하다 보면, 이렇게 긴 문장을 쓰면 근처에 있는 방대한 양의 if문과 겹쳐저, 잘 안 보일 수도 있고,
* 어쨌든! 삼항연산자라는것은 if-else문을 한 줄로 줄인 것이다.
<syntaxhighlight lang="python">
>>> a, b = 1, 2
>>> print(a if a > b else b)
2
</syntaxhighlight>
* 아니!? 무려 2가 출력되었다!
* "값1 if 조건 else 값2" 는 '조건'이 True일 때는 값1을 출력하고, False일 때에는 값2를 출력한다.


* 안타깝게도 파이썬에는 피연산자가 3개인 삼항연산자가 사실상 없다고 보면 됩니다. (상당히 편한데. 대신에 if와 else를 사용해 간단히 가능합니다.)
===예외 처리===
* 파이썬 코드 구동시 에러가 일어날 경우 에러를 무시(예외처리) 하고 다음 코딩을 진행하게 해주는 방법
* https://docs.python.org/3/library/exceptions.html 예외처리의 종류
<syntaxhighlight lang='python'>
try:
    ...
except [발생 오류[as 오류 메시지 변수]]:
    ...


* ##홀수 출력해보세요
a = [1, 2, 3, 4]
<source lang='python'>
b = [0, 'a', 1, 2]
numbers = [1,2,3,4,5,6,7,8,9,10]
i = 0
odd_numbers = []


while i < len(a):
  try:
      print a[i] / b[i]
  except TypeError:
      print "분모는 숫자여야 합니다."
  except ZeroDivisionError:
      print "0 으로는 나눌 수 없습니다."
  i = i + 1


for number in numbers:
0으로는 나눌 수 없습니다.
    if number % 2 == 1: # 2로 나눌 때 나머지가 1인가 묻는 문장, 즉 홀수 판단문
분모는 숫자여야 합니다.
        odd_numbers.append(number)
3
print(odd_numbers)
2
</source>
</syntaxhighlight>
       
* 이걸 바꿔봄
<source lang='python'>
[number for number in numbers if number % 2 ==1]


## 다음 코드를 저장해서 실행해보세요.
===랜덤===
numbers = [1,2,3,4,5,6,7,8,9,10]
* 많이 쓰이는 함수에는 이런 것들이 있다.
odd_numbers = []
** random.random()
*** 0에서 1까지의 실수를 출력하는 함수.
** random.randint(a, b)
*** a에서 b까지의 정수를 출력하는 함수.
** random.shuffle(list)
*** list를 섞는 함수.
** random.choice(list)
*** list에서 아무거나 하나를 선택한다.
<syntaxhighlight lang='python'>
>>> import random
>>> print(random.random())
0.20928967330889192
>>> print(random.randint(0, 100))
47
>>> my_list = [i * 2 for i in range(9)]
>>> random.shuffle(my_list)
>>> print(my_list)
[10, 8, 0, 14, 4, 6, 2, 12, 16]
>>> print(random.choice(my_list))
4
</syntaxhighlight>
* 으아니?! 여기는 이렇게 나오지만, 당신은 이렇게 나오지 않았을지도 모른다.
* 이렇게, 예시에서의 출력과 자신의 출력이 다른 이유는, random이란, [[난수]]를 출력하는 함수이기 때문이다.


for number in numbers:
==무편집영상==
    if number % 2 == 1: # 2로 나눌 때 나머지가 1인가 묻는 문장, 즉 홀수 판단문
{{소스헤더|1주차}}
        odd_numbers.append(number)
{{youtube|P_z2qFcfHeA}}


print(odd_numbers)
{{소스헤더|2주차}}
{{youtube|_0jqO-56tA0}}


test = [number for number in numbers if number % 2 ==1]
{{소스헤더|3주차}}
print(test)
{{youtube|o9QCtLb2Prs}}
</source>
       


{{소스헤더|4주차}}
{{youtube|XzKcdmWg0Jk}}


==플러스 알파==
==기타 사이트==
* 홍보
* https://www.facebook.com/khimacademy: 왼손코딩 페이스북 페이지
** http://cafe.naver.com/studentcoding 왼손코딩 팬카페
* https://wikidocs.net/book/1421: 김왼손과 집단지성들 정규 1집 미운코딩새끼
** http://cafe.naver.com/studentcoding 학생들을 위한 스터디 카페입니다~
* http://band.us/#!/band/64154740: 왼손코딩 네이버 밴드
* http://cafe.naver.com/leftcording: 김왼손 선생님에 관련된 내용을 만나볼 수 있습니다.
* http://cafe.naver.com/studentcoding: 학생들과 같이 코딩에 대하여 함께 공부할 수 있습니다.


==플러스 베타==
==문서 정보==
* 파이썬에 대한 궁금한 점은 여기에 적어주세요.
'''미운코딩새끼'''
* 제 1판 1쇄 펴낸 날 2017년 9월 7일
* 지은이 : [[김왼손]]과 집단지성들
* 펴낸곳 : 왼손코딩 유튜브 (https://goo.gl/xHi84G)
* 제작기간 : 2017년 9월 7일~
* 이 문서가 만들어지는데 큰 도움을 주신 '''조희진'''님, 훌륭한 강의를 해주신 '''[[김왼손]]'''님께 감사합니다. -제작자 일동-


==참고==
==같이 보기==
* {{위키백과}}
* [[유기농냠냠파이썬]]
* {{다음사전}}
* {{다음백과}}
* {{네이버사전}}
* {{네이버백과}}


[[분류: 코딩]]
[[분류: Python]]
[[분류: Python]]
[[분류: 프로그래밍]]
[[분류: 김왼손]]
[[분류: 왼손코딩]]
[[분류: 김왼손과 집단지성들]]
[[분류: 유튜브]]
[[분류: 유튜브]]
[[분류: 명사]]

2020년 11월 2일 (월) 02:31 기준 최신판

1 미운코딩새끼

대학 새내기 시절 코딩이 너무 어려웠습니다. 잘해보려 아등바등 노력해 봤지만 매번 실패하다가 결국 미워하게 돼버렸습니다. 지금 돌아보면 그렇게 미워할 정도는 아니었는데 말이죠. 지금도 같은 고민을 하는 분들이 많을 거라고 생각합니다. 그 때 그 시절 이런 강의가 있었으면 어땠을까 하는 마음으로 미운코딩새끼를 만들었습니다.

미운코딩새끼는 코딩이 너무 어려워 포기한 분, 또는 코딩을 처음 접하는 분을 위한 강의입니다. 파이썬이라는 프로그래밍 언어의 기초 문법을 쉽게 배울 수 있습니다. 코딩을 왜 배워야 하는지, 왜 필요한지에 대해서 답을 주지는 않지만 코딩이란 이런 거구나, 파이썬이란 이런 거구나 하는 정도의 감을 잡을 수 있습니다.

인스타그램 김왼손(@lefty_khim)을 팔로우하세요!

이 문서는 코딩계의 아이돌 그룹 김왼손과 집단지성들이 함께 정리했습니다. 미운코딩새끼는 남녀노소 상관없이 누구나 기여할 수 있습니다. 여러분도 지금 참여해보세요!!!

1.1 김왼손과 집단지성들

김왼손과 집단지성들은 잉끼유튜버 김왼손과 그 열혈 구독자들이 함께하는 코딩계의 아이돌 그룹입니다. 정규 1집 미운코딩새끼에 참여해 주신 분들은 아래에 기록을 꼭 남겨주세요. 참여해 주신 모든 여러분들께 감사드립니다.

  • 김레이 (leykim0907@naver.com) : 딕셔너리 부분 편집
  • 켈리(Kelly) (rnrmf3apdlf@gmail.com) : list, tuple 등 요약
  • MANGO 망고 (mingyu041209@naver.com) : 전체적인 디자인 다듬기
  • 요거트 (changeunp04@gmail.com) : 전체적인 내용 편집
  • H2SO4
  • 이에스 (hubolab10@gmail.com) : 파이썬이란, 이 책을 읽는 방법 제작 및 보기 좋게 다듬기
  • JW호박 pumkin (pjwbrain@naver.com) : 기본 내용들의 부족한 부분 보충
  • Meta27-익명의 거북 (leeyoungmin2788@gmail.com) : 약간의 수정, 조건문, IDLE 커스텀, While문, 문자열 등
  • 토미유튜브 (tjdwn1416@gmail.com) : 무한루프 내용 추가
  • 김씨가족 (wearekimsfamily@gmail.com) : 수정 및 추가, 소소한 부분 정리
  • 스치 (junhg0211@gmail.com)
  • 류도영 (ryudo1023@gmail.com) : 사소한 내용 고침
  • 호옹 (v1000401@gmail.com) : 사소한 내용 고침
  • 문용석 (weedss9@naver.com) : 귀도 반 로섬은 누구인가? 제목 제작, 미운코딩새끼 요약 다듬기, 파이썬이란? 일부분 수정
  • 불탄고등어 : 사소한 내용 고침
  • 이다은(Danna) (daeunlee0720@gmail.com) : 사소한 내용 고침, 맞춤법/띄어쓰기 오류 수정
  • 몹쓸 프포자(thekeaon0509@naver.com)
  • mn스토브(ministove3yo@gmail.com) : 맞춤법 수정

1.2 멤버 모집 영상

1.3 앨범 제작 방식

  • 김왼손은 강의합니다.
  • 집단지성들은 공부합니다.
  • 모두 함께 정리합니다.

2 프로그램과 프로그래밍

2.1 프로그램이란?

  • 문제를 해결하기 위해서 명령을 모아놓은 것을 말합니다.
  • 컴퓨터를 이용해서 우리 일상의 문제들을 해결할 수 있습니다.
  • 프로그램은 고대 그리스어에서 유래되었습니다. 미리 정해놓은 것이라는 뜻을 가지고 있습니다.
  • 방송 프로그램, 운동 프로그램처럼 일상 속에서도 프로그램이라는 말을 사용하고 있습니다.
  • 일상 속 여러 프로그램들처럼 미리 정해놓은 것을 순서대로 실행하는 것을 말합니다.
  • 코딩(coding)과 프로그래밍(programming)은 엄밀히 말하면 다르지만 혼용해서 많이 사용합니다.
  • 프로그래밍 언어란 컴퓨터가 알아듣는 언어를 말합니다. 세상에는 다양한 프로그래밍 언어가 있습니다.

2.2 프로그램의 기본 구조

  • 모든 프로그램은 순차, 선택, 반복 세 가지 기본 구조로 구성되어 있습니다.
    • 순차 : 정해진 순서대로 명령을 수행하는 것을 말합니다.
    • 선택 : 조건에 따라 흐름을 바꾸는 것을 말합니다.
    • 반복 : 같은 명령을 조건이나 횟수에 따라 반복하는 것을 말합니다.

3 왜 파이썬일까요?

3.1 쉽습니다

  • 문법이 쉽고 간결해서 배우고 사용하기 쉽습니다.
  • 코딩은 쉽지 않지만 파이썬은 다른 언어들보다는 비교적 쉽습니다.
  • 우리가 사용하는 영어와 유사하기 때문에 친숙한 느낌을 받을 수 있습니다.
  • 외국의 경우 파이썬을 입문 언어로 많이 사용합니다. 우리나라도 바뀌고 있는 추세입니다.
  • 범용 프로그래밍 언어라서 데이터 분석, 게임 개발, 보안 등 다방면에 사용이 가능합니다.
  • 아래는 자바라는 언어로 "Life is Short!"를 분리하고 출력하는 코드입니다.
public static void main(String[] args) {
    String msg = "Life is Short!";
        for(String m : msg.split(" "))
            System.out.println(m);
}
  • 아래는 파이썬으로 "Life is Short!"를 분리하고 출력하는 코드입니다.
msg = 'Life is Short!'
print(msg.split())
  • 같은 기능인데도 파이썬이 자바보다 간결한 것을 볼 수 있습니다.

3.2 많습니다

  • 파이썬을 사용하는 사람이 아주 많기 때문에 참고할 자료도 많습니다.
  • 스택오버플로우 (https://stackoverflow.com/) : 코딩계의 네이버 지식인이라 할 수 있습니다.
  • 질문도 엄청 많지만 답변은 이보다 훨씬 많습니다. 훑어보는 것만으로도 공부가 됩니다.
  • 파이썬의 모토 : "어떤 문제를 해결하는 가장 아름다운 방법이 있다."
  • 파이썬과 자주 비교되는 언어로 이 있는데 은 문제를 해결할 때 다양한 방법을 선호합니다.
>>> import this
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

3.3 빠릅니다

  • 실행속도가 빠르다는 것이 아니라 개발을 빠르게 할 수 있다는 말입니다.
  • 배우는데 걸리는 시간도 다른 언어에 비해 비교적 적게 드는 편입니다.
  • 제품을 구매했을 때 배터리가 포함되어 있어 따로 구매하거나 필요가 없는 경우가 있습니다.
  • 파이썬은 제공하는 라이브러리들이 많아서 구현할 필요 없이 바로 가져다 쓸 수 있습니다.
  • 보통 이런 라이브러리들은 충분히 검증이 되어있기 때문에 직접 만드는 것보다 성능이 좋습니다.

4 파이썬 시작하기

4.1 파이썬 설치하기

  • https://www.python.org/ → Downloads → 3.X 클릭
  • 더블클릭 후 Install Now 누르기 전에 ?Add Python? 3.6 to PATH 체크하고 Next
  • 본 강의는 3.6.0 버전을 기준으로 합니다. 가장 최신 버전을 사용해도 관계 없습니다.
  • 2.x 버전을 사용하면 미운코딩새끼의 예제가 정상적으로 동작하지 않을 수 있습니다.

4.2 IDLE

  • IDLE (Integrated Development and Learning Environment)
  • 초보자들이 처음 파이썬을 입문할 때 사용하기에 간편합니다.
  • 개발을 할때도 보조 도구로 사용하기 좋습니다.
  • 인터렉티브 셸 모드
    • 컴퓨터와 탁구를 치듯이 주고받을 수 있는 모드입니다.
    • 한번 명령어를 던지면 컴퓨터가 대답을 하는 형식입니다.
  • 에디터 모드
    • 여러 줄의 코드를 작성할 수 있는 모드입니다.

5 입력과 출력

5.1 출력하기

  • print()는 값을 출력해주는 함수입니다.
  • 입력한 메시지나 값을 출력합니다.
  • 문자나 숫자 등을 출력할 수 있습니다.
  • 쉼표(,)로 여러 값을 출력할 수 있습니다.
  • 괄호(()) 안의 값을 출력합니다.
>>> print()

>>> print('Hello world!')
Hello world!
>>> print(1)
1
>>> print([1, 2, 3])
[1, 2, 3]
  • 정확하게 print()를 입력해야 합니다. 잘못 입력하면 에러가 발생합니다.
>>> pritn()
Traceback (most recent call last):
  File "<pyshell#105>", line 1, in <module>
    pritn()
NameError: name 'pritn' is not defined
  • 컴퓨터는 개떡같이 말하면 찰떡같이 알아듣지 못합니다. 그냥 개떡같이 알아 듣습니다.
  • 이 때문에 컴퓨터가 알아들을 수 있도록 문법에 맞게 찰떡같이 말해줘야 합니다.
>>> print(1)
1
>>> print(1, 2, 3)
1 2 3
>>> print(1,2,3)
1 2 3
>>> print(123)
123
>>> print('python')
python
>>> print('My name is', 'Bob')
My name is Bob

5.2 입력하기

  • 실행 중 사용자의 입력을 받습니다.
  • 입력 값은 항상 문자열로 받아옵니다.
  • 프로그램에게 정보를 전달할 수 있습니다.
  • 괄호 안에 문자열을 넣으면 프롬프트의 역할을 수행합니다.
  • 입력 받은 값을 변수에 저장할 수 있습니다.
>>> name = input('What is your name?')
What is your name?

6 변수

6.1 변수

  • 변수에는 값을 할당할 수 있습니다.
  • 파이썬에서 =은 할당을 의미합니다.
  • 할당된 값은 변할 수 있습니다.
>>> my_int = 1
>>> my_str = 'Python'
>>> count = 1  # 1
>>> count = count + 1  # 2

6.2 변수의 이름

  • 아주 예전에는 메모리에 저장되어 있는 값을 불러오기 위해 번호를 사용했습니다.
  • 번호가 많아지면서 관리가 어려워지고 숫자 대신 이름을 붙이기 시작했습니다.
  • 변수의 이름은 다른 사람들과 함께 쓰기에 편한 이름으로 짓는 것이 좋습니다.
  • 혼자만이 아닌 모두가 이해할 수 있게 작성하는 것을 권장합니다.
  • 글자나 밑줄 문자(_)를 사용합니다.
  • 대문자와 소문자를 구분합니다.
>>> python = 1
>>> PYTHON = 2
  • 숫자로 시작하는 이름은 쓸 수 없습니다.
  • 띄어쓰기를 포함할 수 없습니다. 보통 띄어쓰기 대신 밑줄 문자(_)를 사용합니다.
  • 유니코드 방식을 사용하기 때문에 변수명으로 한글도 지원합니다.
  • 하지만 대부분의 경우 영어 변수명을 사용합니다.
>>> 파이썬 = 1
>>> 김왼손 = 20

7 프로그램의 기본재료

7.1 숫자형, 문자열, 불린

  • 숫자형 (Numeric)
    • 숫자로 이루어진 자료형입니다.
    • 정수나 실수 등을 다룰 수 있습니다.
    • 숫자끼리 연산도 가능합니다.
>>> my_int1 = 1
>>> my_int2 = -2
>>> my_int3 = 4096
>>> my_float1 = 1.0
>>> my_float2 = 2.0
>>> my_float3 = 3.14
  • 문자열 (String)
    • 문자나 문자들을 늘어놓은 것입니다.
    • 큰따옴표와 작은따옴표로 구분합니다.
    • 리스트와 함께 시퀀스 자료형입니다.
    • 작은따옴표(' ') 또는 큰따옴표(" ")로 구분합니다.
>>> my_str1 = 'a'
>>> my_str2 = '3.14'
>>> my_str3 = 'coding'
>>> my_str4 = "coding"
  • 불린 (Boolean)
    • 참(True)과 거짓(False)을 말합니다.
    • 비교나 논리연산자의 결과입니다.
>>> my_bool1 = True  # True
>>> my_bool2 = False  # False
>>> my_bool3 = 1 < 2  # True
>>> my_bool4 = 1 == 2  # False

7.2 리스트, 튜플, 딕셔너리

EmbedVideo received the bad id "/MxEOz1Lfylk" for the service "youtube".
  • 리스트 (List)
    • 여러 값을 함께 모아서 저장합니다.
    • 값을 변경할 수 있으며 순서가 있습니다.
>>> my_list = []  # []
>>> my_list.append(123)  # [123]
>>> my_list.append('abc') # [123, 'abc']
>>> my_list.append(True)  # [123, 'abc', True]
  • 튜플 (Tuple)
    • 여러 값을 함께 모아서 저장합니다.
    • 값을 변경할 수 없으며 순서가 있습니다.
>>> my_tuple1 = ()
>>> my_tuple2 = (1,)
>>> my_tuple3 = ('a', 'b', 'c')
>>> my_tuple4 = 3.14, 'Python', True
  • 딕셔너리 (Dictionary)
    • 관련된 정보를 서로 연관시켜 놓은 것입니다.
    • 키와 값의 쌍으로 이루어져 있습니다.
>>> my_dict = {}  # {}
>>> my_dict[1] = 'a'  # {1: 'a'}
>>> my_dict['b'] = 2  # {1: 'a', 'b': 2}
>>> my_dict['c'] = 'd'  # {1: 'a', 'b': 2, 'c': 'd'}

7.3 자료형 변환하기

  • 자료형끼리 변환할 수 있는 함수도 있습니다.
  • int(): 정수형으로 변환합니다.
>>> print(int(3.14))
3
  • float(): 실수형으로 변환합니다.
>>> print(float(3))
3.0
  • str(): 문자열로 변환합니다.
>>> print(str(3.0))
3.0
>>> print(type(str(3.0)))
<class 'str'>
  • list(): 리스트로 변환합니다.
>>> print(list('3.0'))
['3', '.', '0']

8 주석

  • 사람을 위한 설명을 메모합니다.
  • 코멘트(comment)라고도 합니다.
  • 컴퓨터는 주석을 무시합니다.
  • #을 사용합니다.
  • 지나치게 많거나 코드와 상관없는 주석은 오히려 방해가 될 수 있습니다.
>>> print('Hello Python!')  # 문자열을 출력합니다.
Hello Python!
>>> print(12345)  # 숫자를 출력합니다.
12345
>>> print(2 + 3)  # 계산결과를 출력합니다.
5

9 문자열

9.1 기본구조

  • 문자나 문자들을 나열한 것입니다.
  • 값을 변경할 수 없으며 순서가 있습니다.
  • 큰따옴표나 작은따옴표로 구분합니다.
>>> my_str = 'python'
>>> print(my_str)
python
>>> type(my_str)
<class 'str'>
  • 문자열 안에 큰따옴표나 작은따옴표를 넣고 싶을 때는 서로 다른 따옴표를 함께 씁니다.
>>> print("Let's go!")
>>> print('I said, "Hello!"')
  • 따옴표를 세 번씩 쓰면 여러 줄을 표현할 수 있습니다.
>>> my_str = """버스
지하철
택시
"""

9.2 문자열 포맷팅

  • % 연산자를 이용해 문자열에 숫자, 문자열 등을 대입합니다.
  • 문자열을 자유롭게 표현하는 방법입니다.
>>> print('My name is %s' % 'Tom')
My name is Tom
>>> print('x = %d, y = %d' % (1, 2))
x = 1, y = 2
>>> print('%d x %d = %d' % (2, 3, 2 * 3))
2 x 3 = 6
  • %d : 정수형 숫자를 대입할 수 있습니다.
>>> print('%d %d' % (1, 2))
1 2
  • %f : 실수형 숫자를 대입할 수 있습니다.
>>> print('%f' % 3.14)
3.14
  • %s : 문자열을 대입할 수 있습니다.
>>> print('%s' % 'coding')
coding

9.3 format()

  • 포맷팅을 수행하는 문자열의 메소드입니다.
  • 중괄호 { }를 이용해 값을 대입합니다.
  • 보다 파이썬스러운 방법입니다.
  • 순서도 지정할 수 있습니다.
>>> print('My name is %s' % 'Tom')
My name is Tom
>>> print('My name is {}'.format('Tom'))
My name is Tom
>>> print('{} x {} ={}'.format(2, 3, 2 * 3))
2 x 3 = 6
>>> print('{1} x {0} ={2}'.format(2, 3, 2 * 3))  # 괄호 안의 숫자는 순서를 지정
3 x 2 = 6

9.4 인덱싱

  • 위치(index)를 이용해 각 문자에 접근할 수 있습니다.
  • 'Python' : 0 = P, 1 = y, t = 2, h = 3, o = 4, n = 5
  • 위치는 0부터 시작합니다. 공백도 포함합니다.
>>> alphabet = 'abcde'
>>> print(alphabet[0])
a
>>> print(alphabet[3])
d
>>> print(alphabet[5])
Traceback (most recent call last):
  File "<pyshell#12>", line 1, in <module>
    print(alphabet[5])
IndexError: string index out of range

>>> my_name = '김왼손의 왼손코딩'
>>> my_name[3]

>>> my_name[8]

  • 음수를 인덱스로 사용할 수 있습니다.
  • 가장 뒤의 값을 -1부터 해서 거꾸로 세어갑니다.
>>> my_name = '김왼손의 왼손코딩'
>>> my_name[-1]

  • 리스트 자료형에서도 거의 비슷합니다.

9.5 슬라이싱

  • 문자열에서 여러 값을 한꺼번에 잘라옵니다.
  • 콜론(:)을 이용해 여러 값을 한꺼번에 가져올 수 있습니다.
  • 기존 문자열은 그대로 두고 복사해서 사용합니다.
>>> my_str = 'Hello Python!'
>>> print(my_str[0:1])
H
>>> print(my_str[0:2])
He
>>> print(my_str[3:7])
lo P

>>> my_name = '김왼손의 왼손코딩'
>>> print(my_name[5:7])
왼손
  • 앞이나 뒤 숫자를 생략할 수도 있습니다.
>>> my_name = '김왼손의 왼손코딩'
>>> my_name[:2]
김왼
>>> my_name[7:]
코딩

9.6 메서드

  • 특정한 기능을 수행하기 위한 코드를 모아두고 이름을 붙인 것을 함수라고 합니다.
  • 메서드는 특정 객체만 사용할 수 있는 함수를 말합니다.
  • string.split(): 문자열을 공백 기준으로 분리합니다.
>>> fruit_str = 'apple banana lemon'
>>> fruits = fruit_str.split()
>>> print(fruits[0])
apple
>>> print(fruits[1])
banana

>>> my_name = '김왼손의 왼손코딩'
>>> print(my_name.split())
['김왼손의', '왼손코딩']

9.7 독스트링

  • 문서화 문자열(Documentation string)입니다.
  • 함수가 어떤 일을 수행하는지 설명합니다.
  • 보통 큰따옴표 세 개를 사용합니다.
def 함수이름(인자1, ...):
    """함수에 대한 설명"""
    실행할 명령1
    실행할 명령2
    ...
    return 결과

9.8 end

  • print() 함수에서 출력의 끝을 지정합니다.
  • 파이썬에서는 줄 바꿈(\n)이 기본 값입니다.
>>> print(' ', end='')

>>> print('집단지성', end='/')
집단지성/
>>> print('집단지성', end='미운코딩새끼')
집단지성미운코딩새끼

9.9 이스케이프 코드

  • 특정한 기능을 수행하는 문자의 조합입니다.
  • 문자열에 포함해서 사용할 수 있습니다.
  • 키보드에서 백슬래쉬와 원화는 같은 키입니다.
  • \n : 개행, 줄 바꿈
>>> print('미운코딩새끼의 집단지성들')
미운코딩새끼의 집단지성들
>>> print('미운코딩새끼의\n집단지성들')
미운코딩새끼의
집단지성들
  • \t : 탭(tab)
>>> print('미운', end='\t'); print('코딩')
미운    코딩

10 리스트

10.1 기본구조

  • 여러 값을 한꺼번에 모을 수 있습니다.
  • 값들은 변경할 수 있고 순서가 있습니다.
    • 가변(mutable) : 값을 변경할 수 있습니다. 리스트, 딕셔너리 등이 해당됩니다.
    • 불변(immutable) : 값을 변경할 수 없습니다. 문자열, 튜플 등이 해당됩니다.
  • 빈 리스트 만들기
>>> my_list = []
[]
>>> type(my_list)
<class 'list'>
  • 값을 가지고 있는 리스트 만들기
>>> my_list = [1, 2, 3]
>>> print(my_list)
[1, 2, 3]

10.2 값 추가하기

  • list.append()를 사용해서 값을 추가할 수 있습니다.
>>> students = ['Tom', 'Alice', 'Sally']
>>> students.append('Betty')
>>> students.append('Angela')
>>> print(students)
['Tom', 'Alice', 'Sally', 'Betty', 'Angela']
  • 리스트는 그릇과 같습니다. 그릇이 없는 상태에서 식재료를 쏟을 수 없습니다.
  • 리스트가 없는 상태로 append()를 이용해 값을 추가할 수 없습니다.
>>> humans.append('David')
Traceback (most recent call last):
  File "<pyshell#16>", line 1, in <module>
    humans.append('David')
NameError: name 'humans' is not defined

10.3 인덱싱

  • 인덱싱, 슬라이싱은 문자열과 상당히 유사합니다.
  • 위치를 이용해서 값에 접근하는 것을 인덱싱이라고 합니다.
>>> animals = ['코알라', '하이에나', '바다소', '땅다람쥐', '바다코끼리', '스컹크', '아나콘다']
>>> print(animals[1])
['하이에나']

10.4 값 제거하기

  • del : 리스트의 값을 제거합니다.
>>> animals = ['코알라', '하이에나', '바다소', '땅다람쥐', '바다코끼리', '스컹크', '아나콘다']
>>> print(animals[4])
'바다코끼리'
>>> del animals[4]  # 4번째 값 삭제
>>> print(animals)
['코알라', '하이에나', '바다소', '땅다람쥐', '스컹크', '아나콘다']

10.5 슬라이싱

  • 리스트에서 여러 값을 한꺼번에 잘라옵니다.
  • 콜론(:)을 이용해 여러 값을 한꺼번에 가져올 수 있습니다.
  • 기존 리스트는 그대로 두고 복사해서 사용합니다.
>>> animals = ['코알라', '하이에나', '바다소', '땅다람쥐', '바다코끼리', '스컹크', '아나콘다']
>>> print(animals[1:3])
['하이에나', '바다소']

10.6 메서드

  • 리스트도 다양한 메서드가 있습니다.
  • 외우는 건 중요하지 않습니다. 필요할 때 검색해서 사용할 수 있으면 됩니다.
  • list.sort(): 리스트 안의 값을 정렬합니다.
>>> animals =['코알라', '하이에나', '바다소', '땅다람쥐', '바다코끼리', '스컹크', '아나콘다']
>>> animals.sort()
>>> print(animals)
['땅다람쥐', '바다소', '바다코끼리', '스컹크', '아나콘다', '코알라', '하이에나']
  • list.count(): 해당 값의 개수를 셉니다.
>>> animals =['코알라', '하이에나', '바다소', '땅다람쥐', '바다코끼리', '스컹크', '아나콘다']
>>> print(animals.count('바다소'))
1
  • 리스트의 메서드에 대해서 더 알고 싶다면 구글에 검색해보세요.

11 튜플

11.1 기본구조

  • 리스트와 거의 유사합니다.
  • 여러 값을 한꺼번에 모을 수 있습니다.
  • 값을 변경할 수 없다는 점이 리스트와 다릅니다.
  • 튜플은 괄호를 쓰지 않아도 됩니다.
>>> my_tuple = (1, 2, 3)
>>> type(my_tuple)
<class 'tuple'>
>>> my_tuple = 1, 2, 3
>>> type(my_tuple)
<class 'tuple'>

11.2 패킹, 언패킹

  • 패킹(Packing) : 여러 개의 값을 한꺼번에 묶는 것을 말합니다.
  • 언패킹(Unpacking) : 묶여 있는 값을 풀어놓는 것을 말합니다.
>>> my_tuple = (1, 2, 3)
>>> num1, num2, num3 = my_tuple
>>> print(num1)
1
>>> print(num2)
2
  • 두 변수의 값을 서로 바꿀 때도 사용할 수 있습니다.
>>> num1 = 1
>>> num2 = 2
>>> num1, num2 = num2, num1
>>> print(num1)
2
>>> print(num2)
1

12 for

12.1 반복문

  • 반복되는 지루한 작업을 처리하기 위해 사용합니다.
  • 파이썬에는 for와 while 두 가지 반복문이 있습니다.
  • for는 횟수를 기준으로, while은 조건을 기준으로 반복합니다.

12.2 기본구조

for 변수 in 컨테이너:
    실행할 명령1
    실행할 명령2
    ...
  • 컨테이너 안의 값을 전부 순회할 때까지 반복합니다.
  • 반복하는 부분을 코드블럭이라고 합니다.
  • 코드블럭을 구분하기 위해 콜론(:)과 들여쓰기를 사용합니다.
animals = [땅다람쥐, 바다코끼리, 스컹크, 아나콘다, 코알라, 하이에나, 바다소]
for animal in animals:
    print(animal)

땅다람쥐
바다코끼리
스컹크
아나콘다
코알라
하이에나
바다소

for num in [1, 2, 3]:
    print(num)

1
2
3

for ch in '김왼손':
    print(ch)




12.3 들여쓰기

  • 파이썬에서는 들여쓰기가 선택이 아닌 필수입니다.
  • 띄어쓰기의 종류는 하나로 통일해야 합니다.
  • 보통 4칸 띄어쓰기를 권장합니다.

12.4 range()

  • for와 함께 자주 사용되는 내장함수입니다.
  • range(stop)은 0부터 stop 전까지의 숫자를 나열합니다.
  • range(start, strop)는 start부터 stop 전까지의 숫자를 나열합니다.
for n in range(3):
    print(n)

0
1
2

for n in range(4, 6):
    print(n)

4
5

12.5 for x 2

  • 반복문을 중첩해서 사용할 수 있습니다.
  • 아래는 for를 이용해 구구단 2단을 출력하는 예제입니다.
for i in range(1, 10):
    print('{}x{}={}'.format(2, i, 2 * 1))
  • for를 중첩해서 사용하면 2단부터 9단까지 모두 출력할 수도 있습니다.
for j in range(2, 10):
    for i in range(1, 10):
        print('{}x{}={}'.format(j, i, j * i))

12.6 컴프리헨션

  • 리스트를 만드는 강력하고 간결한 방법입니다.
  • 초보자에게는 쉽지 않지만 많이 사용됩니다.
  • 주어진 리스트에서 홀수만 뽑아내는 코드를 작성해봅시다.
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
odd_numbers = []

for number in numbers:
    if number % 2 == 1:  # 2로 나눴을 때 1이 남으면 홀수입니다.
        odd_numbers.append(number)

print(odd_numbers)
  • 다음은 컴프리헨션을 이용한 방법입니다.
>>> odd_numbers = [number for number in numbers if number % 2 == 1]

13 연산자

13.1 할당

  • 수학에서 =는 같다는 뜻입니다.
  • 파이썬에서 =은 할당 연산자입니다.
  • 오른쪽의 값을 왼쪽의 변수에 할당합니다.
>>> my_int = 1
>>> my_float = 2.0
>>> my_list = []
  • +=와 같은 것들을 복합 할당 연산자라고 합니다.
>>> count = 0
>>> count = count + 1
>>> print(count)
1
>>> count += 1  # count = count + 1과 같습니다.
>>> print(count)
2

13.2 산술

  • 숫자끼리 연산을 할 수 있게 합니다.
  • 아래와 같이 더하기, 빼기, 곱하기, 나누기를 할 수 있습니다.
>>> print(3 + 3)
6
>>> print(20 - 5)
15
>>> print(6 * 2)
12
>>> print(12 / 3)
4.0
  • 아래는 특수 연산자입니다.
>>> print(3 ** 2)  # 3의 2제곱
9
>>> print(4 ** 3)  # 4의 3제곱
64
>>> print(7 / 3)  # 7 나누기 3
2.3333333333333335
>>> print(7 // 3)  # 7 나누기 3의 몫
2
>>> print(7 % 3)  # 7 나누기 3의 나머지
1


  • %의 경우에는 홀수, 짝수의 구분 등에 사용될 수 있습니다.
  • 아래 코드는 %를 이용해 홀짝 구분을 하는 코드입니다.
numbers = [1, 2, 3, 4, 5, 6, 7]
for number in numbers:
    if number % 2 == 1:
        print(number, ': 홀수')
    else:
        print(number, ': 짝수')

1 : 홀수
2 : 짝수
3 : 홀수
4 : 짝수
5 : 홀수
6 : 짝수
7 : 홀수

13.3 문자열

  • 문자열에도 연산자가 있습니다.
  • + : 문자열끼리 연결합니다.
>>> print('김왼손'+ 'X' + '집단지성들')
김왼손X집단지성들
>>> print('안녕하세요' + ' ' + '반갑습니다')
안녕하세요 반갑습니다
  • * : 문자열을 곱한 수만큼 반복합니다.
>>> print('안녕' * 3)
안녕안녕안녕
>>> print('안녕 ' * 5)
안녕 안녕 안녕 안녕 안녕

13.4 비교

  • 비교연산자는 말 그대로 비교를 하는 것입니다.
  • 비교의 결과는 불린(True, False)입니다.
  • == : 왼쪽과 오른쪽이 같은 지
  • != : 왼쪽과 오른쪽이 다른 지
  • > : 왼쪽이 더 큰 지
  • < : 오른쪽이 더 큰 지
  • >= : 왼쪽이 더 크거나 같은 지
  • <= : 오른쪽이 더 크거나 같은 지
>>> print(1 < 2)
True
>>> print(1 > 2)
False
>>> print(1 == 1)
True
>>> print(1 != 1)
False
>>> print(4 <= 6)
True
>>> print(5 <= 5)
True

13.5 논리

  • 파이썬의 논리 연산자에는 and, or, not이 있습니다.
  • and : 둘 다 True일 때에만 True
  • or : 한 쪽이라도 True이면 True
  • not : True이면 False, False이면 True
>>> print(True)
True
>>> print(False)
False

>>> print(True and True)
True
>>> print(True and False)
False
>>> print(False and True)
False
>>> print(False and False)
False

>>> print(True or True)
True
>>> print(True or False)
True
>>> print(False or True)
True
>>> print(False or False)
False

>>> print(not False)
True
>>> print(not True)
False
  • 놀이동산의 청룡 열차를 타기 위해서는 키와 나이 제한이 있다고 생각해봅시다.
  • 키가 140cm 이상이면서 나이도 10살 이상이어야 청룡 열차를 탈 수 있다고 합니다.
  • 일단 키도 120cm 이하면서 나이가 8살이면 결과는 어떻게 될까요?
  • 키와 나이 조건 모두 False이기 때문에 결과는 False입니다.
>>> my_height = 120
>>> my_age = 8
>>> print(my_height > 140 and my_age > 10)
False
  • 키가 190cm이면서 나이가 9살이면 어떨까요?
  • 키 조건은 True이지만 나이 조건은 False이므로 결과는 False입니다.
>>> my_height = 190
>>> my_age = 9
>>> print(my_height  > 140 and my_age > 10)
False
  • 키가 150cm이면서 나이가 32살이면 어떨까요?
  • 키와 나이 조건 모두 True이므로 결과는 True입니다.
>>> my_height = 150
>>> my_age = 32
>>> print(my_height > 140 and my_age > 10)
True

13.6 멤버쉽

  • 리스트, 튜플 등의 안에 해당하는 값이 있는 지 확인합니다.
  • in, not in 키워드를 사용합니다.
>>> fruits = ['사과', '딸기', '망고', '브로콜리', '바나나']
>>> print(fruits)
['사과', '딸기', '망고', '브로콜리', '바나나']
>>> print('딸기' in fruits)
True
>>> print('딸기' not in fruits)
False
>>> print('상추' in fruits)
False
>>> print('상추' not in fruits)
True

14 조건문

14.1 if

if 조건:
    실행할 명령1
    실행할 명령2
    ...
  • 조건이 참인지 거짓인지 판단합니다.
  • 조건에 따라 처리의 흐름을 바꿉니다.
  • if 키워드를 사용합니다.
    • 참일 경우 코드블럭을 실행합니다.
    • 거짓일 경우 코드블럭을 넘어갑니다.
name = 'Edwin'
if name == 'Edwin':
    print('당신이 Edwin이군요.')
    print('만나서 반가워요 Edwin.')

당신이 Edwin이군요.
만나서 반가워요 Edwin

14.2 else, elif

if 조건:
    실행할 명령1
    실행할 명령2
else:
    실행할 명령3
    실행할 명령4
  • if와 함께 사용할 수 있는 친구들입니다.
  • else: 이전의 if나 elif가 모두 거짓일 경우 else로 넘어갑니다.
name = 'Bob'
if name == 'Alice':
    print('당신이 Ailce이군요.')
else:
    print('아니 당신은!?')

아니 당신은!?
  • elif : 이전의 if나 elif가 거짓일 경우 elif의 조건문으로 넘어갑니다.
if 조건:
    실행할 명령1
    실행할 명령2
elif 조건:
    실행할 명령3
    실행할 명령4
name = 'Bob'
if name == 'Alice':
    print('당신이 Ailce이군요.')
elif name == 'Bob':
    print('당신이 Bob이군요.')
else:
    print('아니 당신은!?')

당신이 Bob이군요.

15 while

15.1 기본구조

while 조건:
	실행할 문장 1
	실행할 문장 2
	...
  • 반복문은 반복되는 지루한 작업을 처리합니다.
  • 코드의 양이 줄어들고 읽기 쉬워집니다.
  • while은 조건을 기준으로 반복합니다.
count = 0
whlie count < 3:
    print('횟수: ', count)
    count += 1

횟수: 0
횟수: 1
횟수: 2

15.2 continue, break

  • continue : 다시 조건으로 돌아갑니다.
  • break : 반복문을 끝내 버립니다.
count = 0
while count < 10:
    count += 1
    if count < 4:
        continue
    if count == 8:
        break

16 딕셔너리

16.1 기본구조

{key1: value1, key2: value2, key3: value3 ...}
  • 딕셔너리를 말 그대로 해석하면 사전입니다.
  • 딕셔너리는 키(key)와 값(value)을 쌍으로 갖는 자료형입니다.
  • 리스트와의 차이점은 관련된 정보를 연관시킨다는 것입니다.
  • 리스트는 값을 다루기 위해 인덱스를 사용하지만 딕셔너리는 키를 사용합니다.
>>> my_dict = {}  # {}
>>> my_dict[1] = 'a'  # {1: 'a'}
>>> my_dict['b'] = 2  # {1: 'a', 'b': 2}
>>> my_dict['c'] = 'd'  # {1: 'a', 'b': 2, 'c': 'd'}

16.2 값 추가하기

  • 딕셔너리는 아래와 같은 방법으로 값을 추가합니다.
>>> my_dict['학생1'] = 'Tom'
>>> print(my_dict)
{'학생1': 'Tom'}
>>> my_dict['학생2'] = 'Sally'
>>> my_dict['학생3'] = 'Betty'
>>> my_dict['학생4'] = 'Angela'
{'학생1': 'Tom', '학생2': 'Sally', '학생3': 'Betty', '학생4': 'Angela'}

16.3 값 제거하기

  • del을 이용해 키, 값 쌍을 제거합니다.
>>> my_dict = {'학생1': 'Tom', '학생2': 'Sally', '학생3': 'Betty', '학생4': 'Angela'}
>>> del my_dict['학생4']
>>> print(my_dict)
{'학생1': 'Tom', '학생2': 'Sally', '학생3': 'Betty'}

16.4 메서드

  • 메서드는 특정 객체만 사용할 수 있는 함수를 말합니다.
  • dict.values(): 딕셔너리에서 값만 뽑아 돌려줍니다.
students = {'학생1': 'Tom', '학생2': 'Sally', '학생3': 'Betty'}
for student in students.values():
    print(student)

Tom
Sally
Betty
  • dict.keys(): 딕셔너리에서 키만 뽑아 돌려줍니다.
students = {'학생1': 'Tom', '학생2': 'Sally', '학생3': 'Betty'}
for key in students.keys():
    print(key)

학생1
학생2
학생3
  • dict.items(): 딕셔너리에서 키와 값 쌍을 뽑아 돌려줍니다.
students = {'학생1': 'Tom', '학생2': 'Sally', '학생3': 'Betty'}
for key, val in students.items():
    print(key, val)

학생1 Tom
학생2 Sally
학생3 Betty

17 함수

17.1 기본구조

  • 수학에도 함수가 있고, 엑셀에도 함수가 있습니다.
  • 우리가 사용해왔던 print(), input() 등도 모두 함수입니다.
  • 반복되는 코드에 이름을 붙여서 다시 사용할 수 있게 합니다.
  • 필요할 때 함수의 이름을 불러서 사용할 수 있습니다.
  • 통나무가 마술모자에 들어가면 마술빗자루가 나옵니다.
  • 이와 유사하게 입력 값이 함수에 들어가면 출력 값이 나옵니다.
def 함수이름(인자1, ...):
    실행할 명령1
    실행할 명령2
    ...
    return 결과
  • 함수에게 전달하는 값을 인자 혹은 매개변수라고 합니다.
  • 굳이 따지자면 다른 용어이지만 보통 혼용해서 사용합니다.
  • 함수에게 받아오는 값을 리턴 값, 반환 값, 결과 값이라고 합니다.
  • 마치 내가 함수와 함께 캐치볼을 하는 것과 같습니다.
  • 인자와 결과 값은 있을 수도 있고 없을 수도 있습니다.

17.2 함수의 종류

  • 내장 함수: 파이썬에서 기본으로 제공하는 함수입니다.
  • 모듈의 함수: 모듈에 포함되어 있는 함수입니다.
  • 사용자 정의 함수: 사용자가 직접 정의한 함수입니다.
  • 일반적인 함수
def 함수이름(인자1, ...):
    실행할 명령1
    실행할 명령2
    ...
    return 결과
  • 결과 값이 없는 함수
def sum(a, b): 
     print('%d, %d의 합은 %d입니다.' % (a, b, a+b))
  • 입력 값도, 결과 값도 없는 함수
def say(): 
     print('Hi')

17.3 여러 개 돌려받기

  • 콤마(,)를 사용해서 여러 개의 값을 돌려받을 수 있습니다.
  • 여러 개를 돌려줄 때는 하나의 튜플로 묶어서 전달합니다.
def add_mul(num1, num2):
    return num1 + num2, num1 * num2

my_add, my_mul = add_mul(1, 2)  # 3, 2

17.4 함수를 사용하는 이유

  • 다시 사용할 수 있습니다.
  • 코드를 관리하기 쉬워집니다.
  • 조립해서 사용할 수 있습니다.

18 모듈

18.1 기본구조

  • 비슷한 기능의 함수들을 모아둔 파일입니다.
  • 직접 만들 수도 있고 가져와서 사용할 수도 있습니다.
  • import 키워드로 모듈을 가져옵니다.
  • 마침표(.)를 이용해 함수를 사용합니다.
import 모듈이름
  • 제품을 구매했을 때 배터리가 포함되어 있어 따로 구매할 필요가 없는 경우가 있습니다.
  • 파이썬은 제공하는 라이브러리들이 많아서 구현할 필요 없이 바로 가져다 쓸 수 있습니다.
  • 보통 이런 라이브러리들은 충분히 검증이 되어있기 때문에 직접 만드는 것보다 성능이 좋습니다.

18.2 random

  • 난수를 만들거나 무작위와 관련된 함수를 포함합니다.
  • random.choice(): 리스트의 값 중 하나를 랜덤하게 선택합니다.
>>> import random
>>> students = ['Tom', 'Sally', 'Betty', 'Eric', 'Angela', 'Stephany'] 
>>> print(random.choice(students))
Betty
>>> print(random.choice(students))
Eric
>>> print(random.choice(students))
Tom
  • random.sample(): 리스트의 값 중에서 지정한 개수만큼 랜덤하게 선택합니다.
import random
fruits = ['apple', 'banana', 'lemon']
my_fruit = random.sample(fruits, 2)
print(my_fruit) # ['apple', 'banana'] or ['banana', 'lemon'] or ...
  • random.randint(): 특정 범위의 정수 중 하나를 랜덤하게 선택합니다.
import random
my_int = random.randint(0, 10)
print(my_int)  # 0~10

19 객체

  • 현실의 물건, 물체, 사물을 컴퓨터 안에 재현하는 것입니다.
  • 함수와 데이터를 한꺼번에 묶어둔 것을 말합니다.
  • 파이썬에서는 대부분의 것들이 객체입니다.
  • 통기타 객체
    • 데이터: 이름, 색깔, 종류
    • 함수: 핑거스타일로 연주하기, 스트럼으로 연주하기
  • 게임 속 용사 객체
    • 데이터: 성별, 이름, 레벨
    • 함수: 앞으로 가기, 때리기, 점프 뛰기
  • http://pythontutor.com/

20 코딩 스타일

20.1 PEP8

  • 코드를 작성하다 보면 나보다 다른 사람들이 보는 경우가 더 많습니다.
  • 일관된 기준을 가지고 코드를 작성하면 다른 사람들과의 협업에 도움이 됩니다.
  • PEP8은 파이썬 제작자인 귀도 반 로썸이 제안하는 코딩 스타일 가이드입니다.
  • 코드를 일관성 있게 작성할 수 있게 하는 기준이자 약속입니다.
  • 하지만 무리하게 일관성을 지키는 것은 별로 현명한 행동이 아닙니다.

21 구글링 방법

  • 프로그래밍을 하다 보면 검색을 해야 할 경우가 많습니다.
  • 구글링이란 필요한 정보를 구글에서 검색하는 것을 말합니다.
  • 영어로 된 자료가 훨씬 많지만 입문자는 한국어 자료로도 충분합니다.
  • 구글링으로 모듈을 검색해 오늘 날짜를 구하는 코드를 작성해보세요.
>>> import datetime
>>> datetime.datetime.now()
datetime.datetime(2017, 9, 20, 22, 48, 1, 48263)
>>> print(datetime.datetime.now())
2017-09-20 22:48:19.225368

22 강의 외 내용

22.1 파이썬이란?

1989년 12월 귀도 반 로섬은 크리스마스 이브를 의미 있게 보내기 위해 취미로 인터프리터 언어를 만들기로 결심하였다. 그는 ABC 라는 프로그래밍 언어를 주로 사용하였는데 ABC 프로그래밍 언어의 장점은 그대로 살리고 단점은 제거 함을 시작으로 1990년 파이썬이 만들어졌다. 파이썬은 우리나라를 비롯한 동아시아 지역에서는 아직 대중적으로 사용되지 않지만 서양에서는 교육을 비롯해 많은 곳에서 사용되고 있다. 파이썬은 구글이 애용하는 언어 중 하나로 컴퓨터에서 쉽게 사용될 수 있는 언어이다. 파이썬은 다른 언어들에 비해서 쉽고 배우기도 편해서 요즈음 핫한 언어로 떠오르고 있다. 하지만 파이썬은 다른 언어에 비해 실행 속도가 빠른 앱을 만들기 어렵고 복잡한 명령어는 수행하기 어려워 빠른 속도가 필요한 앱에는 사용되지 않고 있다. 그래도 파이썬을 먼저 배우면 다른 언어를 배우기 쉬운 만큼 지금 먼저 같이 배우기를 추천한다.(프로그래밍 경험이 없는 사람도 같이 즐길 수 있다!)

22.2 귀도 반 로섬은 누구인가?

귀도 반 로섬 (Guiido van Rossum)은 네덜란드 출신의 컴퓨터 프로그래머이며, 프로그래밍 언어인 파이썬을 개발했다. 로섬은 2005년부터 2012년까지 구글에서 일했으며, 2013년부터 구글에서 퇴사해 현재까지 드롭박스에서 일하고 있다. 귀도 반 로섬은 Stichting Mathematisch Centrum (CWI)에서 일하면서 1986년에 BSD Unix에 glob () 루틴을 작성하고 기고했다. 또한 로섬은 ABC 프로그래밍 언어의 개발에 참여했으며, 나중에 a,b,c언어는 파이썬을 제작할 때 쓰였다.

22.3 이 책을 읽는 방법

요즈음 시대는 단순히 암기하는 시대가 아니다. 이러한 명령문이 있다는 것을 알고 다시 활용하거나 구글에 검색할 수 있게 되면 이 강의는 많은 도움이 될 것이다. 그래서 모든 내용을 외우려 하지 마시고 편안한 마음으로 봐주시면 좋겠다. 왜 구글으로 검색해야 하나? 구글은 네이버보다 코딩 관련 자료가 훨씬 많다. 구글에는 다양한 문제 예시와 강의들이 있어 검색하기 편하다.

22.4 삼항연산자

  • if문을 이용해 변수의 값을 선택할 때, 보통 우리는 이렇게 한다
  • a, b 두 값중 더 큰 값을 넣을 때
>>> a, b = 1, 2
>>> if a > b:
... 	print(a, end="")
... else:
... 	print(b, end="")
2
# 더 큰 값을 출력하는 if-else문이다.
  • 하지만, 우리가 코딩을 하다 보면, 이렇게 긴 문장을 쓰면 근처에 있는 방대한 양의 if문과 겹쳐저, 잘 안 보일 수도 있고,
  • 어쨌든! 삼항연산자라는것은 if-else문을 한 줄로 줄인 것이다.
>>> a, b = 1, 2
>>> print(a if a > b else b)
2
  • 아니!? 무려 2가 출력되었다!
  • "값1 if 조건 else 값2" 는 '조건'이 True일 때는 값1을 출력하고, False일 때에는 값2를 출력한다.

22.5 예외 처리

try:
    ...
except [발생 오류[as 오류 메시지 변수]]:
    ...

a = [1, 2, 3, 4]
b = [0, 'a', 1, 2]
i = 0

while i < len(a):
   try:
      print a[i] / b[i]
   except TypeError:
      print "분모는 숫자여야 합니다."
   except ZeroDivisionError:
      print "0 으로는 나눌 수 없습니다."
   i = i + 1

0으로는 나눌  없습니다.
분모는 숫자여야 합니다.
3
2

22.6 랜덤

  • 많이 쓰이는 함수에는 이런 것들이 있다.
    • random.random()
      • 0에서 1까지의 실수를 출력하는 함수.
    • random.randint(a, b)
      • a에서 b까지의 정수를 출력하는 함수.
    • random.shuffle(list)
      • list를 섞는 함수.
    • random.choice(list)
      • list에서 아무거나 하나를 선택한다.
>>> import random
>>> print(random.random())
0.20928967330889192
>>> print(random.randint(0, 100))
47
>>> my_list = [i * 2 for i in range(9)]
>>> random.shuffle(my_list)
>>> print(my_list)
[10, 8, 0, 14, 4, 6, 2, 12, 16]
>>> print(random.choice(my_list))
4
  • 으아니?! 여기는 이렇게 나오지만, 당신은 이렇게 나오지 않았을지도 모른다.
  • 이렇게, 예시에서의 출력과 자신의 출력이 다른 이유는, random이란, 난수를 출력하는 함수이기 때문이다.

23 무편집영상

1주차
2주차
3주차
4주차

24 기타 사이트

25 문서 정보

미운코딩새끼

  • 제 1판 1쇄 펴낸 날 2017년 9월 7일
  • 지은이 : 김왼손과 집단지성들
  • 펴낸곳 : 왼손코딩 유튜브 (https://goo.gl/xHi84G)
  • 제작기간 : 2017년 9월 7일~
  • 이 문서가 만들어지는데 큰 도움을 주신 조희진님, 훌륭한 강의를 해주신 김왼손님께 감사합니다. -제작자 일동-

26 같이 보기