안녕하세요. 호랑인 입니다.



오늘은 파이썬을 사용해서 출력과 변수지정을 하는 방법을 알아볼까 합니다. 원래는 변수지정만 하려 했는데 출력을 못하면 재미가 없을 것 같아 같이 하려 합니다.




우선, 출력부터 배워 봅시다.


** Python 2와 Python 3에서의 출력 함수가 조금 다릅니다. 일단 두 버젼에서 둘다 사용할 수 있는 문법으로 나가겠습니다.


1

print ('Hello World!')



위의 코드를 넣고, 실행시켜 봅시다. 그러면, Hello World! 라는 메세지가 출력되는 것을 보실 수 있을 것입니다.



파이썬 2를 사용하시는 분들은 ( ) 를 빼도 코드가 돌아갈 것입니다. 둘이 어떤 차이로 인해 이런 일이 벌어지는지는 아마 나아중에 나올 것 같습니다. 하지만, 코드를 작성하시다 보면 파이썬 2 를 사용하시는 분들도 ( ) 를 치는 것이 덜 헷갈리는 경우가 많아 자주 쓰게 되실 것입니다.




위의 코드가 어떻게 돌아가는지는 나중에 알아보도록 하고, 우선 print 라는 구문을 사용해서 원하는 내용을 출력할 수 있다는 것을 알아놓도록 합시다.





이제 원래 목표였던 변수지정을 배워 봅시다.



변수에는 여러 타입이 있습니다. 이들에는 int, long, float, complex, string, list, tuple, dictionary 가 있습니다. 뭔가 어려워 보이실 수 있지만, 전혀 그렇지 않습니다.


하나하나 보도록 하죠.



int 는 integer, 즉 정수의 약자입니다.



1
2
a = 1
print (a) # 1


위의 코드를 실행시켜보면, 1이라는 결과가 나올 것입니다. # 1 이라는 것이 갑자기 나와 놀라셨을 수도 있는데요, 이를 "주석" 이라 합니다.


주석은 # 으로 시작해서 원하는 내용을 쓰시면 되고, 코드를 보시면 알 수 있듯이 회색 처리되며, 프로그램이 도는데에 그 어떤 영향을 주지 않습니다. 그래서 주로 어떤 코드가 어떤 역할을 하는지에 대한 간단한 메세지들을 적어 놓을 때 사용합니다.



1
2
3
def evolve(self):
# This Function evolves the neuron to the next step
# ...실제 함수...



저는 이 주석을 출력 결과를 적는 데에 사용하도록 하겠습니다.



다시 본주제로 돌아가, a = 1이라는 코드를 적으면, python 은 알아서 1이 정수라는 것을 이해 하고, a 에 정수값 1을 저장합니다. 그리고 앞에서 배운 print를 사용해서 이를 출력할 수 있습니다.


원래 다른 언어들은 int의 값에 범위가 있습니다. int8, int16, int32, ... 등등으로 그 한계가 다르기도 하죠.


파이썬 2 에서는 int에 한계값이 있습니다. 2147483647 까집니다. 그 이상의 정수를 저장하고 싶으시면, 아래의 long을 보세요. (그럴일이 많지는 않을 겁니다.) 하지만 파이썬 3 에는 그런게 없으니, 맘 놓고 사용하시면 됩니다. 이는 나중에 numpy 를 배울 때 자세히 알아보도록 합시다.




이번에는 long 과 float 를 봅시다. 둘은 엄연히 다른 것인데에도 사람들이 모르는 경우가 많더군요. 하지만 너무 기분 나빠할 건 없습니다. 사람들이 잘 모르고 있다는 것은 평상시에 이것에 대해 고민할 필요가 없다는 뜻이기도 하기 때문입니까요.

** 물론 이러한 애들 때문에 python만을 배우다 다른 언어를 배우려 하면 정말 어렵게 다가올 수도 있습니다. 파이썬에 갇히는 거죠 ㅠ



위에서 a = 1이라는 코드를 사용해서 정수값을 저장할 수 있다 배웠습니다. float와 long도 결국은 소수를 저장하는 일이니, 비슷하게 하면 되지 않을까 생각이 들지 않나요?




1
2
3
4
a = 3.141592

print a # 3.141592
print (type(a)) # float



새로운 문법이 나왔습니다. 바로 type이라는 내장함수입니다. 위의 예시를 보면 아실 수 있둣이, type( ) 안에 변수 이름을 넣고 print를 하면, 그 변수가 어떤 종류인지가 나옵니다.



이제 long 을 봅시다. long은 정말 독특한 애입니다. 원래 long 이란 변수타입은 64비트 실수를 저장해주는 변수인데요, 파이썬의 float는 이미 그 한계값이 무한입니다. 그렇기 때문에 long이라는, 확장형 float가 필요가 없죠. 굳이 필요하다고 해도, 더 정확한 값을 주기 위함일 텐데, 결론부터 말하자면 파이썬의 long은 말그대로 '긴' 정수를 저장하는데에 사용됩니다.


여기서 잠깐, python 3 에서는 long 변수 타입이 사라졌습니다. 그냥 int 자체가 무한까지 가능하기 때문이죠.



1
2
3
4
a = 216541531321563213212321321L # very big integer

print a # 216541531321563213212321321
print (type(a)) # long



보시면 알 수 있듯이, 뒤에 L 을 붙이면 됩니다. 하지만 long을 쓰실 일은 정말, 정말 거의 없습니다. 보통 큰 데이터를 저장해야 한다고 할 때 그 값이 정수인 경우는 그리 많지 않기 때문입니다. Python 3에서 int 에 병합된 것도 그 이유 중 하나입니다.




다음 변수 타입은 string 입니다. string은 우리가 흔히 쓰는 '글자' 와 '문장'을 저장하는 데에 쓰입니다.

사실 이미 위에서 한번 사용했는데요, 'Hello World' 를 따옴표 안에 넣은 것이 string을 생성하는 방법입니다.



1
2
3
a = 'Hello World !'

print (a) # Hello World !



쉽죠? 여기에서 알아야 할 점은 python의 print 는 자동으로 다음줄로 넘간다는 것입니다. 이게 무슨 뜻이냐고요? 아래의 예제를 보시죠.



 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# * 로 삼각형을 만들어보자.

print ('*')
print ('**')
print ('***')

"""
출력 결과

*
**
***
"""



보면 알 수 있듯이, 별도의 엔터(개행) 없이도 알아서 매번 다음 줄로 넘어간다는 겁니다. 이게 당장 보기에는 편해보일 수 있으나, 그렇지 않은 경우도 많습니다. 우선, 형 변환을 알아보고 그 예를 보여드리겠습니다.


참고로 """ 라 적힌 것은 복수의 줄로 연결되는 주석입니다. """ 로 열어서 """ 로 닫으면 되고, 기존의 # 주석과 동일하되, 여러 줄에 걸쳐서 사용할 수 있습니다. 대신 다른 코드의 뒤에서 시작하는 것은 추천하지 않고, 제가 위에서 쓴 것처럼 새로운 줄에서 시작하세요.




형변환은 정말 간단합니다. 제가 생각하는 파이썬의 꽃 중 하나죠. 포기하는 것은 많습니다만, 가장 pythonic 한 것 중 하나라 생각합니다.

형변환은 말 그대로 type을 바꾸는 일입니다. 예를 들어, 1 이나 3.14 같은 수들은 수로써도 쓸 수 있고, string으로도 쓸 수 있습니다. 그럴 경우, 3.14를 string 처럼 쓰고 싶다면 어떻게 해야 할까요? string으로 형변환을 해주면 됩니다.



지금까지 배운 모든 type들은 서로서로 형변환이 되며, 주의할 점은 float를 int로 형변환하면 (당연하지만) 소숫점 아래의 수가 사라지고(반올림이 아니라 버림입니다), int 를 float로 형변환한 다음에는 int 속성을 더이상 사용할 수 없다는 것입니다. (이는 추후에 설명하겠습니다)



1
2
3
4
5
6
7
8
a = 3.14 # float
print (len(a)) # error: object float have no len()

b = str(a) # string
print (len(b)) # 4

c = int(a) # int
print (c) # 3



len() 이라는 함수는 string type에 대해 정의되어 있는 함수로, 길이 length의 준말입니다. 말 그대로 해당 string의 길이를 나타냅니다. 처음에는 a 가 float 형 변수로 선언되었기 때문에, len 이라는 함수에 넣으면 error가 발생합니다. 에러 베세지를 읽어보면, float에는 len() 이 없다고 되어 있습니다.


이제 b는 a를 string으로 형 바꿈한 것입니다. 함수 이름은 string의 준말인 str 입니다. 그리고 나서 len() 을 살행하니, 3 . 1 4 총 4글자이기 때문에 4가 출력되었습니다.


c는 a를 int로 형바꿈 한 것입니다. 보면 소숫점 아래의 수들이 모두 없어진 것을 알 수 있습니다.




이제 다시 print 로 돌아가봅시다.


이번에는 조금 더 실용적인 것을 print 하고 싶다고 해보죠. 어떤 변수 stu_num 이라는 변수에 학번이 int로, stu_name 에 이름이 string으로 저장되어 있다 해봅시다. 그리고 "(학생 이름) has student number of (학번)" 이라 출력 해봅시다.



 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
stu_num = 85
stu_name = "Alex"

print(stu_name)
print(" has the student number of ")
print(str(stu_num))

"""
Alex
 has the student number of 
85
"""



고쳐야 할 것이 몇개 보입니다. 우선, stu_num 을 str로 형변환해서 출력한 것은 나쁘지 않은 선택입니다. 나중에 object의 __str__( ) 을 배울 때 다시 말씀드리겠습니다. 하지만 딱 보이는 것이 바로 자동 줄넘김입니다. 저희는 한 줄을 원하는데 말이죠.


그럴 때에는 여러 방법이 있습니다.

1. 쉽표를 붙여주는 방법

2. string concentrate

3. format (이건 나중에 정규형식과 함께 배우겠습니다.)



 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
stu_num = 85
stu_name = "Alex"

# 1번
print(stu_name,)
print(" has the student number of ",)
print(str(stu_num))

# 2번
print(stu_name + " has the student number of " + str(stu_num))

"""
Alex has the student number of 85
"""



보면 알 수 있듯이, 1번은 단순히 뒤에 쉽표를 붙인 겁니다. 쉽표는 자동 개행을 막는 역할을 합니다.

2번은 여러개의 string 들은 + 연산자로 하나의 string으로 바뀔 수 있다는 점을 사용한 것입니다. 대신 이는 오직 string 끼리만 되니, 당연히 stu_num 변수는 str을 사용해서 형변환을 해줘야겠죠?





우선 이 정도면 기본적인 변수지정은 끝났다고 생각합니다. 물론 complex라는 형도 있지만, 저는 지금까지 그 형을 사용해야 할만한 경우를 마주친 적이 없기도 하고, 보통 복소수를 다루고 있을 경우 다른 라이브러리들을 사용하고 있을 경우가 더 많아서 다루지 않겠습니다. 궁금하신 분들은 python document complex 라 구글에 치면 나올 것입니다. 감사합니다.

+ Recent posts