우리는 지금까지 상수 / 실수 / 문자열 변수의 사용과 그 연산을 자유자재로 할 수 있게 되었다.(할 수 있음 아무튼 그럴 거임). 커지는 프로그램은 필연적으로 많은 변수를 생성하게 되어있다. 예를 들어 교실 관리를 하게 된 우리가 프로그램을 만들고 있는데, 학생의 이름을 변수에 배정한다고 가정하자 우리는 늘 하던 대로 30명의 학생을 관리하기 위해

>> student1="김철수"
>> student2="배철수"
>> student3="윤철수"
>> student4="남궁철수"

...

>>> student30="독고철수"

 

이러한 변수를 만들었다. 그런데 뭔가 이상하다. 더 좋은 방법이 있을 거 같은데... 변수 이름이 너무 많이 생성되는 기분이 든다. 어쩌면 한 변수 안에 많은 것을 담을 수 있지 않을까??

 

이러한 문제는 LIST를 사용함으로써 완벽히 해결된다.. 


LIST의 정의와 사용

LIST는 변수를 일렬로 담아둔 선형구조(일자 구조)의 자료구조이다.

LIST는 지정할 변수명 = list()와 같은 식으로 list를 생성할 수 있고, Python의 문법에 따라 대괄호[ ]로 지정을 하게 되는데, 지정할 변수명 = [(변수 1), (변수 2), (변수 3)... ]의 식으로 초기화까지 진행할 수 있다.

>> student = ["김철수","배철수","윤철수"]

이제 우리는 student를 30번 치는 멍청한 행동을 하지 않아도 된다! 그런데... 어떻게 student변수의 "김철수"를 사용할 수 있을까? 다음과 같이 print를 하면 LIST전체가 출력된다.

>> print(student)
["김철수","배철수","윤철수"]

본격적으로 LIST를 사용하기 위해서 인덱스의 개념을 알아야 한다.

 

인덱스(index)

인덱스란 순서이다. 즉 student의 몇 번째 순서(인덱스)에 있는 변수를 사용할 것이다 처럼 특정한 자료구조의 위치를 집어주는 역할을 해준다. 사용법은 변수명[인덱스]으로 사용한다.

>> print(student[0])
"김철수"

>> print(student[1])
"배철수"

>> print(student[2])
"윤철수"

* 인덱스는 항상 0으로 시작한다. 따라서 "김철수"는 student의 0번째 원소인 것이다. >> 이렇게 1번째부터 만들지 않은 이유는 메모리 구조로 설명할 수 있다. 변수를 만든다는 행위는 메모리에 크기를 할당한다는 행위이며, 배열을 만드는 것은 연속적인 크기를 할당하는 의미인데, 변수의 이름 그 자체가 0번째 자리하는 원소를 의미하기 때문에. 관례적으로 0번째를 첫 번째 원소로 사용한다. 이는 C언어나 메모리를 공부하면 더 깊이 알 수 있다.

 

LIST는 여러 가지 메소드(함수)를 제공하는데 다음과 같은 기능이 많이 사용된다.

[LIST형 변수명].append(원소) : 리스트에 원소를 추가한다.

[LIST형 변수명].insert(위치, 원소) : 리스트에 특정한 위치에 원소를 삽입한다.

[LIST형 변수명].clear() : 리스트의 원소를 전부 제거한다.

[LIST형 변수명].sort() : 리스트의 원소를 정렬한다.

[LIST형 변수명].count(원소) : 리스트의 원소 개수를 셈한다.

[LIST형 변수명].index(원소) : 특정한 원소의 인덱스를 출력한다. 

다음은 자주 사용하는 메소드의 예시이다.

>> my_list = [3,2,1,5,4]

>> my_list.append(6)
## my_list는 [3,2,1,5,4,6]

>> my_list.insert(2,5)
## my_list는 [3,2,5,1,5,4,6] 2번째인덱스에 5를 집어넣었다.(인덱스는 항상 0부터!)

>> my_list.sort()
## my_list는 [1,2,3,4,5,5,6]

>> my_list.count(5)
2

>> my_list.index(4)
3

>> my_list.clear
## my_list는 []

* 개발도구에 따라 다르지만, my_list와 점(.)까지 입력을 하고 탭[Tab]을 하거나 가만히 있으면, 사용할 수 있는 기능들의 목록을 보여준다. 이것을 메서드(함수)라고 부르는데, 지금은 ① 이것은 메서드라고 부른다는 것 ② 자료구조에 따라 사용할 수 있는 메서드가 다르다는 것 ③ 메서드는 사용할 때 0개 이상의 괄호 안에 들어갈 매개변수가 필요하다는 것

이렇게만 알아두도록 하자

 

Python의 LIST에는 서로 다른 자료형을 담을 수 있다. 즉 a=[1,2, "bbb", "ccc"]도 가능하고, 담을 수 없어 보이는 람다 함수(나중에 배울 예정이다.)이나 다른 자료구조 또한 담을 수 있다. 이해의 확인을 위해서 다음의 코드를 보도록 하자

>> my_list = [1,2,3]
>> new_my_list = [4,5,my_list]

>> print(new_my_list"네모")
2

여기서 "네모"에 들어갈 값은 무엇일까? 일단 2는 my_list [1]이다. new_my_list에서 my_list는 2의 인덱스에 존재하니

new_my_list [2]가 곧 my_list가 되는 것이고 우리는 my_list [1]를 출력하고 싶은 것이니 정답은 [2][1]이 된다.

>> my_list = [1,2,3]
>> new_my_list = [4,5,my_list]

>> print(new_my_list[2][1])
2

이것과 같이 배열이 2번 중첩된 것을 2차원 배열이라고 한다. 눈치 빠른 사람들은 알겠지만, 3번 중첩되면 3차원 배열, n번 중첩되면 n차원 배열이라고 한다.(물론 4차원 이상의 배열을 쓰는 경우는 드물다.)

* 차원이라고 부르는 이유는 이것이 곧 축과 상응되기 때문이다. 1차원 배열의 원소들이 일자로 쭉 이어진 상자라면, 2차원 배열의 원소들은 사각형에 존재하는 상자들이고, 3차원 배열은 직육면체에 존재하는 상자들이다.(인덱스로 접근하는 방식을 추상화하면 그렇다는 것이다. 컴퓨터에 저장되는 메모리가 직육면체로 있지는 않다.)

 

 

캐스팅 - LIST <> 문자열

 

LIST가 제공하는 강력한 메서드(함수) 들을 보았으면 이제 LIST 없이는 살 수 없는 몸이 돼버렸을 가능성이 있다. 가령 문자열로 만든 a="Hello World"의 a[3]은 "l"이라는걸 Python은 알려주겠지만, a[3] = "n"로 만들어 "Henlo World"를 만드는 일은 문자열 자료형에서는 불가한 일이니 말이다. 그래서 우리는 LIST로의 캐스팅을 자유자재로 할 줄 알아야 한다. 다음은 문자열과 리스트의 상호 변환 방법이다.

>> a="hello world"
>> a=list(a)
## a를 list로 캐스팅

>> print(a)
['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']

>> a = ''.join(a)
## ?? 단순한 캐스팅이 아니다. a=str(a)를 하게되면 "['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']"
## 로 통째로 문자열이 되버린다.

>> print(a)
"hello world"

이번 시간에는 Python의 강력한 자료구조 중 하나인 LIST에 대해서 알아보았다. 2차 3차의 자료구조가 되면서 어려워지는 것이 이 LIST이지만, 기초가 단단하면 어떠한 LIST를 만나더라도 자유자재로 다룰 수 있을 것이라고 자신할 수 있다. 아직 어려운 부분은 아니지만 이해가 안 된다면 몇 번이고 다시 읽어보자. 다음 시간에는 다른 자료구조인 DICTIONARY와 SET에 관하여 알아보자

 

변수던 상수던 그 외의 무엇인가이던가, 프로그래밍에서 사용되는 무수한 자료에는 자료형 이라는게 존재한다.

흔히 볼 수 있는 자료형으로는 정수 / 실수 / 문자 등이 있고 우선 이 자료형들을 알아보자.

 

 

기본 자료형

정수(Integer, Int) : 소수점을 사용하지 않는 n진 상수 (ex : 0,-12,15,0xfe 등)
실수(float) : 부동 / 고정 소수점을 사용하는 상수 (ex : 3e-2, 0.774 등)
문자(str) : 큰따옴표(") 혹은 작은따옴표로 둘러싸인 고정 수(ex : "asdf","23","BB")(리터럴이라고 한다.)

 

같은 타입의 자료형은 연산이 가능하다.

>> a=3
>> b=7
>> my_str = "10"

>> print(a+b)
10

>> print(my_str+a)
## 오류 발생! my_str은 문자이고 a는 정수이다

그럼 여기서 my_str을 정수 10으로 만들 수 있는 방법은 무엇이 있을까? 다행이도 Python을 포함한 대부분의 프로그래밍 언어는 Casting을 통해서 이를 해결한다.

Casting : 변수를 다른 형태로 변환하는 것
>> a=3
>> b=7
>> my_str = "10"

>> print(a+b)
10

>> my_str = int(my_str)
## int()를 이용해서 이제 my_str은 "10"이 아닌 10이 된다. 

>> print(my_str+a)
13

* 상수나 실수를 문자열로 캐스팅하는것도 가능하다(str(a)를 하면 결과는 "3"이다.)

* 실수를 정수로 강제 캐스팅하면 소수점은 강제로 짤린다.

 


이번시간은 자료형과 형변환에 대하여 알아보았다. 다음시간에는 Python 자료형인 LIST에 대해서 알아보도록 하자

변수란

변수(variable)는 컴퓨터 프로그래밍에서 아직 알려지지 않거나 어느 정도까지만 알려져 있는 양이나 정보에 대한 상징적인 이름이다.

 

프로그래밍에서 변수의 정의는 위와 같다. <변하는 값>이라고도 말할 수 있으며, 사실상 코드는 작성하면서 사용하게 될 상수를 제외한 모든 값들을 변수라고 보면 좋을 거 같다.

 

예를 들어 '어떠한 값의 3을 더하는 프로그램을 만드시오' 라는 과제가 있으면, 이 어떠한 값은 정해지지 않은 것이니, 변하는 값 즉 변수라는 것을 알 수 있다. 그러면 Python의 변수는 어떻게 만들고, 사용할 수 있을까?

 

 

변수의 정의와 사용

 

우선은 어떠한 값을 담고 있는 변수의 이름부터 지어주어야한다. 이름을 짓는 데는 다음과 같은 규칙이 사용된다.

변수의 이름은 영어, 숫자, 언더바로만 구성된다.(단 숫자와 언더바는 영어와 조합하여야 한다.)

즉 a, _REDUCTO, ABC_123 등이 가능한 변수의 이름이 된다. 

 

또한 Python에서 변수는 다른 프로그래밍 언어에서 보면 생성과 동시에 초기화(initialize)된다. 풀어 설명하면 변수의 이름이 생성되는 동시에 특정한 값을 할당받는다는 것을 의미한다. 아래는 변수의 정의의 예시이다.

>> a = -3

>> _REDUCTO = "ddd"
## Python에서 변수는 어떠한 형태도 담을 수 있다

>> ABC_123 = _REDUCTO
## 위와같은 이유로 변수에 다른 변수를 담는것도 허용된다.

 * ##는 주석(Comment)을 의미한다. 주석은 프로그램 동작에 포함이 되지 않는 프로그래머의 설명문으로 코드의 생성일, 저작권, 사용법 등이 적힌다. 주석에 대한 자세한 내용은 추후 포스팅하겠습니다.

 

이렇게 변수를 정의했으면 우리는 변수를 사용할 수 있다. 앞서 사용했던 print("Hello World")의 "Hello Worlds"(정해진 상수)를 우리 변수로 바꾸어 작성해보자

>> print(a)
-3

>> print(_REDUCTO)
"ddd"

>> print(ABC_123)
"ddd"

 

사칙연산

 

Python은 다양한 사칙연산을 지원한다. 전 글에서 보았던 간단한 +,-,/,* 뿐만 아니라 다음과 같은 연산자를 지원한다.

연산자 설명 예시
+ 더하기 10+3 = 13
- 빼기 10-3 = 7
* 곱하기 10*3 =30
/ 나누기 10/3 = 3.33...
% 나머지 10%3 = 1
** 제곱 10**3 = 1000
// 10//3 = 3

다음과 같은 코드를 통해서 사칙연산을 조금 더 깊게 알아보자. 바로 위의 변수의 내용까지 담고 있으니, 직접 코딩해보는 것을 추천한다.

>> a=3
>> b=5
>> c=a*b
## 여기서 a=3, b=5, c=15가 된다.

>> print(a+b)
8

>> print(c*b+a)
78

>> a = a+3
## 여기서 a는 기존 a에 3이 더해진 6이 된다.

마지막 a=a+3을 보자. 수학에서 "="은 같다를 의미하지만, 프로그래밍 세상에서 =은 대입을 의미한다.

무심코 사용했던 a=3이나 b=5도 각각 a에 3을 대입한다. b에 5를 대입한다의 의미를 가지고 있는 것이다.

이 대입에는 규칙이 있는데 항상 "오른쪽을 왼쪽에 대입한다." 즉 a=a+3 은 기존 a에 3 더한 값을 새로 a에 대입한다는 의미를 가진다. 대부분의 프로그래밍 언어는 이렇게 기존의 값을 쉽게 바꾸는 연산자를 제공한다. 바로 +=, -=, *=, /=이다, a+=3 은 a = a+3과 같은 의미, b-=9는 b = b-9와 같은 의미를 가진다. 

 

독특한점은 문자열에 대해서 "+"와 "*"연산이 동작한다는 점이다. 다음의 코드를 보자

>> a = "AAA"
>> a = a+"BBB"
>> print(a)
"AAABBB"

>> a = "ABC"
>> a = a*3
>> print(a)
"ABCABCABC"

 

비교 연산 

비교 연산은 두 수의 크기, 같음과 다름 여부를 계산해주는 연산자로 참(True)과 거짓(False)을 판단한다.

연산자 설명 조건 결과
>, >= 크거나 (같음) 3>5 False
<, <= 작거나 (같음) -1<4 True
== 같음 3+7==10 True
!= 다름 "aaa"!="aab" True

*==의 조건과 결과로 "사칙연산을 비교 연산보다 우선한다"는 것을 알 수 있다.

 

비교 연산은 논리 연산과 같이 사용되는 경우가 많다, Python에서 AND의 연산자는 and이고, OR의 연산자는 or, 같음의 연산자는 is, 다름의 연산자는 not 등이 쓰인다.

* 위 연산의 설명의 자세한 건 논리와 이산수학 부분에 포스팅 예정이니 모르는 사람은 구글링, 포스팅을 확인하고 오는 것이 좋다.(굉장히 중요한 내용이다!) 

 


이렇게 Python에서 변수의 정의와 사용, 연산의 종류인 사칙연산과 비교 연산에 대해 알아보았다. 이외에도 비트 연산 등이 추가로 사용되나, 사실 비트 연산이 사용되는 경우는 위 연산들에 비하면 적을 뿐 아니라 이해에 논리 연산의 이해가 필요하니 사용하게 될 때 자세한 설명을 하도록 하겠다.

 

 

이렇게 Python에서 변수의 정의와 사용, 연산의 종류인 사칙연산과 비교연산에 대해 알아 보았다. 이외에도 비트연산등이 추가로 사용되나, 사실 비트연산이 사용되는 경우는 위 연산들에 비하면 적을뿐아니라, 이해에는 논리연산의 이해가 필요하니 사용하게 될 때 자세한 설명을 하도록 하겠다. 다음 시간에는 기본자료형과 형변환을 알아보도록 하겠다.

자! Python세계에 온것을 환영한다. 우선 이 Python이라는 놈이 어떤 생태환경을 가지고 있는지 관찰해보도록하자 

 

우리의 첫번째 코드는 

>> print("Hello World")

이다. Python은 다음과 같은 코드를 입력하면 

>> print("Hello World")
Hello World!

와 같은 결과를 줄것이다.

 

이 한줄이 의미하는 것은 간단하다. 

Hello World를 출력해라!

가령 Hello World말고 좋아하는 글자를 써서 넣을 수 있을 것이다. 예를 들면 

>> print("퇴근!")
퇴근!

이 될 수도 있다. 

 

다른 일은 어떤 걸 할 수 있을까? 컴퓨터니까 우리의 귀찮은 계산을 대신해주었으면 하는 바람이 있다.

(* 아직 우리의 Python은 그다지 똑똑하지 못한 주인을 가지고 있기에 사칙연산을 대신 시켜보도록 하자)

>> 3+5
8

>> 10/2
5

>> 5*2+3
13

>> (7-4)*2
6

우리의 Python은 역시 똑똑하다 

 

Python과 친해지는 방법은 여러가지를 써보는 것이다. C언어의 창시자인 우리의 메시아 데니스 리치는 프로그래밍언어에 익숙해지는 가장 효율적인 방법은 그것으로 프로그램을 만드는 것이라고 했다. Python과 익숙해 지는 가장 좋은 방법은 역시 Python을 오랜시간들여 관찰하고 같이 여러가지를 해보는 것이다. 다음시간에는 변수와 사칙연산으로 Python과 더욱 친해져 보도록 하자

농사를 지으려면 땅이 있어야 하고, 그림을 그리려면 캔버스가 있어야 한다.
무슨 소리냐.

-- Python을 시작하려면 Python을 작성할 수 있는 개발도구가 있어야 한다. --

프로그램도 자신의 맞는 환경이 존재해서 정확한 프로그램을 설치하기 위해서는 자신의 단말기 정보를 알아야 한다.
크게 ①운영체제와 ②아키텍처를 알아야 하는데, 자신의 운영체제와 버전을 확인하는 방법은 다음과 같다.

① Window 아키텍처 확인방법

실행창([윈도우]+[R]) - msinfo32 - [OS이름, 시스템 종류 확인]

*여기서 시스템 종류가 X86인 경우 32버전, X64인경우 64버전이다.

* 리눅스의 경우에는 Python이 내장되어 있으며, Mac은 내가 쓸 줄 모른다....(단말기도 없고 VM에 설치할 의지도 없다.)

여기까지 되었다면 우리의 Python 개발도구를 만나러 갈 시간이다. 가장 간단한 IDLE의 설치 방법을 포스팅할 것이다. 이 글 마지막 부분에 다른 추천 개발도구 또한 설치 링크를 적어두었으니, IDLE이 마음에 들지 않거나, 추가적인 기능이 필요한 경우 다른 도구를 설치하자

※ IDLE 이란? ※

IDLE - Python으로 개발된 개발도구이다. Python을 설치할 때 내장되어있으며, 필자는 다른 도구는 무거워서 단순한 프로그램은 이것으로 개발한다.

※ IDLE 설치방법 ※

1. 다음 위 설치 링크의 Python공식 홈페이지의 다운로드 화면으로 이동, Download Python 3.9.3을 눌러서 Python setup를 다운로드한다. (설치 링크 : www.python.org/downloads/)


2. Python setup 실행 후 [Install Now]를 클릭한다.


3. 설치가 완료되었으면 자신의 프로그램 목록에 IDLE이 설치된 것을 확인할 수 있다.
(필자는 3.8의 Python을 사용하고 있으며, 방법대로 3.9.3을 설치한 사용자는 IDLE(Python 3.9 XX-bit)로 표시될 것이다.)


4. IDLE을 열면 다음과 같은 화면이 우리를 반긴다. 이곳이 Python과 대화를 할 수 있는 인터프리터가 구현된 곳이라고 생각해주면 된다.


5. 탭의 [File] - [New File](단축키 : Ctrl + N)을 눌러 새로운 .py를 만들기 위한 준비를 하자
* .py란 파이선으로 작성된 언어 스크립트의 확장자이다. Python과 관련된 확장자 중 하나로 다른 확장자는 Complied된 파일인 .pyc, 라이브러리 형태로 작성된 .pyd 등등이 있다.

&lt;New File탭&gt;


6. 새로운 스크립트 작업창에 print("Hello World") 입력 후 탭의 [File] - [Save](단축키 : Ctrl + S)를 선택하여 파일을 저장한다.(이름은 어떻게 하든 무관하니, 지금은 hello.py로 지정한다.)

&lt;print("Hello World")&gt;

7. 탭의 [Run] - [Run Module](단축키 : F5)를 눌러 정상적으로 실행되는지를 확인하자, New File을 눌렀던 그 창에서 Hello World가 출력되었다면 성공이다.



* 지금까지 잘 따라왔다면, Python의 세계에 그림을 그릴 도화지를 준비한 것이다. IDLE만으로 충분히 따라올 수 있는 튜토리얼이 되겠지만, IDLE은 기능이 제한적이기에 여타 다른 개발도구를 사용하고 싶은 사람들은 아래 있는 개발도구들을 추천한다.



PyCharm - 직관적이고, 설치도 어렵지 않다. 추천합니다.
(설치 링크 : www.jetbrains.com/ko-kr/pycharm/download/#section=windows)


③ ATOM - 다른 언어의 개발 툴까지 같이 제공해주는 좋은 프로그램이다. 사용법도 어렵지 않고, 인터페이스도 깔끔하다
(설치 링크 : atom.io/ ) >> 별도로 python플러그인을 설치해야 된다.


④ Anaconda - 실제로는 Anaconda에 들어있는 Jupyter Notebook이라는 프로그램이 개발환경이 되는데, 웹으로 작성되는 코드이다 보니 필자는 익숙하지 않아서 쓰지 않았다. 그러나 Anaconda가 제공하는 기능(예를 들면 상이한 버전의 파이선을 같은 환경에서 구동 가능하다는 것 등)이 워낙 강력하기 때문에, 데이터베이스 등 수학/기하적인 용도로 Python을 사용하는 사람이라면 추천한다.
(설치 링크 : www.anaconda.com/products/individual)


* 기존에 다른 개발도구를 사용하다가 Python을 배우는 경우 사용하던 개발도구가 Python을 Plugin처럼 지원하는 경우도 있다.(ex : Visual Studio) 우리의 용량은 소중하니 잘 확인해보자.


&lt;Python의 로고&gt;

Life is short. You need Python.
- Bruce Eckel -


멋진 말이다. 평범한 사람들에게 프로그래밍의 멋짐을 보여준 언어이자, 수많은 프로그래머들의 시간 단축을 도와주는 훌륭한 언어가 우리의 친구 Python이다.

대학에서 컴퓨터 꽤나 만져본 사람들은 C나 JAVA, BASIC의 문법을 보다가 Python의 문법을 보면 "아니 이게 가능해?"라는 말을 많이 한다. 변수선언으로 부터의 자유로움, 직관적인 명명법 등의 특징 덕분에 개발을 조금만 공부했어도 저~중 수준의 Python의 코드를 읽는 것에는 문제를 찾기 어려울 정도이다.

주관적인 생각으로는 다음과 같은 Python의 특징이 언어를 쉽고, Pythonic하게 만든다고 생각한다.

1. 낮은 난이도와 그에 따른 빠른생산속도
2. 동적 타이핑의 대화형 언어(인터프리터식)
3. 확고한 디자인 철학과 많은 사용자



1. 낮은 난이도와 그에 따른 빠른 생산속도
Python의 난이도가 얼마나 낮은 지를 이야기하는 것은 입을 상하게 하는 일이다. 기본적인 코드를 기준으로 C나 JAVA의 몇십 줄에 해당하는 코드가 Python에서는 단 두세 줄 만에 해결되는 일도 심심치 않게 있다. 이로 인해 ①프로그램을 입문하는 사람들의 교육용이나, ②개발 프로토타입과 스크립트 작성에 많이 쓰이는 언어가 Python이다.

2. 동적 타이핑의 대화형 언어(인터프리터식)
프로그래밍 언어는 동작 방식으로 다음과 같이 나뉜다.
① Compiler 식 언어 : 코드를 작성 후 Compile 해서 목적 프로그램을 만들어낸 후 그 목적프로그램을 실행하는 언어
② Interpreter 식 언어 : 코드의 Compile없이 한줄한줄 읽어들이며 동작하는 언어
파이선은 Interpreter 식 언어이다. Python 을 설치하고 콘솔에 print "hello World!"를 치면 다른언어 입문도서에서 보고 이게 뭐지 했던 그 대여섯줄짜리 Hello world가 한줄로 나오는 것이다! Compiler식 언어와 Interpreter식 언어의 장단점은 명확하지만, 즉각적인 반응을 해주는 파이선 Interpreter를 처음 본 그 순간은 아마 잊지 못할 것 같다.

3. 확고한 디자인 철학과 많은 사용자
다음은 Python에서 import this를 하게 될 경우 나오는 파이선의 디자인 철학이다. (Import 가 뭔지는 지금은 몰라도 된다.)

1. 추함보다는 아름다움이 낫다.
2. 묵시적인 것보다는 명확한 것이 낫다.
3. 복잡함보다는 단순함이 낫다.
4. 난해한 것보다는 복잡한 것이 낫다.
5. 중첩하는 것보다는 평평하게 쓰는 것이 낫다.
6. 오밀조밀한 것보다는 띄어 쓰는 것이 낫다.
7. 가독성은 언제나 중요하다.
8. 특수한 경우라 해도, 규칙을 깰 만큼 특수하지는 않다.
9. 하지만 실용적인 것이 순수함을 이긴다.
10. 에러는 절대로 조용히 넘어가서는 안 된다.
11. 명시적으로 조용히 넘어가라고 되어있다면 모르겠지만.
12. 모호함에 직면하더라도, 추측에 의존하려는 유혹을 이겨내라.
13. 언제나 무언가를 하는 방법은 가급적이면 정말 오로지 한 가지뿐 이어야 한다.
14. 당신이 네덜라드 인이 아닌 이상, 처음에 바로 보이지 않더라도 말이다.
15. 바로 지금이 제일 적절한 때다.
16. 비록 *바로 지금*보다 아예 하지 않는 경우가 나을 때가 자주 있더라도 말이다.
17. 구현한 것을 설명하기 어렵다면, 그것은 좋은 아이디어가 아니다.
18. 구현한 것을 설명하기 쉽다면, 그것은 좋은 아이디어일 수도 있다.
19. 네임 스페이스는 정말 훌륭한 아이디어이니, 자주 사용하자!

- Tim Peter -

이 수많은 명제들의 철학을 다 지키면, 최상의 코드가 아니라는 가정하에 작성된 코드보다 좋은 방안이 생성되기 마련이다. 파이선은 2019년 기준 전 세계 8,200,000명이 넘는 개발자의 손에서 작성 중이고, 이 성장 속도는 범용적인 언어인 JAVA의 사용자 7,100,000명을 가뿐히 뛰어넘은 추세이다. 내가 파이선의 모듈을 만들고 배포를 하면 최대 8,200,000명이 넘는 사람들이 와서 이걸 검토하고 수정한다는 거다! ㄷㄷ;
(출처 :www.zdnet.com/article/programming-languages-python-developers-now-outnumber-java-ones/)


이렇게 단순하면서 아름다운 파이선의 지식을 작지만 적어두며, 파이선과 컴퓨터에 입문하게 되는 사람들에게 스타터팩이 되고 싶은 마음으로 Python Tutorial을 시작한다. 단순한 언어이기에 또 블로그를 시작한 지 얼마 되지 않아 아직 흥미가 떨어지지 않았기에 이번 달 말까지는 매듭을 짓게 될 거 같다.

+ Recent posts