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

잔글 (봇: 자동으로 텍스트 교체 (-source +syntaxhighlight))
 
(사용자 33명의 중간 판 381개는 보이지 않습니다)
1번째 줄: 1번째 줄:
{{보호-훼손}}
==미운코딩새끼==
{{youtube|c2mpe9Xcp0I}}


==김왼손과 집단지성들==
대학 새내기 시절 코딩이 너무 어려웠습니다. 잘해보려 아등바등 노력해 봤지만 매번 실패하다가 결국 미워하게 돼버렸습니다. 지금 돌아보면 그렇게 미워할 정도는 아니었는데 말이죠. 지금도 같은 고민을 하는 분들이 많을 거라고 생각합니다. 그 때 그 시절 이런 강의가 있었으면 어땠을까 하는 마음으로 미운코딩새끼를 만들었습니다.
* '''김왼손과 집단지성들'''은 잉끼유튜버 [[김왼손]]과 그 열혈 구독자들이 함께하는 코딩계의 아이돌 그룹입니다.  
* 정규 1집 '''미운코딩새끼'''는 같은 이름의 파이썬 강의 "미운코딩새끼"의 내용과 구독자들이 추가한 내용으로 구성되어 있습니다. "미운코딩새끼"는 남녀노소 상관없이 누구나 기여할 수 있습니다. 여러분도 지금 참여해보세요.  


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


*생방송 중 정리 TIP '''"치고빠지기"'''
인스타그램 김왼손([https://www.instagram.com/lefty_khim/ @lefty_khim])을 팔로우하세요!
**step1 . 메모장에 열심히 정리한다.
**step2 . 정리한것 Ctrl+ a, Ctrl+ c 한다
**step3 . 원하는 곳 [편집] 누른다.
**step4 . '편집'창에서 원하는 부분에 Ctrl + V
**step5 . 하단 [변경 사항 저장] 누른다.


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


* [[김왼손]]의 왼손코딩: https://goo.gl/xHi84G
* 미운코딩새끼 모아보기: https://goo.gl/r6bYSk
* 위키독스 완성본 : https://wikidocs.net/book/1421


* 아래는 현재까지 '''미운코딩새끼'''에 기여해 주신 분들입니다. 감사합니다.
===김왼손과 집단지성들===
 
[[김왼손]]과 집단지성들은 잉끼유튜버 [[김왼손]]과 그 열혈 구독자들이 함께하는 코딩계의 아이돌 그룹입니다. 정규 1집 미운코딩새끼에 참여해 주신 분들은 아래에 기록을 꼭 남겨주세요. 참여해 주신 모든 여러분들께 감사드립니다.
** 김왼손 : 김왼손과 집단지성들에서 김왼손을 맡고있음
* 김레이 (leykim0907@naver.com) : 딕셔너리 부분 편집
** 켈리(Kelly)(rnrmf3apdlf@gmail.com) : List, Tuple 등 요약
* 켈리(Kelly) (rnrmf3apdlf@gmail.com) : list, tuple 등 요약
** MANGO 망고 (mingyu041209@naver.com) : 디자인 다듬기, 귀도 반 로섬 제작
* MANGO 망고 (mingyu041209@naver.com) : 전체적인 디자인 다듬기
** 이프리트 (adbdcd123@naver.com)
* 요거트 (changeunp04@gmail.com) : 전체적인 내용 편집
** 요거트 (changeunp04@gmail.com) : 아무것도 안한것 같은 나
* H2SO4
** 묘인봉
* 이에스 (hubolab10@gmail.com) : 파이썬이란, 이 책을 읽는 방법 제작 및 보기 좋게 다듬기
** pro memoria
* JW호박 pumkin (pjwbrain@naver.com) : 기본 내용들의 부족한 부분 보충
** H2SO4
* Meta27-익명의 거북 (leeyoungmin2788@gmail.com) : 약간의 수정, 조건문, IDLE 커스텀, While문, 문자열
** 이에스 (hubolab10@gmail.com) : '파이썬이란', '이 책을 읽는 방법' 제작
* 토미유튜브 (tjdwn1416@gmail.com) : 무한루프 내용 추가
** JW호박 pumkin (pjwbrain@naver.com) : 조금의 요약 + 홍보
* 김씨가족 (wearekimsfamily@gmail.com) : 수정 및 추가, 소소한 부분 정리
** Meta27-익명의 거북 (leeyoungmin2788@gmail.com) : 약간의 수정, 조건문, IDLE 커스텀, While문 , 문자열 등에 기여
* 스치 (junhg0211@gmail.com)
** 김레이 (leykim0907@naver.com)
* 류도영 (ryudo1023@gmail.com) : 사소한 내용 고침
** 토미유튜브 Tommy Youtube (tjdwn1416@gmail.com) : 그룹의 막내와 무한루프 내용 추가
* 호옹 (v1000401@gmail.com) : 사소한 내용 고침
** JY HAN (jyhan35@gmail.com)
* 문용석 (weedss9@naver.com) : 귀도 반 로섬은 누구인가? 제목 제작, 미운코딩새끼 요약 다듬기, 파이썬이란? 일부분 수정
** 김씨가족 (wearekimsfamily@gmail.com) : 수정 및 추가, 소소한 부분 정리
* 불탄고등어 : 사소한 내용 고침
** 겜맨 (yun040803@naver.com)
* 이다은(Danna) (daeunlee0720@gmail.com) : 사소한 내용 고침, 맞춤법/띄어쓰기 오류 수정
** 신준혁 (mrchunchu@naver.com)
* 몹쓸 프포자(thekeaon0509@naver.com)
** 불탄고등어 (loveleftst@gmail.com) : 다시 센터 할게욤!
* mn스토브(ministove3yo@gmail.com) : 맞춤법 수정
** 스치 (junhg0211@gmail.com) [[사용자:Junhg0211]]
** 류도영(ryudo1023@gmail.com)
** 호옹(v1000401@gmail.com) : 치고빠짐
** 문용석 (weedss9@naver.com) : '귀도 반 로섬은 누구인가?' 제목 제작, '미운코딩새끼' 요약 다듬기, '파이썬이란?' 일부분 수정.
 
==[[파이썬]]이란?==
1989년 12월 [[귀도 반 로섬]]은 크리스마스 이브를 의미 있게 보내기 위해 취미로 [[인터프리터 언어]]를 만들기로 결심하였다. 그는 ABC 라는 프로그래밍 언어를 주로 사용하였는데 ABC 프로그래밍 언어의 장점은 그대로 살리고 단점은 제거 함을 시작으로 1990년 파이썬이 만들어졌다.
파이썬은 우리나라를 비롯한 동아시아 지역에서는 아직 대중적으로 사용되지 않지만 서양에서는 교육을 비롯해 많은 곳에서 사용되고 있다.
파이썬은 구글이 애용하는 언어 중 하나로 컴퓨터에서 쉽게 사용될 수 있는 언어이다.
파이썬은 다른 언어들에 비해서 쉽고 배우기도 편해서 요즈음 핫한 언어로 떠오르고 있다. 하지만 파이썬은 다른 언어에 비해 실행 속도가 빠른 앱을 만들기 어렵고
복잡한 명령어는 수행하기 어려워 빠른 속도가 필요한 앱에는 사용되지 않고 있다.
그래도 파이썬을 먼저 배우면 다른 언어를 배우기 쉬운 만큼 지금 먼저 같이 배우기를 추천한다.(프로그래밍 경험이 없는 사람도 같이 즐길 수 있다! 스크래치를 먼저 배우고 오면 더 쉽게 배울 수 있지만 말이다.)
 
==귀도 반 로섬은 누구인가?==
[[귀도 반 로섬]] (Guiido van Rossum)은 네덜란드 출신의 컴퓨터 프로그래머이며, 프로그래밍 언어인 파이썬을 개발했다. 로섬은 2005년부터 2012년까지 [[구글]]에서 일했으며, 2013년부터 구글에서 퇴사해 현재까지 [[드롭박스]]에서 일하고 있다.
귀도 반 로섬은 Stichting Mathematisch Centrum (CWI)에서 일하면서 1986년에 BSD Unix에 glob () 루틴을 작성하고 기고했다. 또한 로섬은 ABC 프로그래밍 언어의 개발에 참여했으며, 나중에 a,b,c언어는 파이썬을 제작할 때 쓰였다.


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


==미운코딩새끼==
===앨범 제작 방식===
<youtube>https://youtu.be/c2mpe9Xcp0I</youtube>
* [[김왼손]]은 강의합니다.
* 미운코딩새끼 : 4주간 파이썬 기초 문법 강의
* 집단지성들은 공부합니다.
* 앞으로의 강의 : 파이썬 프로그래밍을 위한 재료 / 반복문 / 조건문 / 컨테이너(기본 재료를 모으는 것) / 함수(미리 묶어놓은 것, 이름을 붙여 놓은 기능)
* 모두 함께 정리합니다.
* 강의 대상 : 코딩을 처음 접하는 사람, 코딩을 미워하고 혐오하는 사람, 코딩을 포기한 사람


==프로그램과 프로그래밍==
==프로그램과 프로그래밍==
* 여기부터는 1주차 영상 내용입니다.
{{youtube|4temEoXl8mE}}
<youtube>https://youtu.be/P_z2qFcfHeA</youtube>
<youtube>https://youtu.be/4temEoXl8mE</youtube>
===코딩이란?===
* 코딩 (Coding) = 프로그래밍 (Programming)
* 엄밀하게 말하면 다르지만 요즘엔 혼용해서 사용
* 프로그래밍 : 프로그램을 만드는 작업


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


===프로그램의 기본 구조===
===프로그램의 기본 구조===
* 순차 : 위에서 아래로 한 줄씩 순서대로 명령을 수행함
* 모든 프로그램은 순차, 선택, 반복 세 가지 기본 구조로 구성되어 있습니다.
* 선택 : 분기. 선택의 순간, 예와 아니오 중 선택. 프로그램의 흐름을 바꿈
** 순차 : 정해진 순서대로 명령을 수행하는 것을 말합니다.
* 반복 : 같은 명령을 조건이나 횟수에 따라 반복해서 되풀이하는 것
** 선택 : 조건에 따라 흐름을 바꾸는 것을 말합니다.
* 모든 프로그램은 이 세 가지 기본 구조가 쌓여서 만들어 짐
** 반복 : 같은 명령을 조건이나 횟수에 따라 반복하는 것을 말합니다.


==왜 파이썬일까요?==
==왜 파이썬일까요?==
<youtube>https://youtu.be/C2jbff0AU_E</youtube>
{{youtube|C2jbff0AU_E}}


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


===많다===
===많습니다===
* 파이썬을 사용하는 사람이 많기 때문에 인터넷에 공유된 자료가 많음
* 파이썬을 사용하는 사람이 아주 많기 때문에 참고할 자료도 많습니다.
* 스택오버플로우 (https://stackoverflow.com/) : 프로그래밍계의 네이버 지식인
* 스택오버플로우 (https://stackoverflow.com/) : 코딩계의 네이버 지식인이라 할 수 있습니다.
* 파이썬의 모토 : 어떤 문제를 해결하는 가장 아름다운 방법이 있다.
* 질문도 엄청 많지만 답변은 이보다 훨씬 많습니다. 훑어보는 것만으로도 공부가 됩니다.
* 파이썬의 모토 : "어떤 문제를 해결하는 가장 아름다운 방법이 있다."
* 파이썬과 자주 비교되는 언어로 [[펄]]이 있는데 [[펄]]은 문제를 해결할 때 다양한 방법을 선호합니다.
** [[파이썬의 도]]
** [[파이썬의 도]]
<source lang='python'>
<syntaxhighlight lang='python'>
>>> import this
>>> import this
The Zen of Python, by Tim Peters
The Zen of Python, by Tim Peters
143번째 줄: 120번째 줄:
If the implementation is easy to explain, it may be a good 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!
Namespaces are one honking great idea -- let's do more of those!
</source>
</syntaxhighlight>
* 구글 파이썬 검색결과 : [https://www.google.co.kr/search?q=파이썬 바로가기]


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


==파이썬 설치하기: 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 버전을 기준으로 합니다. 가장 최신 버전을 사용해도 관계 없습니다.
* 2.x 버전을 사용하면 강의의 예제가 정상적으로 동작하지 않을 수 있음
* 2.x 버전을 사용하면 미운코딩새끼의 예제가 정상적으로 동작하지 않을 수 있습니다.
* IDLE (Integrated Development and Learning Environment) : 통합 개발 환경
 
** 인터렉티브 셸 모드 : 컴퓨터와 핑퐁하듯이 주고받을 수 있는 모드
===IDLE===
** 에디터 모드 : 여러 줄의 코드를 작성할 수 있는 모드
* IDLE (Integrated Development and Learning Environment)
** 한번 명령어를 던지면 컴퓨터가 대답을 하는 형식
* 초보자들이 처음 파이썬을 입문할 때 사용하기에 간편합니다.
* 개발을 할때도 보조 도구로 사용하기 좋습니다.
* 인터렉티브 셸 모드
** 컴퓨터와 탁구를 치듯이 주고받을 수 있는 모드입니다.
** 한번 명령어를 던지면 컴퓨터가 대답을 하는 형식입니다.
* 에디터 모드
** 여러 줄의 코드를 작성할 수 있는 모드입니다.


==입력과 출력==
==입력과 출력==
===출력하기: print()===
===출력하기===
<youtube>https://youtu.be/Ulfudc1pF5Q</youtube>
{{youtube|Ulfudc1pF5Q}}
* 괄호 안의 숫자나 문자열 등의 값을 출력해주는 함수
* print()는 값을 출력해주는 함수입니다.
* 파이썬에서 가장 많이 사용되는 함수
* 입력한 메시지나 값을 출력합니다.
* 문자열 출력 시 큰따옴표(" ")나 작음따옴표(' ')를 사용
* 문자나 숫자 등을 출력할 수 있습니다.
* 프로그래밍 언어는 컴퓨터와의 약속
* 쉼표(,)로 여러 값을 출력할 수 있습니다.
* 컴퓨터는 융통성이 없어서 개떡같이 말하면 개떡같이 알아 들음
* 괄호(()) 안의 값을 출력합니다.
 
<syntaxhighlight lang="python">
>>> print()
 
>>> print('Hello world!')
Hello world!
>>> print(1)
1
>>> print([1, 2, 3])
[1, 2, 3]
</syntaxhighlight>
 
* 정확하게 print()를 입력해야 합니다. 잘못 입력하면 에러가 발생합니다.
 
<syntaxhighlight lang="python">
>>> pritn()
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}}
* 실행 중 사용자의 입력을 받습니다.
* 입력 값은 항상 문자열로 받아옵니다.
* 프로그램에게 정보를 전달할 수 있습니다.
* 괄호 안에 문자열을 넣으면 프롬프트의 역할을 수행합니다.
* 입력 받은 값을 변수에 저장할 수 있습니다.


===입력하기: input()===
<syntaxhighlight lang='python'>
<youtube>https://youtu.be/V9bTS16hCS0</youtube>
>>> name = input('What is your name?')
* 사용자에게 입력을 받아 컴퓨터에게 이야기해주는 것
What is your name?
* 괄호 안에 문자열을 넣으면 프롬프트의 역할 수행
</syntaxhighlight>
* 입력 받은 값을 변수에 저장 가능
<source lang='python'>
>>> age = input('당신의 나이는?')
당신의 나이는?
</source>


==변수==
==변수==
===변수와 변수이름===
===변수===
<youtube>https://youtu.be/b3ituFojqU0</youtube>
{{youtube|b3ituFojqU0}}
* 변수에는 값을 저장 할 있음. 값을 할당한다고도 함
* 변수에는 값을 할당할 있습니다.
* 저장되는 값은 변할 수 있음
* 파이썬에서 =은 할당을 의미합니다.
<source lang='python'>
* 할당된 값은 변할 수 있습니다.
my_int = 1  
 
</source>
<syntaxhighlight lang='python'>
* =은 할당한다는 의미. 1을 my_int에 할당한다는 의미
>>> my_int = 1
* 1에 my_int라는 이름을 붙여줌
>>> my_str = 'Python'
* http://www.pythontutor.com/  
>>> count = 1  # 1
* 예전에는 메모리에 저장되어 있는 값을 불러오기 위해 번호 사용
>>> count = count + 1  # 2
* 할당되는 번호가 많아지면서 관리가 어려워져 숫자 대신 이름을 붙여줌
</syntaxhighlight>
* 변수 이름은 타인과 함께 쓰기에 편한 이름으로 짓는 것이 좋음
 
* 혼자만 이해할 수 있는 것보다 모두가 이해할 수 있게 작성하는 것을 권장
* http://www.pythontutor.com/
* 글자, 밑줄 문자 가능
 
<source lang='python'>
===변수의 이름===
abdfdfdsfd___sdfsdfsjdklfj = 1
* 아주 예전에는 메모리에 저장되어 있는 값을 불러오기 위해 번호를 사용했습니다.
</source>
* 번호가 많아지면서 관리가 어려워지고 숫자 대신 이름을 붙이기 시작했습니다.
* 대소문자 구분 가능
* 변수의 이름은 다른 사람들과 함께 쓰기에 편한 이름으로 짓는 것이 좋습니다.
<source lang='python'>
* 혼자만이 아닌 모두가 이해할 수 있게 작성하는 것을 권장합니다.
python = 1
* 글자나 밑줄 문자(_)를 사용합니다.
PYTHON = 2
* 대문자와 소문자를 구분합니다.
</source>
 
* 유니코드 방식을 사용하기 때문에 한글도 지원한다.  
<syntaxhighlight lang='python'>
<source lang='python'>
>>> python = 1
파이썬 = 1
>>> PYTHON = 2
김왼손 = 20
</syntaxhighlight>
</source>
 
* 숫자로 시작하는 이름 불가
* 숫자로 시작하는 이름은 쓸 수 없습니다.
* 띄어쓰기 불가. 띄어쓰기 대신 언더바(_) 사용
* 띄어쓰기를 포함할 수 없습니다. 보통 띄어쓰기 대신 밑줄 문자(_)를 사용합니다.
* 유니코드 방식을 사용하기 때문에 변수명으로 한글도 지원합니다.
* 하지만 대부분의 경우 영어 변수명을 사용합니다.
 
<syntaxhighlight lang='python'>
>>> 파이썬 = 1
>>> 김왼손 = 20
</syntaxhighlight>


==프로그램의 기본재료==
==프로그램의 기본재료==
===숫자형, 문자열, 불린===
===숫자형, 문자열, 불린===
<youtube>https://youtu.be/Np0PQhQQY2c</youtube>
{{youtube|Np0PQhQQY2c}}
* 숫자형
* 숫자형 (Numeric)
** 정수형 (integer)
** 숫자로 이루어진 자료형입니다.
<source lang = 'python'>
** 정수나 실수 등을 다룰 수 있습니다.
** 숫자끼리 연산도 가능합니다.
 
<syntaxhighlight lang='python'>
>>> my_int1 = 1
>>> my_int1 = 1
>>> my_int2 = 2
>>> my_int2 = -2
>>> my_int3 = 4096
>>> my_int3 = 4096
</source>
** 실수형 (float)
<source lang = 'python'>
>>> my_float1 = 1.0
>>> my_float1 = 1.0
>>> my_float2 = 2.0
>>> my_float2 = 2.0
>>> my_float3 = 3.14
>>> my_float3 = 3.14
</source>
</syntaxhighlight>
* type() 함수
 
** 변수의 데이터 타입을 확인해줌.  
* 문자열 (String)
** 파이썬에서는 거의 모든 것이 객체
** 문자나 문자들을 늘어놓은 것입니다.
<source lang = 'python'>
** 큰따옴표와 작은따옴표로 구분합니다.
# sample code
** 리스트와 함께 시퀀스 자료형입니다.
</source>
** 작은따옴표(' ') 또는 큰따옴표(" ")로 구분합니다.
* 문자열 (string)
 
** 작은따옴표 (' ') 또는 큰따옴표(" ")로 구분
<syntaxhighlight lang='python'>
** 짝은 맞춰야 함
>>> my_str1 = 'a'
<source lang = 'python'>
>>> my_str2 = '3.14'
>>> my_str1 = 'python'
>>> my_str3 = 'coding'
>>> my_str2 = "python"
>>> my_str4 = "coding"
>>> my_str3 = '3.14'
</syntaxhighlight>
</source>
 
* 불린 (boolean)
* 불린 (Boolean)
** 참 (True)과 거짓 (False)
** 참(True)과 거짓(False)을 말합니다.
<source lang = 'python'>
** 비교나 논리연산자의 결과입니다.
>>> my_bool1 = True
 
>>> my_bool2 = False
<syntaxhighlight lang='python'>
</source>
>>> 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)
** 컨테이너
** 여러 값을 함께 모아서 저장합니다.
** 숫자형, 문자열 등을 한번에 모아서 씀
** 값을 변경할 수 있으며 순서가 있습니다.
<source lang = 'python'>
 
# sample code
<syntaxhighlight lang='python'>
>>> my_list = [ ]
>>> my_list = []  # []
</source>
>>> my_list.append(123)  # [123]
* 튜플 tuple
>>> my_list.append('abc') # [123, 'abc']
** 컨테이너
>>> my_list.append(True)  # [123, 'abc', True]
** 리스트와 비슷하지만, 값을 바꿀 없음
</syntaxhighlight>
<source lang = 'python'>
 
# sample code
* 튜플 (Tuple)
</source>
** 여러 값을 함께 모아서 저장합니다.
* 딕셔너리 dictionary
** 값을 변경할 없으며 순서가 있습니다.
** 컨테이너
 
** 키와 값의 쌍으로 저장
<syntaxhighlight lang='python'>
<source lang = 'python'>
>>> my_tuple1 = ()
# sample code
>>> my_tuple2 = (1,)
</source>
>>> 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}}
* float()
* 자료형끼리 변환할 수 있는 함수도 있습니다.
** 실수가 아닌 걸 실수로 변환
* int(): 정수형으로 변환합니다.
<source lang = 'python'>
 
# sample code
<syntaxhighlight lang='python'>
</source>
>>> print(int(3.14))
* str()
3
** 숫자를 문자열로 변환
</syntaxhighlight>
<source lang = 'python'>
 
# sample code
* float(): 실수형으로 변환합니다.
</source>
 
* list()
<syntaxhighlight lang='python'>
** 리스트로 변환
>>> print(float(3))
<source lang = 'python'>
3.0
# sample code
</syntaxhighlight>
</source>
 
* 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>https://youtu.be/baCBhEZxbhU</youtube>
{{youtube|baCBhEZxbhU}}
* 컴퓨터는 알아듣지 못하는 우리끼리의 대화
* 사람을 위한 설명을 메모합니다.
* #을 이용해서 주석 사용
* 코멘트(comment)라고도 합니다.
* 주석은 코드 해석에 큰 도움이 되므로 사용하는 것이 좋음
* 컴퓨터는 주석을 무시합니다.
* 다만, 너무 많으면 오히려 방해가 될 수 있음
* #을 사용합니다.
<source lang='python'>
* 지나치게 많거나 코드와 상관없는 주석은 오히려 방해가 될 수 있습니다.
>>> print(2 + 3)  # 계산결과를 출력
 
<syntaxhighlight lang='python'>
>>> print('Hello Python!')  # 문자열을 출력합니다.
Hello Python!
>>> print(12345)  # 숫자를 출력합니다.
12345
>>> print(2 + 3)  # 계산결과를 출력합니다.
5
5
</source>
</syntaxhighlight>


==문자열==
==문자열==
===문자열===
===기본구조===
* 여기부턴 2주차 내용입니다.
{{youtube|nxalF9tsqAQ}}
<youtube>https://youtu.be/_0jqO-56tA0</youtube>
* 문자나 문자들을 나열한 것입니다.
<youtube>https://youtu.be/nxalF9tsqAQ</youtube>
* 값을 변경할 수 없으며 순서가 있습니다.
* 큰따옴표나 작은따옴표로 문자를 나열
* 큰따옴표나 작은따옴표로 구분합니다.
* 값이나 순서 변경이 불가
 
<source lang='python'>
<syntaxhighlight lang='python'>
>>> my_str = "김씨가족"
>>> my_str = 'python'
>>> print(my_str)
>>> print(my_str)
'김씨가족'
python
>>> type(my_str)  
>>> type(my_str)
>>> my_str = 'JW호박 Pumpkin'
<class 'str'>
</source>
</syntaxhighlight>
* 문자열 안에 큰 따옴표나 작은 따옴표를 넣고 싶을
 
** 넣고 싶은 따옴표가 아닌 따옴표를 사용하여 문자열을 씌우고, 문자열에 넣고 싶은 따옴표를 넣음
* 문자열 안에 큰따옴표나 작은따옴표를 넣고 싶을 때는 서로 다른 따옴표를 함께 씁니다.
<source lang='python'>
 
<syntaxhighlight lang='python'>
>>> print("Let's go!")
>>> print("Let's go!")
>>> print('I said, "Hello!"')
>>> print('I said, "Hello!"')
</source>
</syntaxhighlight>
* ''' ''', """ """ : 여러 줄을 한 문자열에 넣을 있음.
 
<source lang='python'>
* 따옴표를 세 번씩 쓰면 여러 줄을 표현할 있습니다.
>>> my_str = """제스퍼
 
토미
<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 : 정수 숫자형 대입
>>> 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 : 실수 숫자형 대입
 
<source lang='python'>
* %d : 정수형 숫자를 대입할 수 있습니다.
>>> '%f' % 3.14
 
'3.14'
<syntaxhighlight lang='python'>
</source>
>>> print('%d %d' % (1, 2))
1 2
</syntaxhighlight>
 
* %f : 실수형 숫자를 대입할 수 있습니다.
 
<syntaxhighlight lang='python'>
>>> print('%f' % 3.14)
3.14
</syntaxhighlight>
 
* %s : 문자열을 대입할 수 있습니다.
 
<syntaxhighlight lang='python'>
>>> print('%s' % 'coding')
coding
</syntaxhighlight>
 
===format()===
===format()===
<youtube>https://youtu.be/8mWUHoB8A-I</youtube>
{{youtube|8mWUHoB8A-I}}
* '{ }'.format() : 파이썬스러운 방법. 문자열을 자유롭게 표현하는 방법, 순서 지정 가능
* 포맷팅을 수행하는 문자열의 메소드입니다.
<source lang='python'>
* 중괄호 { }를 이용해 값을 대입합니다.
>>> 'My name is %s' % '조희진'
* 보다 파이썬스러운 방법입니다.
'My name is 조희진'
* 순서도 지정할 수 있습니다.
>>> 'My name is{}'.format('조희진')
 
'My name is 조희진'
<syntaxhighlight lang='python'>
>>> '{} x {} ={}'.format(2, 3, 2*3)
>>> print('My name is %s' % 'Tom')
'2 x 3 = 6'
My name is Tom
>>> '{1} x {0} ={2}'.format(2, 3, 2*3)  # 괄호 안의 숫자는 순서를 지정
>>> print('My name is {}'.format('Tom'))
'3 x 2 = 6'
My name is Tom
</source>
>>> 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>https://youtu.be/wNBTyl4lov4</youtube>
{{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>https://youtu.be/xAW1OXEc9Lc</youtube>
{{youtube|xAW1OXEc9Lc}}
* 자르다. 나누다
* 문자열에서 여러 값을 한꺼번에 잘라옵니다.
* [시작:끝]
* 콜론(:)을 이용해 여러 값을 한꺼번에 가져올 수 있습니다.
* Python [1:4] → yth 를 의미 1부터 4전까지
* 기존 문자열은 그대로 두고 복사해서 사용합니다.
* Python [2:5] → tho 2부터 5전까지
 
<source lang='python'>
<syntaxhighlight lang='python'>
my_name = '김왼손의 왼손코딩'
>>> my_str = 'Hello Python!'
>>> my_name[5:7]
>>> print(my_str[0:1])
'왼손'
H
</source>
>>> print(my_str[0:2])
* 앞이나 뒤의 값 생략 가능
He
<source lang='python'>
>>> print(my_str[3:7])
my_name = '김왼손의 왼손코딩'
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>https://youtu.be/BIE3gF_YT5U</youtube>
{{youtube|BIE3gF_YT5U}}
* 함수
* 특정한 기능을 수행하기 위한 코드를 모아두고 이름을 붙인 것을 함수라고 합니다.
* 어떤 기능을 수행하기 위해 모아놓고 이름을 붙여 쉽게 불러 쓰게 함
* 메서드는 특정 객체만 사용할 수 있는 함수를 말합니다.
* string.split()
* string.split(): 문자열을 공백 기준으로 분리합니다.
* string만 사용할 수 있는 함수
 
* 문자열이 공백을 기준으로 잘리는 split() 향후 설명
<syntaxhighlight lang='python'>
<source lang='python'>
>>> fruit_str = 'apple banana lemon'
my_name.split()
>>> 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>https://youtu.be/HO_hquCSivY</youtube>
{{youtube|HO_hquCSivY}}
* 문자열을 사용할 때 큰따옴표, 작은따옴표 세 개씩 사용하는 걸 주석으로 사용할 수 있음.  
* 문서화 문자열(Documentation string)입니다.
* 기본 주석
* 함수가 어떤 일을 수행하는지 설명합니다.
<source lang='python'>
* 보통 큰따옴표 세 개를 사용합니다.
>>> # 주석입니다.
 
</source>
<syntaxhighlight lang='python'>
* 독스트링
def 함수이름(인자1, ...):
<source lang='python'>
    """함수에 대한 설명"""
>>> '''이것도 주석입니다'''
    실행할 명령1
>>> """이것도 주석입니다"""
    실행할 명령2
</source>
    ...
* 함수 설명용으로 주로 사용하는 주석
    return 결과
</syntaxhighlight>
 
===end===
{{youtube|xHMs7j-EGZ0}}
* print() 함수에서 출력의 끝을 지정합니다.
* 파이썬에서는 줄 바꿈(\n)이 기본 값입니다.


===이스케이프 코드===
<syntaxhighlight lang='python'>
<youtube>https://youtu.be/xHMs7j-EGZ0</youtube>
>>> print(' ', end='')
* print 함수 end
* 출력의 끝을 지정하는 방법
<source lang='python'>
>>> print('', end='')


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


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


==리스트==
==리스트==
===리스트===
===기본구조===
<youtube>https://youtu.be/p1cwtlQoaN4</youtube>
{{youtube|p1cwtlQoaN4}}
* List : 몇만개의 자료를 한꺼번에 저장
* 여러 값을 한꺼번에 모을 수 있습니다.
* immutable : 값 변경 불가, mutable : 값 변경 가능
* 값들은 변경할 수 있고 순서가 있습니다.
* [val1, val2…] ←리스트
** 가변(mutable) : 값을 변경할 수 있습니다. 리스트, 딕셔너리 등이 해당됩니다.
* 리스트에는 값을 처음부터 넣을 수 있고, 나중에 넣을 수도 있다.
** 불변(immutable) : 값을 변경할 수 없습니다. 문자열, 튜플 등이 해당됩니다.
 
* 빈 리스트 만들기
 
<syntaxhighlight lang='python'>
>>> my_list = []
[]
>>> type(my_list)
<class 'list'>
</syntaxhighlight>
 
* 값을 가지고 있는 리스트 만들기
<syntaxhighlight lang='python'>
>>> my_list = [1, 2, 3]
>>> print(my_list)
[1, 2, 3]
</syntaxhighlight>
 
===값 추가하기===
===값 추가하기===
<youtube>https://youtu.be/hrjcktiEdk0</youtube>
{{youtube|hrjcktiEdk0}}
* 리스트는 여러 개의 값을 한 개에 저장할 있다.
* list.append()를 사용해서 값을 추가할 수 있습니다.
* 수많은 숫자를 한 번에 저장. 인덱스 사용.  
 
* immutable(불변) vs mutable(가변)
<syntaxhighlight lang='python'>
* immutable : 문자열, 튜플
>>> students = ['Tom', 'Alice', 'Sally']
* mutable : 리스트, 딕셔너리
>>> students.append('Betty')
* [val1, val2]
>>> students.append('Angela')
<source lang='python'>
>>> print(students)
>>> my_list = []  # my_list라는 빈 그릇을 생성
['Tom', 'Alice', 'Sally', 'Betty', 'Angela']
[]
</syntaxhighlight>
>>> my_list = [1, 2, 3]  # my_list에 처음부터 1,2,3 값을 저장
 
>>> std = ['이에스', '이에스2', '이에스3']
* 리스트는 그릇과 같습니다. 그릇이 없는 상태에서 식재료를 쏟을 없습니다.
>>> std.append('토미') # append 리스트에 추가하는 메서드
* 리스트가 없는 상태로 append()를 이용해 값을 추가할 수 없습니다.
>>> std.append('찹쌀떡')
 
</source>
<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>
 
===인덱싱===
{{youtube|NiXYjXBrzOg}}
* 인덱싱, 슬라이싱은 문자열과 상당히 유사합니다.
* 위치를 이용해서 값에 접근하는 것을 인덱싱이라고 합니다.
 
<syntaxhighlight lang='python'>
>>> animals = ['코알라', '하이에나', '바다소', '땅다람쥐', '바다코끼리', '스컹크', '아나콘다']
>>> print(animals[1])
['하이에나']
</syntaxhighlight>


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


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


===메서드===
===메서드===
<youtube>https://youtu.be/bxRyJUhOiE4</youtube>
{{youtube|bxRyJUhOiE4}}
* https://wikidocs.net/14 :: 추가 메서드는 검색으로
* 리스트도 다양한 메서드가 있습니다.
* list.sort()
* 외우는 건 중요하지 않습니다. 필요할 때 검색해서 사용할 수 있으면 됩니다.
<source lang='python'>
* list.sort(): 리스트 안의 값을 정렬합니다.
 
<syntaxhighlight lang='python'>
>>> animals =['코알라', '하이에나', '바다소', '땅다람쥐', '바다코끼리', '스컹크', '아나콘다']
>>> animals.sort()
>>> animals.sort()
>>> animals
>>> print(animals)
['땅다람쥐', '바다소', '바다코끼리', '스컹크', '아나콘다', '코알라', '하이에나']
['땅다람쥐', '바다소', '바다코끼리', '스컹크', '아나콘다', '코알라', '하이에나']
</source>
</syntaxhighlight>
* list.count()
<source lang='python'>
>>> animals.append('바다소')
>>> animals.count('바다소') ## 리스트에 값이 몇 개인가?
2
</source>
* 길이(개수)를 알려줌. 내장함수(파이썬에서 이미 만들어둔 함수)
<source lang='python'>
>>> del animals[1]
>>> len(animals)
7
>>> animals
[‘'땅다람쥐', '바다코끼리', '스컹크', '아나콘다', '코알라', '하이에나', '바다소']
</source>
* list.sort  #sort 메서드 정렬 하는 메서드


<source lang='python'>
* list.count(): 해당 값의 개수를 셉니다.
animals.sort()
</source>


* list.count
<syntaxhighlight lang='python'>
>>> animals =['코알라', '하이에나', '바다소', '땅다람쥐', '바다코끼리', '스컹크', '아나콘다']
>>> print(animals.count('바다소'))
1
</syntaxhighlight>


<source lang='python'>
* 리스트의 메서드에 대해서 더 알고 싶다면 구글에 검색해보세요.
animals.count('바다소')  # animals 리스트에 ‘바다소’가 몇마리 있나? 2
animals.count('코알라')  # animals 리스트에 ‘코알라’가 몇마리 있나? 1
animals.count('하이에나')  # animals 리스트에 하이에나가 몇마리 있나? 1
len(animals)  # animals 리스트에 동물들이 몇마리 있는가 ? 6
</source>


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


* 튜플은 괄호 안써도 됨
<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)
* Packing : 자료를 쌓아놓는 것
<class 'tuple'>
* Unpacking : 자료를 풀어놓는 것
</syntaxhighlight>
<source lang='python'>
num1, num2, num3 = my_tuple
num1 = 1
num2 = 2
</source>
* 둘의 자료 순서가 바뀌려면..
<source lang='python'>
num1, num2 = num2, num1
</source>


===패킹, 언패킹===
===패킹, 언패킹===
<youtube>https://youtu.be/Hnsli2sUp4M</youtube>
{{youtube|Hnsli2sUp4M}}
* 여러 값을 모아서 저장
* 패킹(Packing) : 여러 개의 값을 한꺼번에 묶는 것을 말합니다.
* 리스트와 차이는 값을 변경할 수 없음! immutable
* 언패킹(Unpacking) : 묶여 있는 값을 풀어놓는 것을 말합니다.
* (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 각각에 튜플 값이 들어감
</source>


==for==
<syntaxhighlight lang='python'>
===기본구조===
>>> my_tuple = (1, 2, 3)
<youtube>https://youtu.be/fStlO0uBYtQ</youtube>
>>> num1, num2, num3 = my_tuple
* 모든 변수를 거칠때까지 이 명령문 안에 있는 것을 반복
>>> print(num1)
<source lang='python'>
1
for 변수 in 컨테이너:
>>> print(num2)
    실행할 명령 1
2
    실행할 명령 2
</syntaxhighlight>
    ...
</source>
* 변수가 다 떨어질 때 까지 반복
* 4칸의 들여쓰기, tab, 8칸 들여쓰기
* 들여쓰기는 모두 하나로 통일
* 4칸 띄어쓰기 권장!


<source lang='python'>
* 두 변수의 값을 서로 바꿀 때도 사용할 수 있습니다.
>>> for animal in animals:
    print(animal)
'땅다람쥐'
'바다코끼리'
'스컹크'
'아나콘다'
'코알라'
'하이에나'
'바다소'
</source>


<source lang='python'>
<syntaxhighlight lang='python'>
>>> for num in [1, 2, 3]:
>>> num1 = 1
    print(num)
>>> num2 = 2
>>> num1, num2 = num2, num1
>>> print(num1)
2
>>> print(num2)
1
1
2
</syntaxhighlight>
3
 
</source>
==for==
===반복문===
* 반복되는 지루한 작업을 처리하기 위해 사용합니다.
* 파이썬에는 for와 while 두 가지 반복문이 있습니다.
* for는 횟수를 기준으로, while은 조건을 기준으로 반복합니다.


* 반복을 나타내는 중요한! 문법 ( 파이썬에서 가장 중요한 요소중에 하나입니다)
===기본구조===
* 반복 처리 = 컴퓨터 주특기. 빠르고 정확하게 수행 가능
{{youtube|fStlO0uBYtQ}}
* 파이썬에서는 두 가지가 있음 for, while
* 파이썬의 들여쓰기 : 탭과 스페이스바는 섞어쓸 수 없음. 4칸!
* 콜론과 들여쓰기(띄어쓰기 4칸)가 중요 ← 코드블록


<source lang='python'>
<syntaxhighlight lang='python'>
for 변수 in 컨테이너 :  
for 변수 in 컨테이너:
     실행할 명령1 # 코드블럭
     실행할 명령1
     실행할 명령2
     실행할 명령2
</source>
    ...
</syntaxhighlight>


* 컨테이너의 첫 번째 값이 변수에 들어간 다음 명령1과 2 실행
* 컨테이너 안의 값을 전부 순회할 때까지 반복합니다.
* 컨테이너의 두 번째 값이 변수에 들어간 다음 명령 1과 2 실행…
* 반복하는 부분을 코드블럭이라고 합니다.
* 컨테이너의 마지막 값까지 반복
* 코드블럭을 구분하기 위해 콜론(:)과 들여쓰기를 사용합니다.


<source lang='python'>
<syntaxhighlight lang='python'>
>>> for animal in animals: ## animals의 값을 불러다 모두 출력
animals = [땅다람쥐, 바다코끼리, 스컹크, 아나콘다, 코알라, 하이에나, 바다소]
for animal in animals:
     print(animal)
     print(animal)


'땅다람쥐'
땅다람쥐
'바다코끼리'
바다코끼리
'스컹크'
스컹크
'아나콘다'
아나콘다
'코알라'
코알라
'하이에나'
하이에나
'바다소'
바다소
</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>
 
for ch in '김왼손':
    print(ch)
 
</syntaxhighlight>
 
===들여쓰기===
* 파이썬에서는 들여쓰기가 선택이 아닌 필수입니다.
* 띄어쓰기의 종류는 하나로 통일해야 합니다.
* 보통 4칸 띄어쓰기를 권장합니다.


===range()===
===range()===
<youtube>https://youtu.be/End06FuccEE</youtube>
{{youtube|End06FuccEE}}
* range(n)은 0부터 n 전의 숫자까지를 나타낸다.
* for와 함께 자주 사용되는 내장함수입니다.
* 또, range(n, i)는 n부터 i 전의 숫자까지를 나타낸다
* range(stop)은 0부터 stop 전까지의 숫자를 나열합니다.
* 예) range(3) → [0, 1, 2]
* range(start, strop)는 start부터 stop 전까지의 숫자를 나열합니다.
* range(1,4) → [1, 2, 3]
 
* 내장 함수
<syntaxhighlight lang='python'>
<source lang='python'>
for n in range(3):
>>> range(3)
    print(n)
>>> 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 x 2===
for n in range(4, 6):
<youtube>https://youtu.be/UAaapRsJlYs</youtube>
     print(n)
* 반복문 안의 반복
<source lang='python'>
>>> for j in range(2, 10):
     for i in range(1, 10):
        print(‘{}x{}={}’.format(j, i, j*i))
</source>
* 구구단 2단
<source lang='python'>
>>> for i in range(2, 10):
    print('{}x{}={}'.format(2,i,2*1))          #작은따옴표를 넣을 것!
</source>


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


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


===컴프리헨션===
<syntaxhighlight lang='python'>
<youtube>https://youtu.be/ztVK2Cl5Saw</youtube>
for i in range(1, 10):
** 매우매우 많이 사용됨
    print('{}x{}={}'.format(2, i, 2 * 1))
** 여러줄의 코드를 한줄로 나타내는 것
</syntaxhighlight>


<source lang='python'>
* for를 중첩해서 사용하면 2단부터 9단까지 모두 출력할 수도 있습니다.
>>> numbers = [1,2,3,4,5,6,7,8,9,10]
>>> odd_numbers = []


>>> for number in numbers:
<syntaxhighlight lang='python'>
     if number % 2 == 1: #2로 나눴을때 1이 남으면
for j in range(2, 10):
         odd_numbers.append(number)
     for i in range(1, 10):
         print('{}x{}={}'.format(j, i, j * i))
</syntaxhighlight>


print(odd_numbers)
===컴프리헨션===
</source>
{{youtube|ztVK2Cl5Saw}}
* 위에는 numbers에서 odd_numbers로 홀수만 옮기는 것
* 리스트를 만드는 강력하고 간결한 방법입니다.
* 위의 코드와 아래의 코드는 같다.
* 초보자에게는 쉽지 않지만 많이 사용됩니다.
<source lang='python'>
* 주어진 리스트에서 홀수만 뽑아내는 코드를 작성해봅시다.
>>> [number for number in numbers if number % 2 == 1]
</source>


<source lang='python'>
<syntaxhighlight lang='python'>
>>> for i in range (0, 11):
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    print (i)
odd_numbers = []
</source>


* C언어로 작성해 본다면
<source lang='c'>
for (i = 1, i < 10, i++)
    printf("파이썬 초보강의 들어보기!")
</source>
* JS로 작성해 본다면
<source lang='javascript'>
for (var i=1; i < 10; i++)
console.log("JS욥")
이를 통해 우리는 파이썬이 다른 언어들보다 훨씬 쉽다는 것을 알 수  있습니다.
print animals [0:5]
</source>
* 어렵지만 많이 쓰임. 우선 알아는 두고 갑시다.
* 갑자기 엄청 고급으로 넘어갑니다! 컴프레션은 어려운데 많이 쓰여요. 그래서 알아두면 좋긴해요. 지금 말고  나중에라도 이런 게 있다는 것만 알아두시면 좋아요. 그냥 바로 볼게요. 하시고 뭘 할거냐면요. 넘버스라는 리스트가 있어요. 1 2 3 4 5 6 7 8 9 10 이라는 리스트가 있어요. odd_numbers라는 리스트가 있어요. numbers에서 홀수 값만 뽑아와서 1, 3, 5, 7, 9만 넣을 거에요.
<source lang='python'>
>>> numbers=range(1,11)
for number in numbers:
for number in numbers:
     if number % 2 == 1:
     if number % 2 == 1: # 2로 나눴을 때 1이 남으면 홀수입니다.
         odd_numbers.append(number)
         odd_numbers.append(number)


>>> [number for number in numbers if number %2 == 1]
print(odd_numbers)
</source>
</syntaxhighlight>
 
* 만약에 넘버 퍼센트라는 것은 얘를 2로 나눴을때 나머지가 1이냐 라는 것이죠. 2를 2로 나누면 0이 남고 이렇게 영 일 영일 이러면서 홀수와 짝수를 구분할수 있고 홀수인것만 오드 넘버스에 넣어라 이 의미죠. 이거는 고급기술이지만요 말씀드리는것은 정말 많이 사용되기 때문이죠. 네 한번 실행시켜 보세요. 일삼오칠구만 나오는걸 보실수 있어요.
 
* 홀수 출력해보세요
<source lang='python'>
>>> 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)
</source>
       
* 이걸 바꿔봄
<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 = []
 
>>> for number in numbers:
    if number % 2 == 1: # 2로 나눌 때 나머지가 1인가 묻는 문장, 즉 홀수 판단문
        odd_numbers.append(number)
 
>>> print(odd_numbers)


>>> test = [number for number in numbers if number % 2 ==1]
* 다음은 컴프리헨션을 이용한 방법입니다.
>>> print(test)
<syntaxhighlight lang='python'>
</source>
>>> odd_numbers = [number for number in numbers if number % 2 == 1]
</syntaxhighlight>


==연산자==
==연산자==
* 여기부터는 3주차 내용입니다
<youtube>https://youtu.be/o9QCtLb2Prs</youtube>
===할당===
===할당===
<youtube>https://www.youtube.com/watch?v=Cz6cHtVWl58</youtube>
{{youtube|Cz6cHtVWl58}}
* 예전에는, 변수의 이름으로 <b>숫자</b>를 사용했다.
* 수학에서 =는 같다는 뜻입니다.
* 그런데 숫자로 사용 하다보니, 변수가 많아져게 되었을 때 헷갈리게 되었다.
* 파이썬에서 =은 할당 연산자입니다.
* 그래서 나온 것이 바로 <b>이름</b>!
* 오른쪽의 값을 왼쪽의 변수에 할당합니다.
* =은 할당 연산자이다.
 
* =을 기준으로 왼쪽에 있는 변수에 오른쪽에 있는 값을 할당해 주는 것이 할당 연산자이다.
<syntaxhighlight lang='python'>
* +=은 복합할당 연산자이다.
* += 기준으로 왼쪽에 있는 변수에 오른쪽에 있는 값을 더해주는 것이다.
<source lang='python'>
>>> my_int = 1
>>> my_int = 1
>>> my_float = 2.0
>>> my_float = 2.0
>>> my_list = []
>>> my_list = []
</syntaxhighlight>


* +=와 같은 것들을 복합 할당 연산자라고 합니다.
<syntaxhighlight lang='python'>
>>> count = 0
>>> count = 0
>>> count = 1
>>> count = count + 1
>>> count
>>> print(count)
1
1
>>> count += 1
>>> count += 1 # count = count + 1과 같습니다.
>>> count
>>> print(count)
2
2
</source>
</syntaxhighlight>
* 이 코드를 실행시키면, 'my_int'라는 이름의 변수 안에는 1이, 'my_float'라는 이름의 변수 안에는 2.0이, 'my_list'라는 이름의 변수 안에는 []가 들어가 있게 되는 것이다.


===산술===
===산술===
<youtube>https://www.youtube.com/watch?v=7dgVDoVZiMk</youtube>
{{youtube|7dgVDoVZiMk}}
* 숫자 자료형끼리 연산을 할 수 있게 해주는 연산자들이다.
* 숫자끼리 연산을 할 수 있게 합니다.
* '+', '-', '*', '/' 모양으로 쓴다.
* 아래와 같이 더하기, 빼기, 곱하기, 나누기를 할 수 있습니다.
** '*'? 곱하기?
 
** 우리는 이 표시를 Asterisk라고도 하고, '곱하기'를 나타낸다.
<syntaxhighlight lang='python'>
<source lang='python'>
>>> print(3 + 3)
>>> 3 + 3
6
6
>>> 20 - 5
>>> print(20 - 5)
15
15
>>> 6 * 2
>>> print(6 * 2)
12
12
>>> 12 / 3
>>> print(12 / 3)
4.0
4.0
</source>
</syntaxhighlight>
* 이런식으로 더하기, 빼기, 곱하기, 나누기를 할 수 있다!
 
* 그리고 이것과, <b>특수연산자</b>라는 것이 있다!
* 아래는 특수 연산자입니다.
** '**(제곱)', '//(몫)', '%(나머지)'가 있다.
 
<source lang="python">
<syntaxhighlight lang="python">
>>> 3 ** 2 # 3의 2제곱
>>> print(3 ** 2# 3의 2제곱
9
9
>>> 4 ** 3 # 4의 3제곱
>>> print(4 ** 3# 4의 3제곱
64
64
>>> 7 / 3
>>> print(7 / 3)  # 7 나누기 3
2.3333333333333335
2.3333333333333335
>>> 7 // 3 # 7 / 3의 몫 (소수점 아래 부분을 없앤 정수 값!)
>>> print(7 // 3# 7 나누기 3의 몫
2
2
>>> 7 % 3 # 7 / 3의 나머지
>>> print(7 % 3# 7 나누기 3의 나머지
1
</source>
<youtube>https://www.youtube.com/watch?v=ndqPcu30EJQ</youtube>
* % 연산자같은 경우에는 다른 목적으로 사용되는 경우도 있다.
<source lang="python">
>>> numbers = [1, 2, 3, 4, 5, 6, 7]
>>> for number in numbers:
...    print(number)
1
1
2
</syntaxhighlight>
3
4
5
6
7
</source>
* 이렇게 되는 것이 있는데, 이 값들이 홀수인지, 짝수인지 구별하고 싶다.


<br>
* 우리가 생각하기에는, [1, 3, 5, 7]이 홀수이고, [2, 4, 6]이 짝수이다.
* 그렇다면 우리는 나머지 계산 (%)을 이용해서 홀수와 짝수를 골라내는 프로그램을 만들어 볼 것이다!
** 컴퓨터는 당연히 사람이 생각하는 이런 어려운걸 알 리 없다!
** 그러니까, <b>어떤 수를 2로 나눠서, 나머지가 0이 나오면 짝수이다!</b>
<source lang="python">
>>> if 1 % 2 == 1:
...    print("홀수")
홀수
>>> if 2 % 2 == 0:
...    print("짝수!")
짝수!
</source>
* 우리는 이렇게 홀수, 짝수를 알아볼 수 있다.
* if에 대해서는 아래에 서술되어 있음──
<source lang="python">
>>> numbers
[1, 2, 3, 4, 5, 6, 7]
>>> for number in numbers:
...    if number % 2 == 1:
...        print("홀수!")
...    else:
...        print("짝수")
홀수!
짝수
홀수!
짝수
홀수!
짝수
홀수!
>>> for number in numbers:
...    if number % 2 == 1:
...        print(number, "는 홀수!")
...    else:
...        print(number, "는 짝수!")
1 는 홀수!
2 는 짝수!
3 는 홀수!
4 는 짝수!
5 는 홀수!
6 는 짝수!
7 는 홀수!
</source>


=== 문자열 ===
{{youtube|ndqPcu30EJQ}}
<youtube>https://www.youtube.com/watch?v=hftBFjwimaA</youtube>
* %의 경우에는 홀수, 짝수의 구분 등에 사용될 수 있습니다.
* 문자열도 연산자가 있다!
* 아래 코드는 %를 이용해 홀짝 구분을 하는 코드입니다.
** '+', '*'
* 사칙연산 할 때 사용하는 연산자이지만, 문자열에서도 사용할 수 있다.


<source lang="python">
<syntaxhighlight lang="python">
>>> '김왼손'+ 'X' + '엘리스'
numbers = [1, 2, 3, 4, 5, 6, 7]
'김왼손X엘리스'
for number in numbers:
>>> '안녕하세요' + '반갑습니다'
    if number % 2 == 1:
'안녕하세요반갑습니다'
        print(number, ': 홀수')
>>> '안녕하세요' + ' ' + '반갑습니다'
    else:
'안녕하세요 반갑습니다'
        print(number, ': 짝수')
</source>
* 붙어요!


* 문자열에서 '+'는, 연결시키는 연산자이다.
1 : 홀수
* 그냥 앞 문자열 뒤에 뒷 문자열이 붙는다.
2 : 짝수
<br>
3 : 홀수
* 이거 말고 곱하기 연산자도 있다.
4 : 짝수
<source lang="python">
5 : 홀수
>>> '안녕' * 3
6 : 짝수
'안녕안녕안녕'
7 : 홀수
>>> '안녕' * 10
</syntaxhighlight>
'안녕안녕안녕안녕안녕안녕안녕안녕안녕안녕'
>>> '안녕 ' * 5
'안녕 안녕 안녕 안녕 안녕 '
</source>


* <s>안녕안녕안녕안녕안녕안녕안녕안녕안녕!</s>
=== 문자열 ===
* IDLE에는 콘솔을 정리하는 방법이 없기 때문에, print()문을 많이 입력 함으로 정리를 대체할 수 있다.
{{youtube|hftBFjwimaA}}
* 문자열에도 연산자가 있습니다.
* + : 문자열끼리 연결합니다.


<source lang="python">
<syntaxhighlight lang="python">
>>> def cls():
>>> print('김왼손'+ 'X' + '집단지성들')
...    print('\n' * 100)
김왼손X집단지성들
...
>>> print('안녕하세요' + ' ' + '반갑습니다')
>>> cls()
안녕하세요 반갑습니다
</syntaxhighlight>


* * : 문자열을 곱한 수만큼 반복합니다.
<syntaxhighlight lang="python">
>>> print('안녕' * 3)
안녕안녕안녕
>>> print('안녕 ' * 5)
안녕 안녕 안녕 안녕 안녕
</syntaxhighlight>


# (이하 생략)
===비교===
</source>
{{youtube|xP7cbOZwb_U}}
* 이런 식으로 '엔터'키에 해당되는 문자인 '\n'을 100번 입력한 것과 같은 것이 되는 것이다.
* 비교연산자는 말 그대로 비교를 하는 것입니다.
** = 엔터를 100번 누름.
* 비교의 결과는 불린(True, False)입니다.
* == : 왼쪽과 오른쪽이 같은 지
* != : 왼쪽과 오른쪽이 다른 지
* > : 왼쪽이 더 큰 지
* < : 오른쪽이 더 큰 지
* >= : 왼쪽이 더 크거나 같은
* <= : 오른쪽이 더 크거나 같은 지


===비교===
<syntaxhighlight lang='python'>
<youtube>https://www.youtube.com/watch?v=xP7cbOZwb_U</youtube>
>>> print(1 < 2)
* 비교연산자는 말 그대로 비교를 하는 것이다.
** '==' 은 '왼쪽에 있는 피연산자와 오른쪽에 있는 피연산자가 같냐?'를 묻는 것이다.
** '!=' 는 '왼쪽에 있는 피연산자와 오른쪽에 있는 피연산자가 다르냐?'를 묻는 것이다.
** <b>잠깐!</b> 여기서 나오는 값은, 불린 값(True / False)이다
*** 만약, 1 == 1을 사용 했다면, 결과는 <b>True</b>가 되는 것이다.
** '>' 는 '왼쪽에 있는 숫자가 더 크냐?'를 묻는 것이다.
** '<'는 '오른쪽에 있는 숫자가 더 크냐?'를 묻는 것이다.
** '>='는 '왼쪽에 있는 숫자가 더 크거나 같냐?'를 묻는 것이다.
**'<='는 '오른쪽에 있는 숫자가 더 크거나 같냐?'를 묻는 것이다.
<source lang='python'>
>>> 1 < 2
True
True
>>> 2 < 1
>>> print(1 > 2)
False
False
>>> 1 != 1
>>> print(1 == 1)
True
>>> print(1 != 1)
False
False
>>> 1 == 1
>>> print(4 <= 6)
True
True
>>> 4 <= 6
>>> print(5 <= 5)
True
True
>>> 5 <= 5
</syntaxhighlight>
True
</source>
* 이런 식으로 비교를 해서 True인지, False인지를 알 수 있다.


===논리===
===논리===
<youtube>https://www.youtube.com/watch?v=Qf8nHIOXfHk</youtube>
{{youtube|Qf8nHIOXfHk}}
* Python의 논리 연산자: 3개가 있다.
* 파이썬의 논리 연산자에는 and, or, not이 있습니다.
** 'and', 'or', 'not'
* and : 둘 다 True일 때에만 True
** and '그리고' , or '또는' , not '아닌' 이라는 뜻이다.
* or : 한 쪽이라도 True이면 True
<source lang="python">
* not : True이면 False, False이면 True
>>> True
 
<syntaxhighlight lang="python">
>>> print(True)
True
True
>>> False
>>> print(False)
False
False


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


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


>>> not False
>>> print(not False)
True
True
>>> not True
>>> print(not True)
False
False
</source>
</syntaxhighlight>


* and는 하나라도 False이면 False를 출력하는 것이다
* 놀이동산의 청룡 열차를 타기 위해서는 키와 나이 제한이 있다고 생각해봅시다.
* or는 하나라도 True라면 True를 출력하는 것이다
* 키가 140cm 이상이면서 나이도 10살 이상이어야 청룡 열차를 탈 수 있다고 합니다.
* not은 그냥 False랑 True를 바꿔버린다.
* 일단 키도 120cm 이하면서 나이가 8살이면 결과는 어떻게 될까요?
* 키와 나이 조건 모두 False이기 때문에 결과는 False입니다.


<source lang="python">
<syntaxhighlight lang="python">
>>> height = 120
>>> my_height = 120
>>> age = 8
>>> my_age = 8
 
>>> print(my_height > 140 and my_age > 10)
>>> height > 140 and age > 10
False
False
</source>
</syntaxhighlight>
* height > 140은 False, age > 10은 False이므로 False and False 는 False이다.


<source lang="python">
* 키가 190cm이면서 나이가 9살이면 어떨까요?
>>> h = 190
* 키 조건은 True이지만 나이 조건은 False이므로 결과는 False입니다.
>>> age = 9


>>> h > 140 and age > 10
<syntaxhighlight lang="python">
>>> my_height = 190
>>> my_age = 9
>>> print(my_height  > 140 and my_age > 10)
False
False
</source>
</syntaxhighlight>
* 키는 되는데 나이가 안 된다는 것이다!


<source lang="python">
* 키가 150cm이면서 나이가 32살이면 어떨까요?
>>> h = 150
* 키와 나이 조건 모두 True이므로 결과는 True입니다.
>>> age = 32


>>> h > 140 and age > 10
<syntaxhighlight lang="python">
>>> my_height = 150
>>> my_age = 32
>>> print(my_height > 140 and my_age > 10)
True
True
</source>
</syntaxhighlight>
* 키도 140보다 크고, 나이도 10살보다 크기 때문에 놀이기구를 탈 수 있다!!


=== 멤버쉽 ===
=== 멤버쉽 ===
<youtube>https://www.youtube.com/watch?v=8JXbc7N1R28</youtube>
{{youtube|8JXbc7N1R28}}
* 마지막 연산자: 멤버쉽
* 리스트, 튜플 등의 안에 해당하는 값이 있는 지 확인합니다.
* 리스트같은 것에 값이 있는지, 없는지를 확인한다.
* in, not in 키워드를 사용합니다.
** 파이썬은 영어 기반이여서 '있다'와 '있지 않다'를 뜻하는 'in'과 'not in'이 있다.
 
<source lang="python">
<syntaxhighlight lang="python">
>>> 김왼손과_집단지성들 = ['조희진', '불탄고등어', '요거트', '류도영', '스치', '망고', 'Meta', '호박']
>>> fruits = ['사과', '딸기', '망고', '브로콜리', '바나나']
>>> 김왼손과_집단지성들
>>> print(fruits)
['조희진', '불탄고등어', '요거트', '류도영', '스치', '망고', 'Meta', '호박']
['사과', '딸기', '망고', '브로콜리', '바나나']
>>> '스치' in 김왼손과_집단지성들
>>> print('딸기' in fruits)
True
True
>>> '이에스' in 김왼손과_집단지성들
>>> print('딸기' not in fruits)
False
False
>>> '이에스' not in 김왼손과_집단지성들
>>> print('상추' in fruits)
True
>>> 김왼손과_집단지성들.append('이에스')
>>> '이에스' not in 김왼손과_집단지성들
False
False
>>> '이에스' in 김왼손과_집단지성들
>>> print('상추' not in fruits)
True
True
</source>
</syntaxhighlight>
* 이렇게 그냥 영어로 연산자를 알아볼 수 있다!
* 응? 여기 김왼손이 빠진?,,,
=== 삼항연산자 ===
* if문을 이용해 변수의 값을 선택할 때, 보통 우리는 이렇게 한다
* a, b 두 값중 더 큰 값을 넣을 때
 
<source lang="python">
>>> a, b = 1, 2
>>> if a > b:
... print(a, end="")
... else:
... print(b, end="")
2
# 더 큰 값을 출력하는 if-else문이다.
</source>
* 하지만, 우리가 코딩을 하다 보면, 이렇게 긴 문장을 쓰면 근처에 있는 방대한 양의 if문과 겹쳐저, 잘 안 보일 수도 있고,
* 어쨌든! 삼항연산자라는것은 if-else문을 한 줄로 줄인 것이다.
<source lang="python">
>>> a, b = 1, 2
>>> print(a if a > b else b)
2
</source>
* 아니!? 무려 2가 출력되었다!
* "값1 if 조건 else 값2" 는 '조건'이 True일 때는 값1을 출력하고, False일 때에는 값2를 출력한다.


==조건문==
==조건문==
===if===
===if===
<youtube>https://www.youtube.com/watch?v=V0-zxFwFmyo</youtube>
{{youtube|V0-zxFwFmyo}}
* 기본 구조
 
<source lang="python">
<syntaxhighlight lang="python">
if 조건:
if 조건:
     실행 할 명령 1
     실행할 명령1
실행 할 명령 2
    실행할 명령2
</source>
    ...
* if문은 조건문의 참, 거짓 여부를 판단후:
</syntaxhighlight>
** 참일 경우 if 문구뒤의 조건문을 실행
** 거짓일 경우 if 문구뒤의 조건문을 실행하지 않음
* if문구를 반복해서 여러번 사용가능
* if문구 안에 다른 if문구를 사용가능
* if-elif 문구에서의 조건은 or, and를 사용하여 한개 이상을 추가 가능


<source lang='python'>
* 조건이 참인지 거짓인지 판단합니다.
>>> number = 1
* 조건에 따라 처리의 흐름을 바꿉니다.
>>> result_first = "number = 1 은 참이다"
* if 키워드를 사용합니다.
>>> result_second = "number는 홀수이다"
** 참일 경우 코드블럭을 실행합니다.
** 거짓일 경우 코드블럭을 넘어갑니다.


>>> if number == 1:
<syntaxhighlight lang='python'>
...    print(result_first)
name = 'Edwin'
>>> if number % 2 == 0:
if name == 'Edwin':
...    print(result_second)
    print('당신이 Edwin이군요.')
# "number = 1 은 참이다" 만 출력되고 뒤의 if 문구는 거짓이기때문에 "number는 홀수이다" 는 출력을 하지않음
    print('만나서 반가워요 Edwin.')


>>> if number == 1 and number % 2 != 0:
당신이 Edwin이군요.
...    print(result_first)
만나서 반가워요 Edwin
...    print(result_second)
</syntaxhighlight>


number == 1 은 참이고 number % 2 != 0 도 참이기 때문에 if문구안에 있는 모든것을 다 실행
===else, elif===
"number = 1 은 참이다"
{{youtube|0dZtOB0iaO8}}
"number는 홀수이다"
</source>


예시 2
<syntaxhighlight lang='python'>
* 파일로 만들어 실행 했을때
if 조건:
<source lang='python'>
     실행할 명령1
input_name = '김왼'
     실행할 명령2
 
else:
if input_name == '김왼손':
     실행할 명령3
     print('똑똑')
    실행할 명령4
      
</syntaxhighlight>
if not input_name == '김왼손':
* if와 함께 사용할 수 있는 친구들입니다.
     print('바보')
* else: 이전의 if나 elif가 모두 거짓일 경우 else로 넘어갑니다.


출력: 바보
<syntaxhighlight lang='python'>
</source>
name = 'Bob'
 
if name == 'Alice':
===else, elif===
    print('당신이 Ailce이군요.')
<youtube>https://www.youtube.com/watch?v=0dZtOB0iaO8</youtube>
<source lang='python'>
else:
else:
     실행할 명령 1
     print('아니 당신은!?')
    실행할 명령 2
</source>
* if, elif 를 포함한 모든 문구가 거짓일때 if문을 실행하지않고 else 문으로 바로 건너가서 else 문구안에 있는 조건문을 실행
* if, elif, else 문구는 같은 들여쓰기(indentation) 에 있어야 if -> elif -> else 문구로 넘어감
* 가장 처음에는 if를 쓰고 가장 마지막에는 else를 쓰고, 그 전에는 elif를 쓴다
* else 이후의 if, else, elif 스크립트는 인식 하지 못한다
<source lang='python'>
>>> number = 1
>>> result_evenNum = "짝수입니다"
>>> result_oddNum = "홀수입니다"


>>> if number % 2 == 0:
아니 당신은!?
...    print(result_evenNum)
</syntaxhighlight>
... else:
...    print(reslut_oddNum)
홀수입니다
</source>
* 1 % 2 == 1이기 때문에!


<source lang='python'>
* elif : 이전의 if나 elif가 거짓일 경우 elif의 조건문으로 넘어갑니다.
elif:
    실행할 조건1
    실행할 조건2
            .
            .
            .
</source>
* else, if 의 줄임말로써 if 조건문이 거짓일경우 다음 조건인 elif 문의 참,거짓을 판별후 실행문 실행여부로 넘어감
<source lang='python'>
speed = 10


if speed > 100:
<syntaxhighlight lang='python'>
  print("과속")
if 조건:
elif speed < 30:
    실행할 명령1
  print("저속")
    실행할 명령2
else:
elif 조건:
  print("적정속도")
    실행할 명령3
저속
    실행할 명령4
</source>
</syntaxhighlight>
* speed = 10 이기때문에 첫번째 조건문인 if문구에서의 참,거짓 판별후, elif 문구의 참, 거짓으로 넘어간다.
* 여기서의 속도는 10이기 때문에 elif 문의 speed < 30 이 참이므로 elif 실행문을 실행하고 else문으로 넘어가지는 않는다


===들여쓰기===
<syntaxhighlight lang='python'>
* 들여쓰기 indentation (인덴테이션)
name = 'Bob'
* 보통은 tab 키를 눌러서 줄의 구분을 함 tab키 == 스페이스4번 입력
if name == 'Alice':
* 코딩을 깔끔하고 에러없이 하기위해서 필수적으로 줄맞춤을 해야함
     print('당신이 Ailce이군요.')
* if문구에서 줄이 맞지 않을경우 IndentationError 를 불러옴
elif name == 'Bob':
* 들여쓰기 혹은 줄맞춤이 제일 중요함.
    print('당신이 Bob이군요.')
<source lang='python'>
num1 = 1
num2 = 2
num3 = 3
 
if num1 == 1:
     print("num1 은 1과 값이 같다")
    if num2 == 2:
        print("num2 은 2과 값이 같다")
        if num 3 ==4:
            print("3은 4와 값이 같은가?")
        else:
            print("num3 은 3과 값이 같다")
else:
else:
     print("???")
     print('아니 당신은!?')
 
# ↓ 결과
"num1 은 1과 값이 같다"
"num2 은 2과 값이 같다"
"num3 은 3과 값이 같다"
 
</source>


=== 팁 ===
당신이 Bob이군요.
* if 문은 한줄로 이루어진 구문으로 쓰기 어렵다.
</syntaxhighlight>
* if문은 여러줄로 쓰는게 편하다
* IDLE는 한 줄로 쓰는것에 맞춰져있다. 다시 말하지만 idle는 컴퓨터와 핑퐁을 치는 원리임. 나만 2번 칠 수 없음. 하지만 에디터 모드는 나만 여러번 쳐도 됨
* if문은 <u>Editor Mode</u>에서 쓰는 것이 편하다.


==while==
==while==
===기본구조===
===기본구조===
<youtube>https://www.youtube.com/watch?v=j1_Og0zl-jU</youtube>
{{youtube|j1_Og0zl-jU}}
*반복해서 문장을 수행해야 할 경우 사용한다
 
*True(사실)이면 스크립트 계속 반복
<syntaxhighlight lang="python">
*False(거짓)이면 스크립트 끝남
<source lang="python">
while 조건:
while 조건:
실행 할 문장 1
실행할 문장 1
실행 할 문장 2
실행할 문장 2
...
...
</source>
</syntaxhighlight>
* while도 if와 마찬가지로 들여쓰기를 사용해서 사용하는 경우가 많다 보니, <u>Editor Mode</u>에서 코딩을 하는 것이 쉽다.
* 반복문은 반복되는 지루한 작업을 처리합니다.
* 코드의 양이 줄어들고 읽기 쉬워집니다.
* while은 조건을 기준으로 반복합니다.


<source lang="python">
<syntaxhighlight lang="python">
예제 1
count = 0
Whlie count < 3:
whlie count < 3:
     print('횟수:', count)
     print('횟수: ', count)
     count += 1
     count += 1
  </source>


<source lang="python">
횟수: 0
예제 2
횟수: 1
횟수: 2
</syntaxhighlight>
 
===continue, break===
{{youtube|xSB8zkvtFp4}}
* continue : 다시 조건으로 돌아갑니다.
* break : 반복문을 끝내 버립니다.
 
<syntaxhighlight lang='python'>
count = 0
count = 0
while count < 10:
while count < 10:
     count += 1
     count += 1
     if count < 4:
     if count < 4:
         continue
         continue
    print('횟수', count)
     if count == 8:
     if count == 8:
         break
         break
</source>
</syntaxhighlight>
 
==딕셔너리==
===기본구조===
{{youtube|yW2MZzAyjmE}}
 
<syntaxhighlight lang='python'>
{key1: value1, key2: value2, key3: value3 ...}
</syntaxhighlight>
 
* 딕셔너리를 말 그대로 해석하면 사전입니다.
* 딕셔너리는 키(key)와 값(value)을 쌍으로 갖는 자료형입니다.
* 리스트와의 차이점은 관련된 정보를 연관시킨다는 것입니다.
* 리스트는 값을 다루기 위해 인덱스를 사용하지만 딕셔너리는 키를 사용합니다.


===continue, break===
<syntaxhighlight lang='python'>
<youtube>https://www.youtube.com/watch?v=xSB8zkvtFp4</youtube>
>>> my_dict = {}  # {}
* for, while 문구 안에서의 루프도중 결과값을 무시하고 그대로 실행할지, 강제로 종료후 루프를 빠져올지 결정하는 코드
>>> my_dict[1] = 'a'  # {1: 'a'}
<source lang='python'>
>>> my_dict['b'] = 2  # {1: 'a', 'b': 2}
countdown = 10
>>> my_dict['c'] = 'd'  # {1: 'a', 'b': 2, 'c': 'd'}
print("나랑 결투를하자")
</syntaxhighlight>
print("10초후 총을 발사할것이다")
 
print(str(countdown) + "!")
===값 추가하기===
* 딕셔너리는 아래와 같은 방법으로 값을 추가합니다.
 
<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>


while countdown > -10 :
===값 제거하기===
    countdown = countdown - 1
* del을 이용해 키, 값 쌍을 제거합니다.
    if countdown == 2:
        print(str(countdown) + "!")
        continue
    elif countdown == 1:
        print(str(countdown) + "!")
        print("Bang!")
        break
</source>


countdown 은 while 루프가 한바퀴 실행될때마다 1씩 줄어들게된다
<syntaxhighlight lang='python'>
하지만 continue 문이 2와 같을때까지 중간과정을 생략하고 진행하게 된다
>>> my_dict = {'학생1': 'Tom', '학생2': 'Sally', '학생3': 'Betty', '학생4': 'Angela'}
if문구가 끝나고 elif 문구의 countdown 이 1에 도달했을때 실행문을 출력하고
>>> del my_dict['학생4']
while 문구는 countdown이 -10보다 클때까지 실행을 해야되지만
>>> print(my_dict)
countdown 이 1일때 break 문구로 루프를 종료하였다
{'학생1': 'Tom', '학생2': 'Sally', '학생3': 'Betty'}
<source lang="python">
</syntaxhighlight>
"나랑 결투를하자"
"10초후 총을 발사할것이다"
"10!"
"2!"
"1!"   
"Bang!"
</source>


===무한 루프===
=== 메서드 ===
*파이썬에서 무한 루프는 while문으로 구현할 있다. 다음은 무한 루프의 기본적인 형태이다.
{{youtube|mAf_gK6EEmg}}
<source lang='python'>
* 메서드는 특정 객체만 사용할 있는 함수를 말합니다.
while True:  
* dict.values(): 딕셔너리에서 값만 뽑아 돌려줍니다.
    수행할 문장1
    수행할 문장2


</source>
<syntaxhighlight lang="python">
*while문의 조건문이 True이므로 항상 참이 된다. 따라서 while문 안에 있는 문장들은 무한하게 수행되는 것이다.
students = {'학생1': 'Tom', '학생2': 'Sally', '학생3': 'Betty'}
for student in students.values():
    print(student)


*무한 루프의 예
Tom
<source lang='python'>
Sally
while True:
Betty
    print("지우셔도 됩니다.")
</syntaxhighlight>


지우셔도 됩니다
* dict.keys(): 딕셔너리에서 키만 뽑아 돌려줍니다.
지우셔도 됩니다
지우셔도 됩니다
지우셔도 됩니다
지우셔도 됩니다
지우셔도 됩니다
지우셔도 됩니다
지우셔도 됩니다
지우셔도 됩니다
......   


</source>
<syntaxhighlight lang="python">
students = {'학생1': 'Tom', '학생2': 'Sally', '학생3': 'Betty'}
for key in students.keys():
    print(key)


== 딕셔너리 ==
학생1
학생2
학생3
</syntaxhighlight>


===접근하기===
* dict.items(): 딕셔너리에서 키와 값 쌍을 뽑아 돌려줍니다.
<source lang='python'>
"""TBD"""
</source>


===제거하기===
<syntaxhighlight lang="python">
<source lang='python'>
students = {'학생1': 'Tom', '학생2': 'Sally', '학생3': 'Betty'}
"""TBD"""
for key, val in students.items():
</source>
    print(key, val)


===딕셔너리 메서드===
학생1 Tom
<source lang='python'>
학생2 Sally
"""TBD"""
학생3 Betty
</source>
</syntaxhighlight>


==함수==
==함수==
===종류===
===기본구조===
sum
{{youtube|SndQ4sG4qek}}
say
* 수학에도 함수가 있고, 엑셀에도 함수가 있습니다.
many
* 우리가 사용해왔던 print(), input() 등도 모두 함수입니다.
mul
* 반복되는 코드에 이름을 붙여서 다시 사용할 수 있게 합니다.
nick
* 필요할 때 함수의 이름을 불러서 사용할 수 있습니다.
<source lang='python'>
* 통나무가 마술모자에 들어가면 마술빗자루가 나옵니다.
"""TBD"""
* 이와 유사하게 입력 값이 함수에 들어가면 출력 값이 나옵니다.
</source>
 
<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>
**짧게 작성할 수 있다.
**프로그램의 순서 또는 흐름을 쉽게 볼 수 있다.
<source lang='python'>
"""TBD"""


</source>
=== 함수를 사용하는 이유 ===
{{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년 파이썬이 만들어졌다.
파이썬은 우리나라를 비롯한 동아시아 지역에서는 아직 대중적으로 사용되지 않지만 서양에서는 교육을 비롯해 많은 곳에서 사용되고 있다.
파이썬은 구글이 애용하는 언어 중 하나로 컴퓨터에서 쉽게 사용될 수 있는 언어이다.
파이썬은 다른 언어들에 비해서 쉽고 배우기도 편해서 요즈음 핫한 언어로 떠오르고 있다. 하지만 파이썬은 다른 언어에 비해 실행 속도가 빠른 앱을 만들기 어렵고
복잡한 명령어는 수행하기 어려워 빠른 속도가 필요한 앱에는 사용되지 않고 있다.
그래도 파이썬을 먼저 배우면 다른 언어를 배우기 쉬운 만큼 지금 먼저 같이 배우기를 추천한다.(프로그래밍 경험이 없는 사람도 같이 즐길 수 있다!)
===[[귀도 반 로섬]]은 누구인가?===
[[귀도 반 로섬]] (Guiido van Rossum)은 네덜란드 출신의 컴퓨터 프로그래머이며, 프로그래밍 언어인 파이썬을 개발했다. 로섬은 2005년부터 2012년까지 [[구글]]에서 일했으며, 2013년부터 구글에서 퇴사해 현재까지 [[드롭박스]]에서 일하고 있다.
귀도 반 로섬은 Stichting Mathematisch Centrum (CWI)에서 일하면서 1986년에 BSD Unix에 glob () 루틴을 작성하고 기고했다. 또한 로섬은 ABC 프로그래밍 언어의 개발에 참여했으며, 나중에 a,b,c언어는 파이썬을 제작할 때 쓰였다.
===이 책을 읽는 방법===
요즈음 시대는 단순히 암기하는 시대가 아니다. 이러한 명령문이 있다는 것을 알고 다시 활용하거나 [[구글]]에 검색할 수 있게 되면 이 강의는 많은 도움이 될 것이다. 그래서 모든 내용을 외우려 하지 마시고 편안한 마음으로 봐주시면 좋겠다.
왜 구글으로 검색해야 하나?
구글은 [[네이버]]보다 코딩 관련 자료가 훨씬 많다. 구글에는 다양한 문제 예시와 강의들이 있어 검색하기 편하다.
=== 삼항연산자 ===
* if문을 이용해 변수의 값을 선택할 때, 보통 우리는 이렇게 한다
* a, b 두 값중 더 큰 값을 넣을 때
<syntaxhighlight lang="python">
>>> a, b = 1, 2
>>> 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를 출력한다.
===예외 처리===
* 파이썬 코드 구동시 에러가 일어날 경우 에러를 무시(예외처리) 하고 다음 코딩을 진행하게 해주는 방법
* https://docs.python.org/3/library/exceptions.html 예외처리의 종류
<syntaxhighlight lang='python'>
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
</syntaxhighlight>
===랜덤===
===랜덤===
* <b>Random</b>이란, 여러분들이 생각 하듯이, [[난수]]를 출력하는 것이다.
* 많이 쓰이는 함수에는 이런 것들이 있다.
* 많이 쓰이는 함수에는 이런 것들이 있다.
** random.random()
** random.random()
1,376번째 줄: 1,501번째 줄:
** random.choice(list)
** random.choice(list)
*** list에서 아무거나 하나를 선택한다.
*** list에서 아무거나 하나를 선택한다.
<source lang='python'>
<syntaxhighlight lang='python'>
>>> import random
>>> import random
>>> print(random.random())
>>> print(random.random())
1,388번째 줄: 1,513번째 줄:
>>> print(random.choice(my_list))
>>> print(random.choice(my_list))
4
4
</source>
</syntaxhighlight>
* 으아니?! 여기는 이렇게 나오지만, 당신은 이렇게 나오지 않았을지도 모른다.
* 으아니?! 여기는 이렇게 나오지만, 당신은 이렇게 나오지 않았을지도 모른다.
* 이렇게, 예시에서의 출력과 자신의 출력이 다른 이유는, random이란, [[난수]]를 출력하는 함수이기 때문이다.
* 이렇게, 예시에서의 출력과 자신의 출력이 다른 이유는, random이란, [[난수]]를 출력하는 함수이기 때문이다.


==예외 처리==
==무편집영상==
<source lang='python'>
{{소스헤더|1주차}}
"""try:
{{youtube|P_z2qFcfHeA}}
    ...
except [발생 오류[as 오류 메시지 변수]]:
    ..."""
</source>


==객체==
{{소스헤더|2주차}}
** 클래스라고도 한다. 객체를 생성하기만 하면 되기 때문에 함수를 사용하는 경우와 달리 매우 간단해진다.
{{youtube|_0jqO-56tA0}}
<source lang='python'>
class object():
        ...


</source>
{{소스헤더|3주차}}
{{youtube|o9QCtLb2Prs}}


==코드 스타일==
{{소스헤더|4주차}}
===PEP8===
{{youtube|XzKcdmWg0Jk}}
<source lang='python'>
"""TBD"""
</source>


==구글링==
==기타 사이트==
<source lang='python'>
* https://www.facebook.com/khimacademy: 왼손코딩 페이스북 페이지
"""TBD"""
* https://wikidocs.net/book/1421: 김왼손과 집단지성들 정규 1집 미운코딩새끼
</source>
* http://band.us/#!/band/64154740: 왼손코딩 네이버 밴드
* http://cafe.naver.com/leftcording: 김왼손 선생님에 관련된 내용을 만나볼 수 있습니다.
* http://cafe.naver.com/studentcoding: 학생들과 같이 코딩에 대하여 함께 공부할 수 있습니다.


==플러스 알파==
==문서 정보==
* 홍보
'''미운코딩새끼'''
** [http://cafe.naver.com/leftcording 왼손코딩 팬카페]
* 제 1판 1쇄 펴낸 날 2017년 9월 7일
** [http://cafe.naver.com/studentcoding 학생들을 위한 스터디 카페입니다~]
* 지은이 : [[김왼손]]과 집단지성들
* IDLE 커스텀
* 펴낸곳 : 왼손코딩 유튜브 (https://goo.gl/xHi84G)
** IDLE theme customizing 검색
* 제작기간 : 2017년 9월 7일~
* IDLE을 켠 후, Options → Configure IDLE에서 글꼴, 색 등을 바꿀 수 있다
* 이 문서가 만들어지는데 큰 도움을 주신 '''조희진'''님, 훌륭한 강의를 해주신 '''[[김왼손]]'''님께 감사합니다. -제작자 일동-
* 사이트
** [http://pythontutor.com/ 파이썬 튜터]


==플러스 베타==
==같이 보기==
* 파이썬에 대한 궁금한 점은 여기에 적어주세요.
* [[유기농냠냠파이썬]]
파이썬문법이 저만 어려운가요?


[[분류: 코딩]]
[[분류: 파이썬]]
[[분류: 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 같이 보기