본문 바로가기
카테고리 없음

(엔지니어를 위한) 파이썬 시작하기[2] 변수, 자료형, 구글링으로문제해결하기

by 돌종 2022. 8. 24.

(엔지니어를 위한) 파이썬 시작하기[2]

 

0.시작하며

지난번 게시물에서 ‘엔지니어링 소셜코딩’이라는 표현을 썼었다. 원래 엔지니어들은 사람들의 생명과 재산을 지키는 일을 하는 사람들이다. 그래서 그들의 활동은 기본적으로 공익을 위한 것이다. 그런 의미에서 엔지니어들은 서로 협력해서 더 안전하고 좋은 세상을 만드는 것에 관심이 많다.

 

하지만 엔지니어링은 전문지식이 필요하고 그것을 서로 나누는 것은 쉽지는 않다. 그에 반해 IT분야는 지식과 방법론까지도 code에 들어있기 때문에 공유가 쉽다. 그래서 공유를 통해 엄청난 속도로 발전했다. 그야말로 오픈소스의 세상이다.

 

엔지니어들도 전문지식을 코드로 만들면 서로 공유하기 쉽다. 엔지니어들이 하는 업무를 이미 상용프로그램들이 대신하고 있다. 필자는 엔지니어링 소프트웨어 생태계를 엔지니어들이 지배해야 한다고 생각한다.

 

그래서 뜻있는 엔지니어들이 모여서 소셜코딩을 통해 지식과 코드를 나누어 공동의 목표를 이루었으면 한다. 그래서 이 활동을 시작한다.

 

1. 변수

변수는 어떤 값이 들어있는 곳(메모리)의 이름이라고 생각하면 된다. 마치 엑셀의 셀 주소(A1)처럼말이다. 이전의 게시물에서 a=1이라고 했는데 a가 변수 이름이다. 컴퓨터 내부적으로는 메모리가 어떻고 복잡하게 작동할 지 모르겠지만 사용자는 그냥 a에는 1이 들어있다고 생각하면 된다.

 

2. 자료형

자료형은 우리가 다루는 어떤 값의 형태를 말한다. 엑셀에서도 어떤 셀에 숫자 1을 입력할 수도 있고 ‘1이라고 입력할 수도 있다. 1이 들어있는 셀은 계산에 이용할 수 있지만 ‘1이라는 것은 문자로 인식되기 때문에 수학계산을 할 수 없다.

 

가장 기본이 되는 자료형은 당연히 숫자와 문자이다.

 

2.1 숫자형

숫자는 그냥 숫자로 쓰면 된다. 숫자는 정수와 실수로 나눌 수 있다. 그리고 엔지니어들이 많이 쓰는 1e10과 같이 지수형으로도 표현 가능하다.

 

2.2 문자형

문자는 “ “큰따옴표 또는 작은 따옴표로 감싸면 된다.

 

n = “dolljong” 이렇게 써도 되고 n=’dolljong’이렇게 써도 된다.

 

왜 큰,작은 따옴표 모두 가능하게 만들었을까? 섞어 쓸 수 있도록 하기 위해서다. 예를 들어 “dolljong’s laptop”이렇게 큰 따옴표 안에 작은따옴표를 쓸 수 있고,

‘he said “Hello”’ 이렇게 작은 따옴표 안에 큰 따옴표를 쓸 수 있다.

 

작은따옴표 안에 작은 따옴표를 쓰면 에러가 발생하고, 큰 따옴표 안에 큰 따옴표를 써도 에러가 발생한다.

 

 

2.3 list형

 여기서부터는 엑셀과 좀 달라진다. list형은 묶음으로 생각하면 된다. 여러가지 값을 묶어놨다고 생각하면 된다. 묶을 때 [ ]를 사용한다. 그리고 [ ] 안의 각각의 값은 ,로 구분한다.

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

 

첫번째 줄에서 a라는 변수에 1부터 5까지의 숫자를 묶어서 할당했다. 그리고 두번째 줄에서 a를 보여달라고 했다. 세번째 줄에서 인터프리터가 a에 들어있는 값을 보여줬다.

 

a에는 5개의 값이 들어있다. 첫번째 값을 꺼내려면 a[0]이라고 하면 된다. 0부터 시작하는 것에 주의하자. 코딩에서는 첫번째가 0이다.

 

>>> a[0]
1
>>> a[4]
5
>>>

 

만약 이런 묶음 기능이 없다면 어떻게 될까?

a1=1
a2=2
a3=3
a4=4
a5=5

뭐 이런식으로 일일이 지정해줘야 할 것이다. 이게 5개가 아니라 1만개라면?

list의 장점은 이름은 같고 뒤의 index만 다르게 해서 묶음으로 사용할 수 있다는 장점이 있다. 중요한 개념이니 꼭 기억해두자.

 

list는 뭐든 묶을 수 있다. 아래와 같이 숫자와 문자를 섞어서 묶을 수도 있고 list를 묶을 수도 있다. 예를 들어 두개의 좌표를 연결하는 선의 정보를 저장한다면 두번째 처럼 처음 점의 좌표는 [11,2] 두번째 점의 좌표는 [20,10]이고 이 두 점을 묶어서 하나의 라인 정보를 [[11,2], [20,10]]이렇게 만들 수 있다. 정보를 어떻게 묶고 그것을 어떻게 이용할 것인지는 코딩하는 사람이 결정하면 된다.

>>> a=[1,'dolljong',3]
>>> linepnts=[[11,2], [20,10]]
>>> linepnts[1]
[20, 10]

 

위의 예에서 linepnts[1]의 결과는 [20,10]이었다. 그렇다면 두번째 점의 좌표중 y좌표인 10을 추출하려면 어떻게 해야할까? 파이썬에서는 앞에서부터 계산을 진행한다고 생각하면 된다. linepnts[1]의 결과에 대해 [1]을 한다고 생각하면 된다. 답은 아래와 같다.

>>> linepnts[1][1]
10

 

list 슬라이스

앞의 linepnts[1] 이런 것은 한개의 요소를 취하는 것이었다. 그게 아니라 여러개를 취하고 싶다면 슬라이스 기능을 사용한다. 위의 a=[1,2,3,4,5]에서 세번째부터 4번째까지 취하고 싶다면

>>>a=[1,2,3,4,5]
>>> a[2:4]
[3, 4]

 

: 의 앞은 시작 index, 뒤는 끝 index다 단 끝 index는 제외된다. 결국 : 뒤의 index하나 앞까지 취해진다. 위의 a[2:4]를 보자. index 2는 세번째다 → 3, index 4는 5번째다 → 5 하나앞까지 취해지므로 4번째까지 취해진다 → 4 그래서 결과는 [3,4]다. 결과가 list를 주목하자. 취해진 값이 하나여도 list로 돌려준다.

 

>>> a[3:4]
[4]

 

list에 묶여 있는 것과 아닌 것의 차이를 알아야 한다. list 안의 값은 직접 써먹지 못하고 불러내서 써먹어야 한다는 것이다. a[3:4]의 결과는 [4]이다. 이것은 숫자 4가 아니다 그래서 +1을 하면 에러가 발생한다. 반면 a[3]의 결과는 숫자 4이다. 그래서 +1을 할 수 있다.

>>> a[3:4]+1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can only concatenate list (not "int") to list
>>> a[3]+1
5

 

list에 관한 다양한 기능이 있지만 이정도만 하고 넘어가자.

  

2.4 dictionary형

dictionary는 사전이라는 말 그대로 단어와 설명으로 이루어져 있다고 생각하면 된다. 이건 사전이 아니므로 명칭이 단어와 설명이 아니라 key와 value라고 부른다. dictionary는 list와 달리 { } 로 감싸져 있다. 모양을 보자. list가 숫자 index를 가지고 있었다면 dictionary는 문자,숫자 등의 key를 가지고 있다고 보면 된다. ‘name’이라는 키의 값을 불러오기 위해서는 person1[‘name’]라고 입력하면 된다.

 

>>> person1 = {'name':'dolljong', 'job':'engineer'}
>>> person1['name']
'dolljong'

 

key는 꼭 문자일 필요는 없다 하지만 문자가 의미를 알 수 있기 때문에 숫자보다 편하다.

>>> person2 = {1:'dolljong', 2:'engineer'}
>>> person2[2]
'engineer'

 

앞의 list는 무엇이든 묶을 수 있다고 했다. dictionary도 묶을 수 있을까? 당연히 가능하다. 여러사람의 이름과 직업이 들어있는 변수를 만들고 두번째 사람의 이름을 가져와보자.

>>> people=[{'name':'dolljong', 'job':'engineer'},{'name':'stonebell', 'job':'artist'}]
>>> people[1]['name']
'stonebell'

 

people이라는 변수에 list [ ] 안에 dictionary { } 두개를 ,로 구분해서 입력했다.dictionary의 key는 ‘name’, ‘job’ 두가지고 그에 해당하는 value가 각각 입력되었다.

 

두번째 사람 people[1]의 이름은 people[1][‘name’]이라고 입력하면 취할 수 있다.

 

 오늘은 이정도까지 하면 될 것 같다. list의 기능도, dictionary의 기능도 많다. 모든 것을 다 알고 시작할 필요는 없다. 그러다보면 지칠 수가 있다. 개념을 아는 것이 중요하고 나머지는 구글링으로 해결하면 된다.

 

3. 구글링으로 문제 해결하기

 

이런 말이 있다.

‘구글링을 못하게 하면 제아무리 뛰어난 프로그래머도 프로그램을 만들 수 없다’

 

프로그램을 만들면서 ‘이런 기능이 있을 것 같은데…’라고 생각이 들면 구글링해보면 쉽게 찾을 수 있따. 예를 들어서 필자가 설명을 빠뜨린 리스트 연결하기를 검색해보자.

 

a=[1,2,3,4]라는 list가 있고 b=[11,23,43]라는 list가 있는데 이 두개의 list를 하나의 리스트로 만들고 싶다고 가정해보자.

 

구글 검색창에 python  two list라고 입력해보자. 일단 언어는 알려줘야 하니 python을 입력하고 two list까지 입력하자. 연결은 영어로 뭔지 잘 모르겠어서 아직 입력 안했다. 하지만 구글은 이미 연결이 merge라는 걸 알려주고 있다. 아래에 보니 compare도 있다.

 

python two list merge로 검색하면 맨 위의 결과를 보니 concatenate two lists라는 말이 보인다. merge가 아니지만 일단 눌러서 들어가보자.

 

 

위쪽의 질문 내용을 건너 뛰고 아래쪽에 Answer쪽을  보자. 두개의 리스트를 더하는 방법은 그냥 +연산을 하는 것이라는 것을 알 수 있다. 왼쪽의 숫자는 좋아요 숫자로 생각하면 된다. 숫자가 높을 수록 신뢰할 수 있는 답변이라는 뜻이다.

 

>>> a=[1,2,3,4]
>>> b=[11,23,43]
>>> a+b
[1, 2, 3, 4, 11, 23, 43]

 

답변 내용을 확인했다면 콘솔창에서 확인해보면 된다. 이렇게 구글링을 하면서 코딩하는 것이다. 구글링으로 코딩 배우기인가 이런 책도 나왔던 것 같다.

 

오늘은 변수, 숫자형, 문자형, list형, dictionary형 이렇게 알아봤다. 그리고 구글링으로 구현하고자 하는 코드를 알아내는 방법을 알아봤다. 점프투 파이썬에는 각 장마다 연습문제들이 있지만 다음 게시물에 올라가는 제어문을 한 다음에 실제 문제를 만들어 풀어보도록 하겠다.