파이썬을 사용하기 위한 환경 구축이 완료되었다면 이제부터 가장 기초가 되는 파이썬 문법을 살펴보겠습니다.
우리는 파이썬을 사용하여 무엇을 하고자 하는걸까요?
왜 파이썬을 배우려고 하는걸까요?
데이터를 분석하기 위해서, AI를 구현/활용하기 위해서 등등.. 많은 이유가 있겠지만 공통된 것은 프로그램을 만들기 위해서입니다.
프로그램이란 무엇일까요?
우리가 무언가 원하는 결과를 얻기 위한 과정을 서술한 것이 프로그램입니다.
즉 어떤 입력을 사용하고 어떤 처리과정을 거쳐서 어떤 결과를 얻을 것인가..의 과정을 서술하는 것입니다.
이런 과정을 서술하기 위하여 자기 자신에게 가장 쉽고 재미있는 도구, 언어를 선택하는 작업이 C/C++이냐 Java냐 파이썬이냐.. 등을 선택하는 것이죠.
그럼 프로그램은 무슨 일을 하는걸까요?
여러가지 정의가 있겠지만 프로그램은 데이터의 흐름을 정의하는 것입니다.
위에서 말씀드린 것처럼 우리가 원하는 결과를 얻기 위하여 어떤 입력, 어떤 처리를 통해서 어떤 결과를 얻을 것인가.. 라는 과정을 데이터의 입장에서 어떻게 데이터가 처리되어야 하는가.. 라는 흐름을 정의하여 우리가 선택한 언어로 서술하는 것이죠.
그렇다면 데이터 흐름을 어떻게 정의할 수 있을까요?
먼저 사용할 데이터를 가리키는 이름이 있어야 무슨 일이든 불러서 시키겠죠.
그래서 데이터를 사용하기 위한 이름을 만들어주어야 합니다.
해당하는 이름에 데이터를 저장시키죠.
그런데 데이터는 형태도 다양하고 제각각 특징과 제한을 가지고 있습니다.
정수, 실수 등 숫자형 데이터는 덧셈, 뺄셈 등 여러가지 연산이 가능하지만 문자형 데이터는 이런 연산은 불가능하겠죠.
이것처럼 각 데이터별로 정수형, 실수형, 문자형 등 다양한 형태를 주게 되고 이러한 형태에 따라서 데이터를 저장하기 위해 컴퓨터 내부에서 사용될 메모리의 크기 등이 주어집니다.
그런데 이런 데이터 형태가 많아지고, 또 복잡해지면서 프로그램을 실행할 때 문제를 일으키거나, 개발을 귀찮게 하는 경우가 생기게 됩니다.
C/C++, Java 등의 언어는 데이터 형태를 지정하여 사용하는 방식을 고수하고 있지만 파이썬과 같은 일부 언어는 데이터 형태를 개발자가 지정하지 않아도 되도록, 편의성을 강조하는 방식을 채택했죠.
내부적으로는 데이터 형태가 지정되어 처리되지만 개발자는 신경쓸 필요가 없습니다.
사실.. 개발을 하다보면 그래도 데이터 형태를 신경써서 작업을 할 수 밖에 없지만.. 일단 외형적으로는 신경쓰지 않아도 됩니다.
그리고 독특한 데이터 형태가 있습니다.
동일한 형태를 가진 데이터가 여러 개 모여있는 데이터 형태인 배열이죠.
[ 1, 2, 3 ]과 같이 대괄호, 데이터, 콤마를 이용해서 정의됩니다.
이렇게 데이터 형태와 이름이 주어졌을때, 해당하는 데이터가 연산을 진행하면서 계속적으로 값이 바뀌는 것을 변수라고 하고 한 번 지정한 값이 바뀌지 않고 계속 사용되는 것을 상수라고 하지요.
이렇게 데이터를 지정할 이름과 저장될 공간, 형태가 주어졌습니다.
그럼 이제 이 데이터들을 우리가 원하는 흐름대로 조작을 해야겠죠?
먼저 데이터에 값을 할당하는 작업이 필요할 것입니다.
a = 1 # a에 1을 할당
b = 2 # b에 2를 할당
c = 3 # c에 3을 할당
간단하죠.
참고로 #은 주석을 표시할 때 사용합니다.
다음으로는 해당 데이터를 우리가 원하는 대로 이리저리 흘려보내야 합니다.
만약 이 데이터가 이런 값이라면, 이런 범위에 속한다면 이렇게 처리하고, 저런 값이라면 저렇게 처리하고.. 와 같이 데이터가 가진 조건에 따라서 흐름을 제어하는 경우가 있습니다.
이럴 때에 사용하는 것이 조건문이죠.
if b < 2: # 만약 b가 2보다 작으면
print(a) # a를 출력
elif b > 2: # 그렇지 않고 만약 b가 2보다 크면
print(c) # c를 출력
else: # 이것도 저것도 아니면
print(b) # b를 출력
다음으로는 어떤 연산을 계속 반복해서 수행해야 할 때가 있습니다.
1부터 10까지 더하세요~ 라던가.. 뭐 여러가지가 있겠죠.
이 때에 사용하는 것이 반복문입니다.
###################################
# 1에서 5까지 더하기
###################################
#----------------------------------
# for 반복문 (배열 사용하기)
#----------------------------------
n = [1, 2, 3, 4, 5]
sum = 0
for x in n: # n에 들어있는 값 모두를 x에 대입해서 처리하며 n에 들어있는 값을 다 쓰면 종료
sum += x # sum 변수에 x 값을 누적
print(sum)
#----------------------------------
# for 반복문 (range()함수 사용하기)
#----------------------------------
sum = 0
for x in range(5):
sum += x + 1 # range함수는 0부터 세기 시작하므로 0, 1, 2, 3, 4 의 값을 가져옴
print(sum)
#----------------------------------
# while 반복문
#----------------------------------
x = 1
sum = 0
while x < 6: # x의 값이 6보다 작다면 계속 반복
sum = sum + x
x = x + 1 # x의 값을 1 증가시켜줌
print(sum)
이런 조건문과 반복문들을 제어문이라고 묶어서 부르기도 합니다.
단순한 for / while 문을 예시로 보여드렸는데 for ~ continue ~ break 구문, for ~ else 구문, while ~ continue ~ break 구문 등 다양한 변형 구문도 사용하실 수 있습니다.
그런데 지금까지의 코드를 보면 코드가 들쭉날쭉하죠.
한 가지 의문을 가져보도록 합시다.
내가 조건문, 반복문 등을 사용해서 데이터를 이리저러 보내고 있는데..
과연 조건에 맞을 때는 어디까지 수행하고, 또 조건에 맞지 않을 때는 어떤 녀석을 수행해야 할까요?
또한 반복 연산은 어디부터 어디까지를 반복해야 할까요?
이런 의문사항을 해결하기 위하여 각 프로그래밍 언어는 구문을 블럭형태로 구성하여 인식을 합니다.
C/C++, Java 등의 언어는 { … }와 같이 중괄호를 사용하여 블럭을 묶습니다.
해당 조건에 맞을 때는 바로 밑에 붙어있는 블럭을 수행하고, 반복 연산을 해야 할 때는 해당 블럭을 반복시키는 것입니다.
파이썬의 경우는 중괄호 대신 들여쓰기를 사용합니다.
그리고 조건 또는 반복을 지시하는 구문의 표시는 콜론( : )을 사용합니다.
C/C++, Java 등에서는 ( … )와 같이 괄호를 사용하여 표시하죠.
아래의 예를 보시면 쉽게 알 수 있습니다.
import pandas as pd
import numpy as np
import requests
import re
from bs4 import BeautifulSoup
sosoks = ['0', '1']
item_code_list = []
for sosok in sosoks:
url_tmpl = 'https://finance.naver.com/sise/sise_market_sum.nhn?sosok=%s'
url = url_tmpl % sosok
html_text = requests.get(url).text
soup = BeautifulSoup(html_text, 'lxml')
item_info = soup.find_all('td', {'class':'pgRR'})
for item in item_info:
href_addr = item.a.get('href')
page_info = re.findall('[\d]+', href_addr)
page = page_info[1]
page = int(page) + 1
for i in range(1, page, 1):
sub_url = '{}&page={}'.format(url, i)
page_text = requests.get(sub_url).text
page_soup = BeautifulSoup(page_text, 'lxml')
items = page_soup.find_all('a', {'class':'tltle'})
for item in items:
item_data = re.search('[\d]+', str(item))
if item_data:
item_code = item_data.group()
item_name = item.text
result = item_code, item_name
item_code_list.append(result)
df = pd.DataFrame(item_code_list)
df.columns = ['item_code','item_name']
print(df)
(출처: 응용하기/주식투자에 대한 활용-네이버에서 모든 종목의 재무제표를 받아서 비교하기)
지금까지 파이썬의 기초 문법에 대하여 알아보았습니다.
정확히는 파이쎤의 기초 문법이라기 보다는 프로그래밍의 가장 기초가 되는 개념입니다만.. 거의 모든 프로그래밍 언어가 동일한 개념으로 구성되어 있기때문에 다른 언어에서도 기초 문법은 쉽게 이해하실 수 있을것입니다.
위에서 다룬 내용 외에도 클래스 등의 개념도 있지만 개발자가 정의하여 사용하는 형태이기때문에 기초 문법에서는 다루지 않았습니다.
또한 조건문에도 위에서 다룬 구문 외에 예외처리를 위한 try ... catch … 와 같은 조건문들도 있습니다만 기초는 다 동일합니다.
(try ... catch ...는 조건문이 아니라 다른 구문이라고 설명하는 분들도 계시지만.. 결국 조건에 따라 처리되는 조건문입니다.)
다음 글부터는 파이썬 입문 카테고리가 아니라 파이썬 기본 카테고리에서 클래스 등의 개념을 설명하는 것보다 파이썬의 특징인 라이브러리를 사용하거나 해서 실제로 개발을 수행할 수 있는 과정들을 하나씩 다루도록 하겠습니다.
파이썬 입문 카테고리에서는 이후에 꼭 알아야 하는 기초적인 내용들이 생각날 때마다 글을 올리는 것으로 하겠습니다.
'개발 도구들 > Python' 카테고리의 다른 글
파이썬으로 프로그래밍에 도전하자(3) (0) | 2020.12.08 |
---|---|
파이썬으로 프로그래밍에 도전하자(2) (0) | 2020.12.07 |
파이썬으로 프로그래밍에 도전하자(1) (0) | 2020.12.06 |
입문편: 파이썬 환경 구축하기 (0) | 2020.06.12 |
입문편: 파이썬을 시작하기 위한 준비작업에 대하여 (0) | 2020.05.22 |