유기농냠냠파이썬

1 ※ 주의사항 ※[ | ]

본 문서는 유튜브 채널 김왼손의 왼손코딩에서 생방송으로 강의했던 유기농냠냠파이썬을 구독자들이 자율적으로 정리한 문서입니다. 유기농냠냠파이썬의 강의 내용과 다르거나 오류를 포함하고 있을 수 있으니 유의해 주시기 바랍니다. 유기농냠냠파이썬 전체 강의는 Udemy에서 찾아 보실 수 있습니다.

유기농냠냠파이썬 보러가기: https://www.udemy.com/unp_python/

2 유기농냠냠파이썬[ | ]

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

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

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

2.1 김왼손과 집단지성들[ | ]

김왼손과 집단지성들은 잉끼유튜버 김왼손과 그 열혈 구독자들이 함께하는 코딩계의 아이돌 그룹입니다. 정규 2집 유기농냠냠파이썬에 참여해 주신 분들은 아래에 기록을 꼭 남겨주세요. 닉네임과 이메일을 적어주시면 됩니다. 순서는 상관 없습니다. 참여해 주신 모든 분들께 진심으로 감사드립니다.

  • 토미유튜브 [tjdwn1416@gmail.com] - 메인 보컬(유기농냠냠파이썬 주요 편집)
  • 이에스 [hubolab10@gmail.com] - 서브 보컬 ( 실시간 스트리밍 채팅 살리기 + 예제 제작 )
  • JW호박 pumkin [pjwbrain@naver.com] - 메인 댄서(실시간 스트리밍 채팅 살리기 + 유기농냠냠파이썬 보조 편집)
  • 이승현[himynewfuture@gmail.com] - 코러스(예제 수정, 문맥 수정, 문단 수정, 말투 수정, 제목 수정, 예제 추가, 제목 추가)
  • JK Jung [jaekook.jeong@gmail.com]
  • 큰손 ( 보조 편집자)
  • Park6000
  • MANGO 망고 [mingyu041209@naver.com] - 작사가
  • 웃는남자 [namja1325@naver.com]
  • Young
  • Sean [wansunlee@gmail.com]
  • LEE SANG MIN[andych5789@gmail.com]
  • 몹쓸 프포자[realgeek0509@naver.com] (무슨 역할을 할까요..?)
  • 흰구름[bsjsean1402@gmail.com](저도 무슨 역할을 할까요??)

2.2 유기농냠냠파이썬 키우기[ | ]

  • 김왼손은 강의합니다.
  • 열혈 시청자들은 듣고, 배웁니다.
  • 모두 함께 정리합니다.

※warning※ 강의 중에는 내용이 겹칠 수 있으니 메모장에 미리 적어났다가 복사 붙여넣기를 이용해 빠르게 내용을 삽입하세요.

3 들어가기 전에[ | ]

3.1 이 강의의 특징[ | ]

  • 이 강의는 코딩을 한번도 배우지 않은 사람을 대상으로 합니다. 그래서 쉽고 빨리 배울 수 있습니다. 현재 만들어진 다른 강의를 보면 내용이 어려운 강의가 많습니다. 따라서 불필요한 내용도 많이 실려져 있습니다. 그래서 이 강의는 초심자에게 꼭 필요한 내용을 담고 있어서 이 강의를 끝내면 다른 프로그램을 만들거나 더 어려운 강의를 들을 수 있게 됩니다.

3.2 이 문서 두배로 즐기기[ | ]

  • 이 문서에는 여러분이 직접 참여하실 수 있도록 다양한 예시와 실습자료가 준비되어져 있습니다. 따라서 여러분이 직접 문서를 보며 따라하시면 더 오래 기억하실 수 있습니다. 그리고 여러분이 이 문서를 읽으시다가 궁금한 점이 생기면 구글에 검색하시면 많은 정보를 얻으실 수 있습니다. (네이버에는 파이썬 관련 내용이 많지 않습니다)

3.3 프로그램과 프로그래밍[ | ]

3.3.1 프로그래밍이란?[ | ]

  • 프로그래밍은 프로그램을 만드는 과정을 말합니다. 프로그램은 우리가 컴퓨터에게 일을 시키는 것입니다. 대표적인 것으로는 계산기 프로그램, 다이어트 프로그램, 주식예측 프로그램 등이 있습니다. 이러한 프로그램을 사용하면 더 빠른 시간에 여러 일을 할 수 있습니다.

3.3.2 프로그래밍 언어[ | ]

  • 우리가 외국인에게 한국어를 사용하면 알아듣지를 못합니다. 컴퓨터도 마찬가지입니다.
  • 그래서 컴퓨터가 알아들을 수 있는 언어를 사용하여야 하는데 이를 프로그래밍언어라고 합니다.

3.3.3 프로그램의 구조[ | ]

  • 프로그램은 크게 순차, 반복, 선택이라는 기본 구조를 가지고 있습니다. 직접 말로 설명하지 않고 예시를 들도록 하겠습니다.
  • 순차

>>>오른쪽으로 가라 >>>오른쪽으로 가라 >>>오른쪽으로 가라

  • 반복

>>>오른쪽으로 3번 가라

  • 선택
    • >앞에 몬스터가 있는가?
      • >예 : 공격을 하라
      • >아니요 : 앞으로 가라

3.4 왜 파이썬일까요?[ | ]

3.4.1 파이썬의 탄생[ | ]

  • 파이썬은 귀도 반 로섬(Guido van Rossum)에 의하여 만들어졌습니다. 그는 자신이 있던 프로젝트가 성과가 없다는 이유로 종료되자, 자신이 자신이 속했던 ABC프로젝트에서 만든 프로그래밍 언어인 ABC를 바탕으로 새로운 분산환경 시스템에 맞으면서 C와 셀에서 부족한 부분을 채워주는 새로운 언어를 개발하고자 1989년부터 파이썬 개발에 착수하고 1990년에 완성시켰습니다.

3.4.2 파이썬의 장점[ | ]

  • 빠르다(여기서 빠르다는 것은 실행속도가 빠르다는 것이 아닌, 개발 속도가 빠르다는 것입니다.)
    • 실제로 C언어와 파이썬을 비교해보면,
C언어
#include <stdio.h>

int main(void)
{
    printf("Hello, World!");
    return 0;
}
C언어 결과
Hello, World!
파이썬
print("Hello, World!")
파이썬 결과
Hello, World!
  • 이렇게 몇 줄을 타이핑하지 않아도 똑같은 결과값을 가져오므로 빠른 시간에 코드를 작성할 수 있습니다.
  • 쉽고 간결하다
    • 위 예제에서 보셨듯 파이썬은 다른 언어보다 더 쉽고 더 짧게 코드를 작성할 수 있습니다. 그 덕분에 초심자들이 익히기에 적당합니다.
    • 똑같은 결과값을 내는 코드들을 하나의 함수로 간추려(지금은 모르셔도 됩니다), 더욱 간결하게 코드를 짤 수 있습니다.
  • 검색 결과가 많다
    • 파이썬은 관련 서적이 많으며, 특히 구글에 검색할 시 결과가 많이 나옵니다. 영어로 치면 외국자료들까지 인용이 가능하여 더 많은 검색 결과가 나옵니다.
    • 이러한 인터넷 자료는 여러분이 프로그램을 만들 때 도움이 됩니다.

3.5 파이썬의 이용[ | ]

  • 파이썬은 다양한 곳에서 이용이 됩니다.

3.5.1 구글의 애용[ | ]

  • 파이썬은 구글에서 애용하는 언어로 파이썬의 제작자인 귀도 반 로섬이 구글에 입사하면서부터 자주 사용되었습니다. 그래서 현재 구글의 3대 언어 중 하나가 되었습니다.

3.5.2 파이썬 활용[ | ]

파이썬은 웹개발에서부터 게임개발 그리고 데이터 분석과 머신러닝까지 그 활용도가 무궁무진하여 여러 사람들에게 각광받고 있습니다.

3.5.2.1 웹개발[ | ]

파이썬의 웹 프레임워크 중 하나인 '장고(Django)'를 활용해서 개발된 웹사이트로는 다음과 같은 여러 앱들이 있습니다.

유튜브(YouTube) 비디오 공유 서비스
드롭박스(DropBox) 파일 호스팅 서비스
구글(Google) 정보 검색 서비스로 세계에서 가장 유명한 사이트 중 하나
핀터레스트(Pinterest) 이미지, 동영상 검색 및 공유 서비스
인스타그램(Instagram) 이미지, 동영상 공유 서비스
스포티파이(Spotify) 음악, 팟캐스트, 동영상 스트리밍 서비스
비트버킷(Bitbucket) 소스코드와 개발 프로젝트 호스팅 서비스
프레지(Prezi) 프레젠테이션 서비스로 줌, 인 아웃 기능으로 주목을 받고 있음

3.5.2.2 게임[ | ]

이브 온라인(링크) 파이썬에서 스택 제한을 없앤 StacklessPython으로 쓰여진 게임
야생의 땅 : 듀랑고( 링크) 넥슨의 왓 스튜디오에서 제작된 모바일 MMORPG 게임. 게임서버 개발 언어로 Python과 C를 활용.

3.5.2.3 데이터 분석[ | ]

파이썬의 데이터 분석 라이브러리를 통해 방대한 양의 데이터에 알맞은 방법으로 접근하고, 효과적인 방법으로 분석할 수 있게 되었습니다.

데이터 분석 라이브러리
NumPy http://www.numpy.org
Pandas https://pandas.pydata.org
IPython https://ipython.org
SciPy https://www.scipy.org
데이터 시각화 라이브러리
Matplotlib https://matplotlib.org
Seaborn https://seaborn.pydata.org
Bokeh https://bokeh.pydata.org
Plotly https://plot.ly

3.6 파이썬 설치[ | ]

3.6.1 버전[ | ]

  • 파이썬은 크게 3버전2버전으로 나눌 수 있습니다. 3버전은 최신 버전이며, 2버전와 호환이 되지 않는 부분들이 다수 존재하기에 주의를 요합니다.

3.6.1.1 어떤 버전을 쓸까?[ | ]

  • 보편적으로 사람들은, 파이썬 3버전(3. X)을 추천합니다. 2버전과 비교를 했을 때, 더욱 쉽고, 꾸준히 업데이트가 되며, 많은 최신 서적들 역시 주로 3버전을 다루고 있기 때문입니다. 또한 파이썬 2버전(2. X)은 더이상 추가 업데이트를 하지 않겠다고 공식 발표를 했습니다. (2020년부터 지원 종료)

3.6.2 파이썬 다운로드[ | ]

3.6.2.1 주의해야 할 점[ | ]

  • 다운로드 경로를 지정하고, add to path를 누르고 가는 것이 초심자들에게 좋습니다. 이는 추후에 유용하게 사용됩니다.

3.7 IDLE[ | ]

  • 파이썬을 처음 받으시고 다운로드 받은 폴더를 여시면 IDLE 라는 파일이 있으실 겁니다. IDLE는 사용자와 상호작용 할 수 있는 파이썬 에디터로 간단한 프로그램을 테스트 하거나, 작성할 때 유용하게 사용하실 수 있습니다.
  • 앞으로 보여드릴 예제의 일부는 이 IDLE 양식을 사용합니다. 처음에 엔터를 쳐보시면 이런 것이 뜰 것입니다.
>>>
  • 저희가 앞으로 예제에 사용하는 방식을 이렇게 해석해주시면 되겠습니다.
>>> #프로그래밍 하는 예제코드
#결과
  • 자세한 것은 여러분들이 실습 하시면서 배우시다 보면 자연스럽게 알게 되실 테니 너무 걱정하지는 마시고 천천히 따라오시기 바랍니다.

3.8 print문[ | ]

  • 앞으로 보여드리는 예제에 자주 쓰이는 구문이므로 여기서 짚고 넘어가겠습니다.
  • print문은 출력하는 것을 의미 합니다. 말로 설명하면 오히려 더 어려우니 예시를 보여드리겠습니다.
예제
>>> print('유기농냠냠파이썬')
유기농냠냠파이썬
>>>
  • 다른 예제도 확인해보면,
예제
>>> print("김왼손")
김왼손
>>>
  • 이렇듯 print는 괄호안의 문자를 출력해주는 역할을 합니다.
    • 참고사항 : 파이썬에서 print로 출력을 할 때는, '(작은 따옴표)혹은 "(큰 따옴표)둘 다 사용이 가능합니다.

4 프로그램의 기본재료[ | ]

4.1 숫자형[ | ]

  • 숫자형은 파이썬에서 가장 기본이 되는 자료입니다. 따라서 나중에 유용하게 사용할 수 있습니다.
  • 숫자형은 크게 정수형과 실수형으로 나눌 수 있습니다.
  • 정수형
    • x가 자연수일 때 x 혹은 -x입니다. 예를 들어 -8, 4, 0 등이 있습니다.
  • 실수형
    • 쉽게 생각하면 x가 자연수가 아닐 때 x, 혹은 -x입니다. 예를 들어 0.5, 1.8, -9.54 등이 있습니다.
예제
>>> print(1)
1
>>> print(-1)
-1
>>>print(3.14)
3.14
>>>

4.1.1 더하기, 빼기, 곱하기, 나누기 연산자[ | ]

  • 연산자는 말 그대로 연산을 하기 위해 사용하는 기호를 의미합니다. 더하기, 빼기, 곱하기, 나누기 연산자는 각각 +, -, *, / 기호로 나타낼 수 있습니다.
  • 여기서 주의해야 하실 점은 곱하기는 파이썬에서 X가 아닌 *라는 점입니다.
예제
>>> print(1 + 2)
3
>>> print(3 - 5)
2
>>> print(2 * 3)
6
>>> print(10 / 2)
5

4.1.2 제곱, 몫, 나머지 연산자[ | ]

  • 제곱, 몫, 나머지 연산자는 각각 **, //, % 기호로 나타낼 수 있습니다.
예제
>>> print(2 ** 3)   #2의 세 제곱을 출력합니다
8
>>> print(8 // 3)   #8을 3으로 나눈 몫만 출력합니다
2
>>> print(5 % 6)   #5를 6으로 나눈 나머지만 출력합니다
5
>>>

4.2 변수[ | ]

  • 변수는 계속 변화하는 값으로 함수와 연관성이 깊습니다. 게임에서의 점수가 변수의 예입니다. 쉽게 생각하면 한 상자에 어떠한 값을 저장한다고 생각하시면 됩니다. 변수에는 어떤 값을 더하거나 빼고 곱하거나 나눌 수도 있습니다.
  • 변수명은 변수의 이름입니다. 변수명은 여러분의 자유로 지을 수 있는데 3가지의 규칙이 있습니다.
    • 1. 변수명을 숫자로 시작하면 안됩니다.
    • 2. 띄어쓰기 대신 언더바(_)를 사용합니다.(변수명에 띄어쓰기가 포함되면 에러가 납니다.)
    • 3. 대문자와 소문자를 구별합니다.
      • 추가로, 변수의 의미를 쉽게 알 수 있는 변수명을 이용해야 합니다. 그래야지 시간이 지나도 다시 사용하기 쉽고 자신의 코드를 공유하기 쉽습니다.
  • 변수를 만들 때 사용하는 연산자로 '=' 기호가 있습니다. 평소 수학 용어로 쓰는 '같다'라는 표현과는 다르게 할당 연산자로 a = b 꼴로 적으면 a에 b를 저장한다 라는 의미를 가지고 있습니다.
예제
>>> my_int = 1    #my_int에 1을 할당(저장)합니다.
>>> print(my_int)     
1      #my_int에 저장된 1을 출력합니다.
>>>my_str = 'Python'
>>>print(my_str)
Python
>>>
  • 원래 있던 변수에 새로운 값을 할당하면 원래 할당되어 있던 값이 사라집니다.
예제
>>> print(my_int)    
1            #원래 my_int에 할당되어 있는 값은 1입니다.
>>> my_int = 2       #my_int에 새로운 값을 할당합니다.
>>> print(my_int)
2            #원래 있던 1 대신 새로운 값인 2가 할당되어 출력됩니다.

4.2.1 복합 할당 연산자[ | ]

  • 연산을 하면서 할당도 함께 할 수 있는 연산자입니다.
  • =과 사칙연산을 함께 쓰면서 수식의 길이를 줄여줄 수 있습니다. +=, -=, *=, /=으로 나눌 수 있습니다.
  • 주로 반복을 할 때 자주 쓰입니다.
예제
>>> count = 0
>>> count = count + 1    # i를 1 증가시켜 주는 구문입니다.
>>> print(count)
1
>>> count += 1      #위의 문장을 줄여서 이렇게 표현할 수 있습니다.
>>> print(count)
2

4.3 문자열[ | ]

  • 파이썬에서 사용할 수 있는 재료들 중에서는 숫자뿐만 아니라 문자들도 포함이 됩니다.
  • 문자들을 나열한 것을 문자열 이라고 합니다.

4.3.1 기본구조[ | ]

  • 작은따옴표(‘’), 혹은 큰따옴표("")를 사용합니다.
  • 문자열이란 ‘문자열’ 안에 있는 숫자나 문자를 이야기합니다. 예를 들어 3은 숫자이지만 ' 안에 들어오면 문자열이 되는 것입니다.


예제
>>> my_str1 = a
>>> print(my_str1)
a
>>> my_str2 = 3.14
>>> print(my_str2)
3.14
>>> my_str3 =. coding
>>> print(my_str3)
coding
>>> my_str4 = coding
>>> print(my_str4)
coding
>>>

4.3.2 type 함수[ | ]

  • 이 함수를 사용하면 변수의 타입(자료형)을 알 수 있습니다. 위의 예제를 가져와 사용해보면
예제
>>> print(my_str2)
3.14
>>>
>>> print(type(my_str2))
<class str>          #여기서 str은 string(문자열)의 줄임말 입니다.
  • 이 type 함수로 인해 my_str2에 3.14가 숫자형으로 들어갔지만 ‘’로 인해 문자열로 받아들인다는 것을 알 수 있습니다.

4.3.3 문자열을 이용한 연산[ | ]

  • 문자열들로 연산도 할 수 있습니다. + 와 * 연산자를 사용하는데 +는 문자열을 연결하는 역할을 하고, *는 문자열을 반복하는데 사용합니다.
  • 문자열을 곱하기 할 때에는 (문자열) * (숫자) 형태로 와야 합니다. {(문자열 * (문자열) 안됨}
예제
>>> my_str1 = a + b + c
>>> print(my_str1)
abc
>>> my_str2 = 'cod' + 'ing'
>>> print(my_str2)
coding
>>> my_str3 = '=' * 10
>>> print(my_str3)
==========
>>>

4.3.4 문자열 인덱싱[ | ]

  • 문자열들의 위치를 이용해 문자를 가져올 수 있습니다.
  • 그 위치를 '인덱스' 라고 하며, 인덱스를 이용하여 문자를 가져오는 방법을 '인덱싱' 이라고 합니다.
  • 인덱스는 0부터 시작한다는 점을 주의하셔야 합니다.
예제
>>> alphabet = 'abcde'
>>> print(alphabet[0])
a
>>> print(alphabet[3])
d
>>> print(alphabet[4])
e
>>>
  • 여기서 a = 0, b = 1, c = 2, d = 3, e = 4를 나타냅니다.
  • 음수로도 인덱스를 할 수 있습니다.
예제
>>> alphabet = 'abcde'
>>> print(alphabet[-0])
a
>>> print(alphabet[-3])
c
>>> print(alphabet[-4])
b
>>>
  • 여기서 a = -5, b = -4, c = -3, d = -2, e = -1을 나타냅니다. (0과 -0은 같으므로 -0은 a 입니다.)

4.3.5 문자열 슬라이싱[ | ]

  • 인덱싱을 이용하여 문자 하나가 아닌 여러 개를 가져오는 방법입니다.
  • 대괄호([])와 콜론(:)을 이용하여 [시작 숫자 : 끝 숫자] 꼴로 사용합니다.
  • 슬라이싱에서는 공백도 하나의 글자로 인식되어, 글자로 포함됩니다.
  • 이 또한 인덱스가 0부터 시작하고, 끝 숫자 전까지 숫자를 가져온다는 점을 주의하셔야 합니다.
예제
>>> my_str = 'Hello Python!'
>>> print(my_str[0 : 1])     #0번 인덱스의 문자부터 1번 인덱스의 문자 전까지(0~0)
H
>>> print(my_str[0 : 2])    #0번 인덱스의 문자부터 2번 인덱스의 문자 전까지(0~1)
He
>>> print(my_str[3 : 7])    #3번 인덱스의 문자부터 7번 인덱스의 문자 전까지(3~6)
lo p
>>>
  • 콜론(:) 앞에 값이나 뒤에 값을 생략할 수도 있습니다.
예제
>>> my_str = 'Python'
>>> print(my_str[:3])      #문자열의 처음부터 3번 인덱스의 문자 전까지(0~3)
Pyt
>>> print(my_str[2:])     #2번 인덱스의 문자부터 문자열의 끝까지(2~5)
thon
>>> print(my_str[:])      #문자열 전체
Python
>>>
  • 슬라이싱은 문자를 실제로 잘라 버리는 게 아니라, 자른 만큼 복사해 오는 것입니다. 즉, 슬라이싱을 해도 원본 문자열은 그대로 남아 있습니다.

4.3.6 문자열 메서드[ | ]

  • print와 같이 어떤 특정한 기능을 수행하는 것을 함수하고 합니다.(아직은 모르셔도 됩니다) 메서드라는 것은 특정 자료형이 사용할 수 있는 함수를 말합니다.
  • 저희가 앞으로 배울 것은 문자열 메서드로 문자열에서 사용할 수 있는 함수를 말합니다.

4.3.6.1 문자열 분리하기(.Split)[ | ]

  • .Split()
    • 한 문자열 안을 공백 기준으로 나누어 리스트(나중에 배웁니다)로 저장하는 것을 말합니다.
예제
>>> fruit_str = 'apple banana lemon'
>>> fruits = fruit_str.split()       #apple, banana, lemon을 나눕니다.
>>> print(fruits)
['apple', 'banana', 'lemon']    #요게 나중에 배울 리스트
>>> print(fruits[0])                   #이렇게 인덱싱도 할 수 있습니다.       
apple                
>>> print(fruits[1])
banana
>>>

4.3.6.2 문자열 포맷팅(.format)[ | ]

  • .format()
    • format 메서드를 사용하면 문자열을 좀 더 자유롭게 표현할 수 있으며, 중괄호({})와 함께 사용합니다. 말로 하면 복잡하니 예제부터 보시죠.
예제
>>> print('Life is {}'.format('Short!')) 
Life is Short!     # 이렇듯 format 메서드는 중괄호 안에 format 뒤에 있는 값을 넣어 문장을 만드는 역할을 합니다.
>>> print('{} X {} = {}'.format(2, 3, 2 * 3))
2 X 3 = 6          #이렇게 여러개의 값을 넣을 때에는 먼저 입력된 값 부터 차례대로 중괄호에 들어가게 됩니다.

4.3.7 여러줄 문자열[ | ]

  • 큰따옴표나 작은따옴표를 세 개씩 사용하여 여러줄의 문자열을 표현할 수 있습니다. 예제로 살펴보시죠
예제
>>> print('첫 번째
Error      #작은따옴표 한 개는 한줄의 문자열만 표현하기 때문에 작은따옴표로 마무리 짓지 않고 엔터를 치면 에러가 나게 됩니다.
>>> print('''첫 번째
두 번째        #작은따옴표를 세 번 치게 되면 여러줄의 코드를 줄바꿈해서 출력해줍니다.
세 번째''')
 번째
 번째
 번째
>>> #큰따옴표도 마찬가지 입니다.
>>> print("""첫 번째
두 번째        
세 번째""")
 번째
 번째
 번째
>>>
  • 하지만 작은따옴표와 큰따옴표를 같이 사용하는 이유는 따로 있습니다. 작은 따옴표가 들어가는 문자열을 표현하고 싶을때에 큰따옴표를 사용하기 때문입니다.
예제
>>> print('I'm 김왼손')
Error      #'I'에서 이미 문자열이 끝났기 때문에 이렇게 치면 에러가 날 것입니다.
>>> print("I'm 김왼손")
I'm 김왼손      #이럴 때를 위해 큰따옴표와 작은따옴표를 같이 사용합니다.
>>> print('''"왼손아 너 그러면 안돼!" '엄마'가 큰소리로 말하였습니다."''')
"왼손아 너 그러면 안돼!" '엄마' 큰소리로 말하였습니다."   #이럴 때를 위해 '''와 """ 있는 것이죠
>>>
  • 예제를 보시면 좀 복잡하시겠지만 직접 실습하시면 알게 되실 겁니다.

4.3.8 출력의 끝 지정하기(end=' ')[ | ]

  • print는 기본값으로 줄바꿈을 가지고 있습니다. end를 사용하면 줄바꿈을 없애주거나 바꿀 수 있습니다.
예제
#한번에 타이핑 했다고 생각해주세요

print('coding', end='')           #끝을 빈 문자열로 지정하면서 줄바꿈을 없애줍니다.
print('coding', end='-')         #끝에 -를 넣습니다.
#이 밑에 두 개는 다음에 배우게 됩니다. 
print('coding', end='\n')    #간략하게 설명드리자면 줄바꿈입니다.
print('coding', end='\t')    #간략하게 설명드리자면 tab입니다.
 #결과
codingcoding-coding   
coding

# \ = 백슬래쉬입니다. 한글 키보드를 사용하시는 분들이 백슬래쉬를 쓰시고 싶으신 경우 \를 눌러주시면 됩니다.

4.3.9 이스케이프 코드[ | ]

  • 특정한 기능을 수행하는 문자의 조합이며, 문자열에 포함하여 사용할 수 있습니다.
예제
>>> print('줄바꿈\n줄바꿈')
줄바꿈
줄바꿈
>>> print('탭\t탭')
    


4.3.9.1 이스케이프 코드의 종류[ | ]

외우지 않으셔도 괜찮습니다

  • \n = 문자열 안에서 줄을 바꿀 때 사용됩니다.
  • \t = 문자열 사이에서 탭 간격을 줄 때 사용됩니다.
  • \\ = 문자 \를 그대로 표현할 때 사용됩니다.
  • \' = '(작은따옴표)를 그대로 표현할 때 사용됩니다.
  • \" = "(큰 따옴표)를 그대로 표현할 때 사용됩니다.
  • \r = 캐리지 리턴(줄 바꿈 문자, 현재 커서를 가장 앞으로 이동시킵니다.)
  • \f = 폼 피드(줄 바꿈 문자, 현재 커서를 다음 줄로 이동시킵니다.)
  • \b = 백 스페이스를 줄 때 사용됩니다
  • \000 = 널 문자를 뜻합니다.

4.3.10 C스타일 포매팅 연산자[ | ]

  • 전에 배웠던 .format() 메서드와 같은 역할을 합니다.
  • C언어에서 사용하는 % 연산자를 사용하여 연산을 할 수 있습니다. %s = 문자열, %d = 정수형, %f = 실수형을 받습니다.
  • 이 C 스타일 포매팅 보다 .format() 메서드가 좀 더 파이썬 다운 방법이기 때문에 파이썬을 사용하는 사람들은 .format() 메서드를 더 많이 사용하고 있습니다.
예제
print('Life is %s' % 'Short!')
print('%d x %d = %d' % (2,3, 2*3))
  • 두 번째 줄처럼 %를 많이 사용할 수 있습니다. 괄호 안에 있는 수들을 %d에 넣습니다. 2는 첫번째 %d에, 3은 두번째 %d에, 6(2*3)은 세번째 %d에 들어갑니다.

4.3.11 주석[ | ]

  • 주석은 사람만 읽을 수 있고 컴퓨터는 읽을 수 없는 내용입니다. 메모라고 생각하면 이해하기가 쉽습니다. 이는 이미 만들어놓은 코드를 다른 개발자들 혹은 다른 사람들이 코드를 수정하거나 알아보는데 편리합니다.
  • 주석은 #을 이용해 나타내며 어떠한 내용을 적어도 컴퓨터는 알아보지 못합니다.
예제
>>> print('안녕!') #인사를 하는 코드 
안녕!
>>> #print('안녕!')
>>>
  • 신기하게도 #주석을 넣은 첫번째 줄의 '인사를 하는 코드'와, 두번째 줄의 print('안녕!')부분은 보이지 않고 print('안녕!')부문만 결과가 보이게 됩니다.

5 재료 모으기[ | ]

  • 30명의 학생이 수학 시험을 보았다고 예를 들어봅시다. 지금까지 저희가 배운 내용으로는 my_student1에 1번 학생의 점수를 저장하고, my_student2에 2번 학생의 점수...로 30개를 나타내어야 합니다. 하지만 이런 변수들 여러개를 제어하기 힘듭니다.지금부터는 재료를 한꺼번에 모아서 사용할 수 있는 방법을 배워보도록 하겠습니다.

5.1 리스트[ | ]

  • 재료를 모으는 방법 중 하나이며, [](대괄호)와 함께 사용합니다.

5.1.1 기본구조[ | ]

  • 변수명 = [요소 1, 요소 2, ... , 요소n]의 기본구조를 사용합니다.
예제
>>> my_list1 = []
>>> my_list2 = [1,2,3]
>>> my_list3 = ['a','b']
>>>
  • 빈 리스트를 사용하는 이유는 나중에 값을 추가할 때에 추가할 리스트 즉, 라면을 끓인다고 생각하면 빈 냄비가 있어야 하기 때문입니다.

5.1.2 리스트 인덱싱[ | ]

  • 리스트는 값을 변경할 수 있습니다. 그래서 문자열에 사용하는 인덱스를 사용할 수 있습니다. 그리고 요소 값을 바꿀 수도 있습니다.
예제
>>> my_list = [123, 'abc', '김왼손']
>>> print(my_list[0])
123
>>> print(my_list[1])
abc
>>> print(my_list[-1])
김왼손
>>> my_list[0] = 3.14
>>> print(my_list)
[3.14, 'abc', 김왼손]   #원래 123이었던 값이 3.14로 바뀐 것을 볼 수  있습니다.
>>>

5.1.3 리스트 슬라이싱[ | ]

  • 인덱스를 가지고 슬라이싱도 할 수 있습니다.
예제
>>> my_list = ['a', 'b', 'c']
>>> print(my_list[:1])
['a']      # 맨 앞 인덱스 부터 1번 인덱스 전까지
>>> print(my_list[1:2])
['b']     # 1번 인덱스 부터 2번 인덱스 전까지
>>>

5.1.4 리스트 메서드[ | ]

  • 리스트에서 사용할 수 있는 메서드들이 있습니다.

5.1.4.1 값 추가(.append)[ | ]

  • .append()
    • 빈 리스트에 값을 추가할 때에 사용합니다.
예제
>>> my_list = []
>>> my_list.append(123)
>>> print(my_list)
[123]
>>> my_list.append('abc')
>>> print(my_list)
[123, 'abc']
  • 요소를 추가할 수록 원래 있던 요소의 뒤에 붙게 됩니다.

5.1.4.2 리스트 정렬하기(.sort)[ | ]

  • .Sort()
    • 리스트가 뒤죽박죽 섞여있을 때 숫자 순 혹은, 알파벳 순으로 정렬을 해주는 역할을 합니다.
예제
>>> my_list = [4, 2, 3, 1]
>>> my_list.sort()
>>> print(my_list)
[1, 2, 3, 4]
>>>
>>> my_list2 = ['c', 'b', 'd', 'a']
>>> my_list2.sort()
>>> print(my_list2)
['a', 'b', 'c', 'd']

5.1.4.3 리스트 요소 지우기(.del)[ | ]

  • .del()
    • 값을 지울 때 사용합니다. 여기서 유의하실 점은 값이 지워지면서 원래 있던 값이 앞으로 당겨져 온다는 것입니다.
예제
>>> my_list = [123, 'abc', '김왼손']
>>> del my_list[0]
>>> print(my_list)
['abc', '김왼손']   #123이 지워지면서 abc가 0면 인덱스가 되었습니다.
>>>

5.1.4.4 요소 개수 세기(.count)[ | ]

  • .count()
    • 말 그대로 리스트 요소의 개수를 세어 줄 때 사용합니다. 나중에 요소의 개수가 많아질 때 유용하게 사용됩니다.
예제
>>> my_list = ['a', 'c', 'a', 'b']
>>> print(my_list.count('a'))
2     #리스트 안에 있는 a는 2개이기 때문에 2가 출력됩니다.
>>> print(my_list.count('b'))
1
>>> print(my_list.count('c'))
1
>>>

5.1.4.5 요소의 유무(.in)[ | ]

  • in
    • 리스트 안에 요소가 있는지 없는지를 판단하여 True(참)인지 False(거짓)인지 알려줍니다.
예제
>>> my_list = ['a', 'b', 'c', 'd']
>>> print('a' in my_list)    #'a가 my_list안에 있냐?'라고 물어본다고 생각하시면 됩니다
True
>>> print('f' not in my_list)   #not in을 사용하면 'f가 my_list안에 없냐?'라고 물어보는 뜻이 되겠죠
True
>>> print('e' in my_list)
False
>>>

5.1.4.6 리스트 요소 삭제하기(.remove)[ | ]

  • remove
  • 집단지성 추가사항입니다. 영상에는 나오지 않지만 사용할 수 있는 메서드 입니다.
  • 사용자가 지정한 요소를 삭제해주며, .del()과 비슷한 역할을 합니다.
예제
>>> my_list = [123, 'abc', '김왼손']
>>> my_list.remove(123)
>>> my_list.remove('abc')
>>> print(my_list)
[True]
>>>
  • 참고사항 : del과 다른 점 - del같은 경우, 리스트 요소의 지정한 번호를 삭제해주지만, remove는 사용자가 지정한 리스트 값을 삭제해주는 역할입니다.

5.2 튜플[ | ]

  • 리스트와 거의 동일하지만, 리스트와 달리 값을 변경할 수 없습니다. (이를 전문용어로 이뮤터블이라고 합니다.)
  • 튜플에서는 리스트에서와 달리 대괄호가 아닌 소괄호를 사용하며 그저 쉼표만 써도 만들 수 있습니다.
  • 튜플의 장점
    • 변해서는 안되는 값을 저장할 때 활용 (변하지 않는 값을 지정할 때 활용)
    • 리스트보다 빠름

5.2.1 기본구조[ | ]

  • 변수명 = (요소1,요소2..)
예제
>>> my_tuple1 = ()
>>> my_tuple2 = (1,)   #여기서 주의하셔야 합니다.(자세한 건 예제 끝난 후에)
>>> my_tuple3 = ('a', 'b', 'c')
>>> my_tuple4 = 3.14, 'Python', True  #이렇게 소괄호를 사용하지 않아도 만들 수 있습니다.
>>>
  • 소괄호를 사용하여 하나의 값이 들어간 튜플을 만들 때에는 반드시 값 뒤에 ,를 사용해야 합니다. 소괄호는 다양한 연산에 사용하기 때문에 ,를 사용하지 않으면 값을 문자열로 인식하기 때문입니다.(단, 소괄호를 사용하여 만들때 주의할 점입니다.)

5.2.2 패킹, 언패킹[ | ]

  • 튜플을 사용하는 대표적인 사례입니다.
  • 패킹 : 여러개의 값을 묶는 것 (예 : 리스트, 튜플)
  • 언패킹 : 값을 푸는 것(아래 예시 참고)
예제
>>> my_tuple = 3.14, 'Python', '김왼손'
>>> i, s, b = (123, 'abc', '집단지성')   #하나로 묶여있는 값이 i에는 123, s에는 'abc'...이런식으로 차례대로 들어가게 됩니다.
>>>

6 쉬어가기 - 자신의 IDLE 환경을 만들자[ | ]

  • 아마 왼손님의 강좌를 보신 분들이라면 자신의 IDLE 환경과 왼손님의 IDLE 환경이 다른 것을 볼 수 있을 겁니다. 저희도 왼손님처럼 환경을 꾸며볼까요?
  • 유기농냠냠파이썬 이후 왼손님이 따로 알려주신 것입니다. (링크 -> https://www.youtube.com/watch?v=cfwZB9SNMu4) 1시간 14분쯤


6.1 기본적으로 꾸밀 수 있는 환경[ | ]

  • 우선 IDLE를 실행시킵니다.
  • 위쪽에 있는 "Options"에 있는 "Configure IDLE"를 클릭합니다. 이렇게 하면 "Settings"라는 창이 뜰 겁니다.
  • "Highlights"를 클릭합니다.
  • 오른쪽 중간에 있는 "IDLE xxxxxx"를 클릭합니다.
  • 여러가지 선택지가 나오면 자신이 원하는 것을 클릭해서 테마를 바꿉니다.

6.2 마음에 드는 테마가 없으면?[ | ]

  • 구글에 "python highlight theme"을 검색합니다.
  • 아무 사이트에나 들어가서 자신이 원하는 테마를 정합니다.
  • 정한 테마의 엄청난 양의 코드를 복사합니다.
  • 자신의 파이썬이 설치된 파일 -> Lib폴더 -> idlelib폴더 -> config-highlight에 들어가서 맨 아래에 붙여 넣습니다.
  • 저장하고 6-1의 과정을 합니다.

7 횟수로 반복하기[ | ]

  • 반복되는 지루한 작업을 처리할 수 있는 구문입니다. 이는 적은 양을 계산할 때에는 오히려 손해를 볼 수 있으나 많은 명령어를 반복할 때 사용하면 시간을 많이 절약할 수 있습니다.
  • 한눈에 보기 쉽기 때문에 코드를 읽기가 쉬워집니다.

7.1 for문[ | ]

  • 횟수를 기준으로 반복합니다.
  • for, in 키워드는 변수로 설정할 수 없으며, 순서열 뒤에는 반드시 콜론(:)이 붙어야 합니다.
  • for문 아래의 문장들의 앞은 4칸 띄어쓰기가 되어야 합니다.(아마 자동으로 띄어쓰기가 될 것이며, 띄어쓰기를 하는 이유는 나중에 배웁니다)

7.1.1 기본구조[ | ]

기본구조
for 변수 in 순서열(순서열:문자열, 튜플, 리스트처럼 순서가 정해져 있고 여러가지의 값을 갖고 있는 것들):
    실행할 명령1
    실행할 명령2
    ...
  • 여기서 변수를 만들 때 변수명(변수이름)은 여러분의 마음대로 쓰셔도 되지만, 순서열을 표현할 수 있는 변수명을 사용하는 것이 더 좋습니다.
예제
>>> my_list = [1, 2, 3]
>>> for count in my_list:
           print('횟수:', count)

횟수: 1
횟수: 2
횟수: 3
  • 이 개념은 좀 복잡하실 수 있습니다. 그러니 천천히 이해하시면서 읽어보시기 바랍니다.
  • 일단 my_list에 [1,2,3]의 리스트를 저장합니다. 그리고 for문을 이용해 count라는 변수 안에 리스트의 값을 하나씩 집어넣습니다. 먼저, 첫번째 값인 1을 count 변수에 넣고 실행합니다. 여기서 count는 1이 되므로 횟수:1이 출력됩니다. 그 다음엔 두번째 값인 2를 변수에 넣고 실행합니다. 마지막으로 세번째 값인 3을 변수에 넣고 실행합니다. 이제 모든 값을 실행하여서 리스트는 빈 리스트가 됩니다. 더 이상 변수에 넣을 값이 없으므로 종료합니다.

7.1.2 Editor 모드[ | ]

  • 지금부터의 일부 예제는 Editor 모드를 이용했습니다.
  • Editor 모드란?
    • Editor 모드는 IDLE 왼쪽 위의 File 칸을 누르고, New File을 선택하면 나옵니다.
    • 그곳에 작성한 코드는 저장을 할 수 있으며, 한번에 실행이 됩니다.
    • Editor 모드를 사용하여 예제를 작성해보겠습니다.
예제
my_list = [1, 2, 3]
for count in my_list:
    print('횟수:', count)
  • 결과는 F5를 누르거나 Run -> Run Module을 누르고 저장할 곳을 지정하면 나옵니다.
결과
횟수: 1
횟수: 2
횟수: 3
  • 앞으로 일부 저희가 보여드릴 예제는 이렇게 코드와 결과가 분리될테니 양해부탁드립니다.

7.1.3 문자열 반복하기[ | ]

  • 문자열들도 리스트와 마찬가지로 반복할 수 있습니다.
예제
my_str = 'coding'
for letter in my_str
    print('문자:', letter)
  • 문자열인 coding의 알파벳이 한 글자씩 들어가 반복되면서 결과를 만들어냅니다.
결과
문자: c
문자: o
문자: d
문자: i
문자: n
문자: g

7.1.4 들여쓰기[ | ]

  • 위의 예제에서 보셨듯 for문 아래에 자동으로 4칸 띄어쓰기가 된 것을 보실 수 있습니다. 이 방식을 '들여쓰기'라고 합니다.
  • 파이썬에서 콜론(:)이 들여쓰기의 시작이라고 생각하시고 콜론이 붙은 문장 아래의 문장들은 모두 들여쓰기를 해야 합니다.
  • 이렇게 들여쓰기로 묶인 코드들을 '코드블럭' 이라고 합니다.
  • 들여쓰기는 띄어쓰기 4칸, Tab, 띄어쓰기 1칸 혹은 칸 등 다양한 방법들이 있습니다.
  • 다만, 주의하실 점은 들여쓰기가 통일 되어야 한다는 점입니다. 한번 Tab으로 들여쓰기를 하셨다면 다음 문장을 들여쓰기 할 때에도 Tab을 사용해야 합니다. (들여쓰기 방식을 섞어서 사용하면 에러가 발생할 수 있습니다)
  • 주로 띄어쓰기 4칸을 사용하는 것을 권장해 드립니다.

7.1.5 range()[ | ]

  • for문과 함께 많이 쓰이는 함수이며, 숫자를 입력으로 받아, 순서열을 만들어주는 함수입니다.
  • 이런 것들을 내장함수 라고 하는데 내장함수들은 파이썬에 기본적으로 제공하는 함수입니다.
  • 0부터 입력한 값 바로 전까지의 숫자를 이용해 순서열을 만듭니다.
예제
for count in range(3):      
    print('횟수:', count)
  • 여기서 range(3)은 리스트 [0, 1, 2]와 같다고 생각하시면 되는데, range가 리스트를 만든다는 착각을 해서는 안됩니다. 다시 한번 더 말씀드리지만 range는 순서열을 만드는 함수입니다.
결과
횟수: 0
횟수: 1
횟수: 2

7.1.6 range(start, stop)[ | ]

  • 시작값과 끝값을 설정하여 순서열을 만들 수도 있습니다.
  • start 숫자부터 stop 숫자 전까지의 순서열을 만들어줍니다.
예제
for count in range(5, 10):
    print('횟수:', count)
  • 여기서 range의 경우, 5부터 10전까지(5~9)의 숫자가 담긴 순서열을 만들어서 결과를 만들어냅니다.
결과
횟수: 5
횟수: 6
횟수: 7
횟수: 8
횟수: 9

7.1.7 for문 × 2[ | ]

  • for문을 중첩하여 사용할 수도 있습니다. (즉, for문 내에서 또 다른 for문이 실행되는 것입니다.)
예제
for j in range(2):
    for i in range(2):               
        print('i : {} , j : {}'.format(i, j))
  • 이 개념도 복잡하실 수 있으니, 실습을 하며 차근차근 읽어보시기 바랍니다.
  • 하나씩 해석해보면, 먼저 j와 i에 range로 0과 1의 순서열이 각각 만들어집니다. 첫번째 값으로 j에는 0, i에도 0을 할당하여 문장을 실행합니다. 그리고 print는 두번째 for문의 코드블럭 이므로 두번째 줄의 for문을 한번 더 실행하여 j에는 그대로 0, i에는 1이 할당됩니다. 그 후에는 두번째 for문의 순서를 다 돌았으므로 첫번째 for문으로 가서 j에는 1, i는 첫번째 for문의 코드블럭이므로 한번 더 순서열이 실행되어 j에는 1, i에는 0이 할당되어 실행됩니다. 그리고 j는 그대로 1, i는 1이 할당되어 실행되고, 첫번째 for문인 j의 값이 다 떨어졌으므로 코드를 종료하게 됩니다.
결과
i : 0 , j : 0
i : 1 , j : 0
i : 0 , j : 1
i : 1 , j : 1
>>>

7.1.8 리스트 컴프리헨션[ | ]

  • [주의] 심화과정이니 자세히 이해가 되지 않으셔도 됩니다. 따라서 이런 것이 있다는 것만 알고 가시면 됩니다.
  • 리스트를 만들 때 for를 함께 사용하여 간결하게 나타내는 것입니다.
예제
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
odd_numbers = []

for number in numbers:      #이런 식으로 변수명을 복수와 단수로도 많이 사용합니다.
           if number % 2 == 1:      #만약 number를 2로 나눴을 때 나머지가 1이라면,(이 과정에서 나머지가 1인수들 즉, 홀수만 뽑아내게 됩니다)
               odd_numbers.append(number)       #odd_numbers에 number를  추가해라.

print(odd_numbers)
  • 이 코드를 컴프리헨션을 이용하면 간결해집니다.
예제
numbers = [1,2,3,4,5,6,7,8,9,10]
odd_numbers = [number for number in numbers if number % 2==1]

print(odd_numbers)
두 예제의 동일한 결과
[1, 3, 5, 7, 9]

8 조건 판단하기[ | ]

  • 조건이 참이냐, 거짓이냐를 판단하여 처리하는 방향을 바꿀 수 있습니다. 이럴 때 사용하는 것을 조건문이라고 합니다.
  • 조건문에 앞서 필요한 것들 먼저 알아보겠습니다.

8.1 논리형 자료형[ | ]

  • 참, 또는 거짓 두 가지 값만 가지고 있으며, 영어로는 불린 연산자라고 합니다.
  • True/False 이며, 대문자로 시작을 해야 키워드로 인식됩니다.
예제
>>> my_bool1 = True
>>> print(my_bool1)
True
>>> my_boo2 = False
>>> print(my_bool2)
False
>>> my_bool3 = 1 < 2     #1이 2보다 작냐
>>> print(my_bool3)
True
>>> my_bool4 = 1 == 2  #1이 2랑 같냐
>>> print(my_bool4)
False

8.2 비교 연산자[ | ]

  • 두 수, 혹은 자료형을 비교할 때 사용합니다.
  • ==(같냐), !=(다르냐), 부등호 등 수학적 기호를 이용한 다양한 비교 연산자가 있습니다.
예제
>>> my_cmp1 = 1 < 2         #1은 2보다 작냐
>>> my_cmp2 = 1 == 2      #1은 2랑 같냐
>>> my_cmp3 = 2 <= 1      #2가 1보다 작거나 같냐
>>> my_cmp4 = 1 != 2      #1은 2랑 다르냐
>>> my_cmp5 = 1 <= 2 < 3    #1은 2보다 작거나 같고 3보다 작냐
>>> print(my_cmp1, my_cmp2, my_cmp3, my_cmp4, my_cmp5)
True False False True True
>>>

8.3 논리 연산자[ | ]

  • and와 or, not을 이용한 연산자입니다.
  • and가 True가 되기 위해서는 and를 기준으로 양쪽에 있는 값이 모두 참 이여야만 합니다. (하나만 False여도 False가 됩니다)
  • 반면, or은 False or False 일때만 False가 됩니다. (하나만 True여도 True가 됩니다)
  • not은 간단하게 아니라는 뜻으로 not True = False, not False = True가 됩니다.
예제
>>> my_con1 = True and True
>>> print(my_con1)
True
>>> my_con2 = True and False
>>> print(my_con2)
False
>>> my_con3 = True or False
>>> print(my_con3)
True
>>> my_con4 = not True
>>> print(my_con4)
False
  • 비교 연산자를 이용해 표현할 수도 있습니다.
예제
>>> my_con1 = 1 < 2 and 2 < 3      #True and True
>>> print(my_con1)
True
>>> my_con2 = 1 < 2 and 2 < 1     #True and False
>>> print(my_con2)
False
>>> my_con3 = 1 < 2 or 2 < 1       #True or False
>>> print(my_con3)
True
>>> my_con4 = not 1 == 1         #not True
>>> print(my_con4)
False

8.3.1 논리 연산자를 사용하는 이유[ | ]

  • 우리가 논리 연산자를 사용하는 이유는 무엇일까요?
  • 롤러코스터가 있습니다. 이 롤러코스터는 나이가 15살 이상, 키는 150 이상이어야만 탈 수 있다고 가정해보겠습니다. 이럴 때 and를 사용해야 할까요 or를 사용해야 할까요?
  • 만약 나이는 20살인데 키가 140이면 탈 수 없습니다. 혹은, 키가 160인데 나이가 13살이면 탈 수가 없습니다. 나이가 15살 이상, 키가 150살 이상인 분만 탈 수 있으므로 두 값이 모두 참이 되어야 합니다. 따라서 하나만 참이되어도 True가 되는 or보다 둘 다 참이 되어야만 True가 되는 and 를 사용하여야 합니다.
  • 생활에서 예를 들어 보았지만 프로그래밍에서도 비슷한 경우들이 있습니다. 이럴 때에 논리 연산자를 사용합니다.

8.4 if문[ | ]

  • 조건문을 표현하기 위하여 사용하는 키워드 입니다.
  • 조건이 참인지 거짓인지를 판단하여 처리의 흐름을 바꿀 수 있습니다.

8.4.1 기본구조[ | ]

if문의 기본구조
if 조건:
    실행할 명령1
    실행할 명령2
  • 조건이 참이면 명령을 실행하고 거짓이면 빠져나옵니다.(종료합니다)
예제
name = 'Lefty'
if name == 'Lefty':       #만약 name이 Lefty와 같다면
    print('당신이 Lefty군요!')
    print('만나서 반가워요!')
결과
당신이 Lefty군요!
만나서 반가워요!
  • name 값이 달라진다면 당연히 아무 일도 일어나지 않습니다.(직접 해보세요)

8.4.2 else, elif[ | ]

  • if와 같이 쓸 수 있는 구문입니다.
  • else와 elif 모두 if 조건이 참이면 그냥 넘어갑니다.
  • 기본구조는 if와 같으며, if와 else, elif를 한꺼번에 사용할 수도 있습니다.
구문 설명
else
  • if가 거짓일때 else 명령을 실행합니다.
elif
  • else if 의 줄임말입니다.
  • if의 조건문이 거짓일때, elif의 조건문으로 넘어가고,
elif의 조건문이 참이면 elif의 명령문을 실행하고,
elif가 거짓이면 빠져나갑니다.
예제
name = 'Alice'
if name == 'Alice'        #만약 name이 Alice와 같다면
    print('당신이 Alice군요!')
elif name == 'Bob'      #만약 name이 Bob과 같다면
    print('당신이 Bob이군요!')
else:       #아니면
    print('당신은 누구십니까?')
결과
당신이 Alice군요!
  • name의 값은 여러분이 바꿔보시면서 실습해보시기 바랍니다.
  • elif와 else를 같이 사용할 때에는 elif가 먼저 와야 합니다.

9 조건으로 반복하기[ | ]

  • 앞서 살펴보았던 조건 판단하기를 이용하여 반복을 할 수 있습니다.

9.1 while문[ | ]

  • 조건으로 반복하며, 반복되는 지루한 작업을 처리해줍니다.
  • 코드의 양이 줄어들고, 읽기가 쉬워집니다

9.1.1 기본구조[ | ]

기본구조
while 조건문:
    수행할 문장 1
    수행할 문장 2
    수행할 문장 3
  • 조건문이 참인 동안 명령을 계속 실행하고 거짓이 되면 넘어가게 됩니다.
예제
count = 0
while count < 3:       # count가 3보다 작냐
    print('횟수:', count)
    count = count + 1
  • 이 개념은 복잡하지만 if와 비슷합니다. 천천히 읽어보세요
  • 먼저 count에 0을 저장합니다. 그 후 while문을 실행하는데 count에 0이 들어가 있으므로 3보다 작게 됩니다. 조건문이 참이 되므로 아래 있는 print문이 실행이 되고 count에 count + 1의 값인 1(0 + 1)을 다시 저장합니다. 그 후 다시 while문을 돌아서 1은 3보다 작으므로 print문을 실행하고 count에 count + 1의 값인 2(1 + 1)를 다시 저장합니다. 한번더 while을 돌고 count에 count + 1의 값인 3(2 + 1)을 저장합니다. 그 후에 한번더 while을 돌면 조건문이 3 < 3으로 거짓이 되므로 종료합니다.
결과
횟수: 0
횟수: 1
횟수: 2

9.1.2 넘어가기[ | ]

  • 반복문들과 함께 사용할 수 있는 키워드 입니다.
  • continue
    • continue는 조건문으로 다시 돌아갈 수 있게 해주는 키워드 입니다.
예제
count = 0
while count < 5:
    count = count + 1
    if count % 2 == 1:      #만약 count를 2로 나눈 나머지가 1과 같다면
        continue
    print(count)
  • 이 프로그램은 5 이하의 자연수 중 짝수만 골라내는 프로그램입니다.
  • while문에서 제가 주석처리를 해둔 문장의 if문이 핵심입니다. '만약 count를 2로 나눈 나머지가 1과 같다면'이므로 이 문장은 홀수를 나타내는 것입니다. 그러니까, 홀수가 count로 들어오면 continue를 실행하고 continue로 인해 다시 while문으로 돌아가 실행하는 것입니다. 홀수가 count로 들어올 때만 print문이 실행되지 않으므로 결과는 짝수만 출력된 것을 확인하실 수 있습니다.
결과
2
4

9.1.3 멈추기[ | ]

  • continue와 마찬가지로 반복문과 함께 쓸 수 있는 키워드입니다.
  • break
    • break는 조건문을 강제로 멈추게 해주는 역할을 해줍니다.
예제
while True:        #조건이 계속 참이므로 무한히 반복되는 코드가 완성됩니다(이런 것을 무한루프라고 합니다)
   name = input('당신의 이름은?: ')
   if name == '종료':      #만약 이름이 '종료'와 같다면(?)
      print('종료합니다.')
      break           #이 문장의 다음 문장을 실행하지 않고 종료합니다.
   print('{}님, 안녕!' .format(name))
  • 일단 input으로 이름을 입력하고 name에 저장합니다. name에 종료가 아닌 문장이 입력되었다면 print문이 실행되고 무한루프로 인해 이름을 계속 물어볼 것입니다. 하지만 만약 name에 종료가 저장되었다면 '종료합니다'를 출력합니다. 그리고 break로 인해 무한루프이지만 강제로 종료됩니다.
  • 이 예제는 직접 실습해보시기 바랍니다

9.2 입력받기(input)[ | ]

  • 프로그램 실행 중 사용자의 입력을 받는 함수이며, 파이썬 내장함수 입니다.
  • 입력 값은 항상 문자열로 받습니다. (숫자, 리스트 등을 구분하지 않습니다)
  • input은 입력을 받아오는 것과 출력을 하는 두 가지 기능이 있습니다.
예제
 
>>> name = input('이름을 입력하세요 : ')
이름을 입력하세요:                  #여기다 이름을 입력하시면 name에 저장됩니다
>>> print(name)
#아까 입력하신 이름
>>> print('안녕, {}!'.format(name))
안녕, (이름)!

9.3 자료형 바꾸기(int, str)[ | ]

  • 문자열로 들어온 숫자는 연산에 사용할 수 없습니다. 그럴 때 자료형을 바꾸어 주는 함수들입니다.
예제
>>> age = int(input('나이를 입력하세요:')) 
나이를 입력하세요:  #이름 입력
>>> print('{}살 이시군요!' .format(age - 3))
(이름 -3) 이시군요!
  • 앞에 int 함수가 없었다면 나이를 숫자로 입력하여도 컴퓨터는 문자열로 인식할 것이고, 밑의 print문에 있는 연산을 하지 못하겠죠. 하지만 int 함수로 인해 컴퓨터는 숫자만 나이로 받습니다. 따라서 연산도 되는 것이죠. (int를 뺀 문장에서 어떤 결과가 나오는지 직접 실습해보세요)

10 재료 모으기 2[ | ]

  • 이제부터는 새로운 재료 모으기 방법을 배워볼 것입니다.

10.1 딕셔너리[ | ]

  • 딕셔너리는 키와 값을 쌍으로 저장하는 자료형입니다. 리스트는 인덱스를 사용하여 딕셔너리는 인덱스 대신 키를 사용합니다.

10.1.1 기본구조[ | ]

기본구조
{키1:값1, 키2:값2, ...}
  • 딕셔너리에서 키로 사용할 수 있는 것들은 이뮤터블(immutable, 변경할 수 없는)이므로 숫자, 문자를 키로 사용할 수 있다고 생각하시면 되겠습니다.
예제
>>> my_dict1 = {1 : 'a', 2 : 'b'}
>>> my_dict2 = {'a' : 1, 'b' : 2}
>>> my_dict3 = {1 : 'a', 'b' : 2}
>>> print(my_dict1)
{1 : 'a', 2 : 'b'}
  • 콜론(:)으로 묶고, 콤마(,)로 구문합니다.

10.1.2 값 추가하기[ | ]

  • 딕셔너리에서는 키를 이용하여 값을 추가할 수 있습니다.
예제
>>> my_dict = {}
>>> my_dict[1] = 'a'     #1(키)를 이용하여 'a'라는 값을 추가합니다.
>>> print(my_dict)
{1: 'a'}
>>> my_dict['b'] = 2     #b(키)를 이용하여 '2'라는 값을 추가합니다.
>>> print(my_dict)
{1: 'a', 'b': 2}
>>> my_dict['c'] = 'd'   #c(키)를 이용하여 'd'이라는 값을 추가합니다.
>>> print(my_dict)
{1: 'a', 'b': 2, 'c': 'd'}
>>>
>>> print(type(my_dict))    #참고로 딕셔너리의 타입은 dictonary의 줄임말인 'dict'로 나옵니다.
<class 'dict'>

10.1.3 값 접근하기[ | ]

  • 키를 이용하여 값을 가져오거나 제거할 수 있습니다.
예제
>>> my_dict = {1 : 'a', 'b' : 2, 'c' : 'd'}
>>> (my_dict[1])  #a의 키인 1을 이용하여 값인 a를 가져옵니다.
a
>>> (my_dict['b'])  #2의 키인 b를 이용하여 값인 2를 가져옵니다.
2
>>> (my_dict['c'])  #d의 키인 c를 이용하여 값인  d를 가져옵니다.
d
>>>

10.1.4 값 삭제하기[ | ]

  • 값을 제거할 때는 del이라는 키워드를 사용합니다.
예제
>>> my_dict = {1 : 'a', 'b' : 2, 'c' : 'd'}
>>> del my_dict[1]    #a의 키인 1을 이용하여 값인 a를 지웁니다.
>>> print(my_dict)
{'b' : 2, 'c' : 'd'}
>>> del my_dict['b']   #2의 키인 b를 이용하여 값인 2를 지웁니다.
{'c' : 'd'}
>>> del my_dict['c']    #d의 키인 c를 이용하여 값인 d를 지웁니다.
{}     #값이 다 제거되었으니 빈 리스트가 되죠
>>>

10.1.5 딕셔너리 메서드[ | ]

  • .values()
    • 값만 뽑아오는 메서드 입니다.
예제
my_dict = {'k1' : 'v1', 'k2' : 'v2'}
for val in my_dict.values():
    print(val)
결과
v1
v2
  • .keys()
    • 키만 뽑아오는 메서드 입니다.
예제
my_dict = {'k1' : 'v1', 'k2' : 'v2'}
for key in my_dict.keys():
    print(key)
결과
k1
k2
  • .items()
    • 키와 값 둘 다 뽑아오는 메서드 입니다.
예제
>>> my_dict = {k1: v1, k2: v2}
>>> for key, val in my_dict.items():
           print(key, val)
예제
>>> my_dict = {k1: v1, k2: v2}
>>> for key, val in my_dict.items():    
           print(key, val)
  • 여기서 파이썬적인 개념으로 들어가면 items()에서 딕셔너리를 언패킹해서 key와 val에 넣는다고 보시면 됩니다.
결과
k1 v1
k2 v2

11 모아서 다시 쓰기[ | ]

11.1 함수[ | ]

  • 좀 뜬금없지만(?) 여러분에게 돌을 금으로 바꿀 수 있는 능력이 있다고 가정해봅시다. 어느 날 여러분의 능력을 안 친구가 돌을 금으로 바꾸어달라고 부탁합니다. 어쩔 수 없이 만들어주었죠. 친구는 그걸 또다른 친구에게 알려주고, 또다른 친구도 여러분에게 금을 만들어달라고 부탁합니다. 또 해주죠. 이 소문이 사방으로 퍼져 이제 주변의 모든 사람이 금을 만들어달라고 합니다. 한사람 한사람 만들어주어야 하니 여러분은 이게 너무 귀찮은거죠. 생각해보니 반복되는 작업을 계속하고 있는 것이었습니다. 그래서 마법의 항아리를 만들게됩니다. 이 항아리에 돌을 입력으로 넣으면 금이 출력으로 나오는 것이죠. 이렇게 되면 노력과 시간이 절약될 것입니다. 이 마법의 항아리를 파이썬에서는 함수라고 합니다. 반복되는 작업을 묶어 이름을 붙여주는 것이죠. 반복되는 작업을 줄여줌으로서 코드의 양을 줄일 수 있습니다.
  • 어려운 개념이라 말을 길게 늘여놓았는데 꼭 한번씩 읽어보셨으면 좋겠습니다. 코드의 양을 획기적으로 줄여줄 수 있는 것이 바로 함수이기 때문입니다.

11.1.1 기본구조[ | ]

함수 만드는 법
def 함수이름 (인자 1, ....):    
    실행할 명령 1
    실행할 명령 2
    return 결과
  • 함수이름을 설정하기 위해 반드시 def 키워드를 사용합니다.
  • 인자는 입력받는 값(전달받는 값)이라고 생각하시면 됩니다.
  • 함수의 결과를 돌려주고 싶으면 return을 사용하면 됩니다.
  • 이 코드를 실행시키면 결과가 출력되지 않습니다. 함수는 코드를 모아서 묶은 후, 이름을 붙인 코드 덩어리뿐이기 때문이죠. 그렇다면 이 함수를 사용하려면 어떻게 해야 할까요?
  • 예제를 위해 직접 함수를 만들어 실행시켜 보겠습니다.
예제
def my_sum(n1, n2):
    return n1 + n2
  • 이 함수는 my_sum(숫자1, 숫자2)를 실행시키면 숫자1 + 숫자2의 결과를 출력하도록 만든 함수입니다. 에디터 모드이므로 저장을 하고 직접 실행시켜 보겠습니다.
결과
>>> my_sum(1, 2)  # 함수이름(숫자1, 숫자2)의 꼴로 실행시키면,
3     # 숫자1 + 숫자2의 형태로 출력됩니다.
>>> my_sum(2, 6)
8

11.1.2 함수의 종류[ | ]

  • 함수에는 크게 세가지 종류가 있습니다.
  • 내장 함수
    • 파이썬에 이미 내장되어져 있는 함수로, 별다른 명령어가 필요없이 바로 사용할 수 있습니다. (예시 -> print, input 등)
  • 모듈 함수(나중에 배움)
    • 함수와 변수 그 외의 것들을 모아둔 함수로, 명령어를 이용해 모듈을 불러와 사용할 수 있습니다. (예시 -> time, random 등)
  • 사용자 정의 함수
    • 사용자가 직접 제작하여 사용되는 함수로, 나만의 함수를 제작할 수 있습니다. (예시 -> 아까 우리가 작성한 숫자 더하기 코드 등)

11.1.3 함수를 사용하는 이유[ | ]

  • 아까 함수개념 설명에 이용했던 상황을 불러와서 이야기 해보겠습니다.
  • 코드를 관리하기 쉽다
    • 만약 친구들에게 금을 만들어주다가 마법의 항아리에 문제가 생기면 이 항아리만 바꿔주면 다시 정상적으로 작동하겠죠. 그런데 만약에 100명에게 금을 각각 만들어주는 코드를 사용하여 100줄의 코드를 작성하였는데, 어느 한 부분에서 문제가 생긴다거나, 다른 형태로 바꾸고 싶으면 이 100줄의 코드를 전부 바꾸어야 하는 불편함이 생깁니다. 이런 면에서 코드를 관리하기 쉽습니다.
  • 조립해서 사용할 수 있다
    • 나중에는 함수들을 작은 단위로 만들다 보면 나중에는 이 함수들을 다시 모아서 빠른 시간에 프로그램을 만들 수 있으므로, 조립해서 사용할 수 있습니다.
  • 다시 사용할 수 있다
    • 친구에게 금을 주기 위해 만든 항아리를 이용하여 다른 사람에게도 반복하여 줄 수 있으니, 시간과 노력면에서 효율적이므로, 다시 사용할 수 있습니다.

11.1.4 여러 개 돌려주기[ | ]

  • 함수를 만들 때, 인자나 return은 없어도 됩니다. 이런 인자나 return을 여러 개 쓰고 싶을 때는 ,(콤마)를 사용합니다.
  • 두 수를 더하고, 곱한 결과를 출력하는 프로그램을 만들어보겠습니다.
예제
def my_sum_mul(n1, n2)
    return n1 + n2, n1 * n2
  • 저장하고 실행해보면,
결과
>>> a, b = my_sum_mul(2, 3)   #a에는 2와 3을 더한 값을, b에는 2와 3을 곱한 값을 넣어주겠습니다
>>> print(a)
5
>>> print(b)
6
>>>
  • 여기서 주의하실 점은 함수의 결괏값은 항상 하나라는 것입니다.
  • 위의 예제를 사용하여 다른 예제로 보여드리겠습니다.
예제
>>> result = my_sum_mul(2, 3)   #result에 2와 3을 더하고 곱한 값을 저장해보겠습니다
>>> print(result)
(5, 6)     #엥? result의 결괏값이 튜플로 나오네요. 무슨 일 일까요?
>>> print(type(result))
<class 'tuple'>      #type 함수를 이용하여 튜플이라는 것을 확인하였습니다
  • 여러 개의 결과를 하나의 변수에 저장하였을 때, return을 거쳐가면서 패킹(값을 묶는 것)이 됩니다. 값이 묶여버려서, 튜플이 되는 것이지요.
  • 명심하세요. 함수의 결괏값은 언제나 하나입니다.

11.1.5 독스트링[ | ]

  • 주석과 비슷하고 함수가 어떤 일을 수행하는지 알려줍니다. 보통 """를 사용합니다.
  • 주석과 같이 코드에는 아무런 영향을 주지 않습니다.
예제
def sum_mul(num1, num2):
    """입력 값을 더하고 곱합니다."""    #이것이 독스트링 입니다.
    return num1 + num2, num1 * num2
  • 나중에 구글에 검색을 하시다 보면, 독스트링이 있는 문서를 보게 되실 수 있습니다.

11.2 모듈[ | ]

  • 다른 사람이 만들어 놓은 함수의 모음입니다.
  • 전문가들이 기존에 만들어 놓은 모듈을 이용함으로써 완성도 있는 프로그램을 쉽고 빠르게 만들 수 있습니다.
  • 필요할 때마다 검색을 통해 원하는 모듈을 찾아 이용할 수 있습니다.

11.2.1 기본구조[ | ]

  • 'import' 키워드를 이용해 모듈을 가져올 수 있습니다.
  • '.' 을 통해 모듈 내의 함수를 이용합니다.
  • 모듈 함수 기본 구조

import 모듈명 모듈명.함수명()

11.2.2 random[ | ]

  • 많은 모듈들 중 대표적으로 random 모듈과 그 함수들을 소개합니다.
  • 다른 모듈들은 필요하실 때마다 구글에 검색하여 찾아보시기 바랍니다.
  • random모듈은 난수나 무작위와 관련된 함수를 포함하고 있습니다.

11.2.2.1 random.choice[ | ]

리스트 내의 값 중 하나를 무작위로 선택해 반환하는 함수
예제
import random    #random 모듈을 사용하기 위해 import를 사용합니다
fruits = ['apple', 'banana', 'lemon']
my_fruit = random.choice(fruits)      #fruits 리스트 내의 값 중 하나를 랜덤하게 리턴합니다.
print(my_fruit)
  • 위 예제를 실행하면 apple, banana, lemon 중 하나가 무작위로 출력됩니다.

11.2.2.2 random.sample[ | ]

지정한 수만큼의 중복되지 않는 값을 리스트 내에서 무작위로 선택해 반환하는 함수
예제
import random
fruits = ['apple', 'banana', 'lemon']
my_fruit = random.sample(fruits, 2)    #fruits 리스트 내의 값 중 2개를 랜덤하게 출력합니다.
print(my_fruit)

- 위 예제를 실행하면 apple, banana, lemon, 3가지의 단어 중 두 개가 무작위로 출력됩니다.

11.2.2.2.1 random.sample 함수 활용하기[ | ]
  • random.sample함수를 활용하는데는 역시 로또뽑는 것이 제격입니다. 아래 예제를 따라 만들어 보세요
예제
>>> import random
>>> print(random.sample(range(1, 46), 6))
  • 복권 번호를 계속 추출해 낼 수 있습니다.

11.2.2.3 random.randint[ | ]

정해진 범위 내의 정수 중 하나를 무작위로 선택해 반환하는 함수
예제
import random
my_int = random.randint(0, 10)   #해당 범위의 정수 중 하나를 랜덤하게 리턴합니다.
print(my_int)

- 위 예제를 실행하면 0~10 사이의 정수 중 하나가 출력됩니다.

12 마무리[ | ]

  • 지금까지 수고하셨습나다. 이 문서에서 배운 내용을 응용하여 여러분만의 작품을 제작해 보시고 즐겁게 코딩하세요!

12.1 기타 사이트[ | ]

12.2 문서 정보[ | ]

유기농냠냠파이썬

  • 지은이 : 김왼손과 집단지성들 시즌 2
  • 펴낸곳 : 왼손코딩 유튜브 (https://goo.gl/xHi84G)
  • 제작기간 : 2017년 11월 25일~
  • 훌륭한 강의를 해주신 김왼손님과 열심히 배운 집단지성님들, 열심히 해주셔서 감사합니다. -제작자 일동-

12.3 같이 보기[ | ]