파이썬 프로그래밍 기초(1)


  • edwith 강좌를 바탕으로 정리한 내용입니다.

1. 파이썬 배우는 방법

외국인과 대화하기 위해서 그 나라의 언어를 알아야 하듯이 컴퓨터와 대화하기 위해서는 컴퓨터의 언어를 알아야합니다. 컴퓨터의 언어는 java, python, c 등 다양한 언어가 있습니다.

python을 배워야할까요?

그 이유는 python이 가장 인간 친화적여서 배우기 쉽기때문입니다. 인간 친화적이라고 하는 이유는 우리가 의사소통하는 방식과 매우 유사하기 때문입니다.

어떻게 python을 배워야 할까요?

우리가 영어를 공부하는 방법과 유사합니다. 영어공부를 할 때 단어와 문법을 배우고 문장을 만들어 외국인과 대화하는 것을 연습합니다. 마찬가지로 python의 단어와 문법을 배우고, 문장을 만들어 컴퓨터와 의사소통하는 연습을 하면 됩니다.

파이썬 언어를 이용해 어떻게 컴퓨터와 의사소통 할 수 있을까요?

우리는 말과 글을 통해 다른 사람과 의사소통할 수 있지만, 컴퓨터와는 글을 통해서만 의사소통이 가능합니다. 글을 전달하는 방법은 메신저를 이용해서 문장을 주거니 받거니 하듯이 커멘트라인에서 코드를 한줄씩 실행하는 상호대화식(interactive)과 메일을 써서 의사를 전달하듯이 여러줄의 코드를 작성해서 전달하는 스크립트(script) 방식이 있습니다.

우리는 컴퓨터와 대화하기 위해서 쓰는 단어를 코드라고 하고
문장과 문단을 만들어 작성한 글을 프로그램이라고 합니다.
그 글을 작성하는 행위를 프로그래밍,
작성자를 프로그래머라고 합니다.

그럼 이제 파이썬 프로그래머가 되기 위해서 파이썬으로 글쓰는 방법에 대해 공부하려 합니다.

2. 파이썬 단어

2-1. 예약어

파이썬이라는 강아지가 있다고 생각해 봅시다. 파이썬은 앉아, 일어서, 밥, 간식 이런 단어들을 훈련하기 전에 이미 알고 태어났습니다. 그런 단어들을 우리는 예약어라고 합니다. 예약어는 이미 파이썬과 약속된 단어이기 때문에 변수의 이름이나 식별자로 사용할 수 없습니다. 파이썬의 예약어는 다음과 같은 종류가 있습니다.

   
Falseclassreturn
isfinallyNone
ifforlambda
continuetruedef
fromwhilenonlocal
anddelglobal
notwithas
eliftryor
yieldassertelse
importpass 

파이썬이 알고 있는 예약어에는 연산자와 내장함수도 포함됩니다. 기본 연산자와 내장함수는 다음과 같습니다. 반드시 꼭 외워야할 것이 아니니 가볍게 읽고 지나가겠습니다. 각 기능들의 상세 내용은 다음 링크를 참고하시면 좋습니다 :)

2-2. 연산자

  
**지수 (전원으로 인상)
~ + -Ccomplement, 단항 플러스와 마이너스 (마지막 두의 메서드 이름은 + @이며, - @)
* / % //곱하기, 나누기, 나머지, 몫
+ -덧셈과 뺄셈
» «좌우 비트 시프트
&비트 ‘AND’
^ , backslash비트 전용 ‘OR’와 정기적 인 ‘OR’
<= < > >=비교 연산자
<> == !=평등 연산자
= %= /= //= -= += *= **=할당 연산자
is ,is not식별 연산자
in , not in맴버 연산자
not ,or ,and논리 연산자

연산자 우선순위

2-3. 내장함수

   
absallany
chrdirdivmod
enumerateevalfilter
hexidinput
intisinstancelambda
lenlistmap
maxminoct
openordpow
rangesortedstr
tupletype 

내장함수 더 알아보기

3. 파이썬 문장 만들기

논리적인 글을 쓰는 법을 배우기 전에 문장의 구성요소에 대해 간단히 살펴보겠습니다. 예를 들어 한글 문장은 [주어 + 목적어 + 동사] 이렇게 순서가 있는 것 처럼 파이썬은 [변수 + 할당자 + 값] 이렇게 순서가 정해져 있습니다.

변수는 우리가 이름을 짓듯이 이름을 정하면 파이썬이 기억합니다.
할당자는 ‘=’입니다. (할당연산자는 몇가지 더 있습니다.)
할당자는 변수에 어떤 값을 넣겠다라는 역할을 합니다.
수학에서 같다라는 연산자는 ‘==’이니 헷갈리지 마세요 :)

예를 들어 보겠습니다.

x가 2를 가지고 있습니다.라는 문장을 파이썬의 문장으로 바꿔보겠습니다.

# 변수:x , 할당자: = , 값: 2
x = 2

처음이신 분들은 약간 이 문법을 받아들이기 어려울 수 있습니다. 그러나 계속 마주치다보면 익숙해질테니 그렇구나 하고 자주 보는게 좋습니다.

변수라는 용어가 너무 추상적이라면 변수는 값을 담는 상자라고 생각하시면 됩니다. 물리적으로는 값을 담아 기억하는 메모리공간 입니다.

이제까지 문장을 만드는 구성요소에 대해 알아보았습니다. 다음으로는 문장을 만들어서 문단을 쌓아 글을 써보겠습니다.

4. 파이썬으로 글쓰기

우리가 논리적인 글을 쓸 때 글 전체가 전달하고자 하는 의미, 문단이 전달하고자 하는 의미, 문단 간의 조화가 어떻게 이뤄질지, 미괄식일지 두괄식을 정해 어떻게 전달하는지에 대해 생각하고 글을 씁니다.

그럼 파이썬으로 글을 작성하고자 할 때는 어떤걸 고려해야 할까요? 최종적으로 어떤 프로그램을 만들것인지, 각 문단으로 하나의 기능으로 보고 어떤 기능이 필요할지, 각 기능들을 어떻게 연결할지, 각 기능들을 어떤식으로 구현해야 할 지 생각해야 합니다.

각 기능을 구현하는 방법 즉, 글을 서술하는 방법에 대해 알아 보도록 하겠습니다. 파이썬에서는 3가지의 서술패턴이 있습니다.

  1. 순차문 : 순서대로 진행하는 방법입니다.
  2. 조건문 : 어느 부분을 건너뛰는 것입니다.
  3. 반복문 : 계속해서 반복하는 방법입니다.

4-1. 순차문 (Sequential Steps)

x = 2     # x의 변수를 찾아 2를 담습니다.
print(x)  # x변수를 출력합니다.
x = x + 2 # x변수에 2를 더해 다시 담습니다.
print(x)  # x변수를 다시 출력합니다.

위의 코드를 작성하고 실행하게 되면 처음 줄부터 차례대로 실행됩니다. 순차문을 이용하면 단조로운 코드만 작성할 수 있습니다. 조금 더 다양하게 응용할 수 있는 패턴에 대해 알아보도록 하겠습니다.

4-2. 조건문(Conditional Steps)

조건문은 어떤 조건을 만족해야 순차적으로 실행하고, 만족하지 못하면 특정 부분을 건너 뛸 수 있습니다.

조건문은 if 라는 예약어를 이용합니다. 조건문의 기본 구조는 다음과 같습니다.

if 조건 :
  참인 경우 문장1
  참인 경우 문장2

else :
  거짓인 경우 문장1
  거짓인 경우 문장2

조건이 만족한다면 다음 문장에 들여쓰기 된 부분을 실행합니다. 조건이 참이냐 거짓이냐에 따라 코드가 실행되는냐 건너뛰나를 결정합니다.

예를 들어 설명해보겠습니다. 우리가 x의 값에 따라서 조건을 설정한다고 했을 때 다음과 같이 작성할 수 있습니다.

x = 5               # x 변수에 5를 담습니다.
if x < 10:          # 조건 1 x가 10보다 작으면
  print('Smaller')  # 조건 1을 만족하면 Smaller를 출력합니다.
if x > 20:          # 조건 2 x가 20보다 크면
  print('Bigger')   # 조건 2를 만족하면 Bigger를 출력합니다.

print('Finish')     # if 조건문이 끝나면 finish를 출력합니다.

조건이 2개 이상일 경우 if 문을 2번 사용해도 되지만 elif 예약어 사용도 가능합니다.

if 조건1:
  조건1 참인 경우1
elif 조건2:
  조건2 참인 경우2
else:
  문장
조건문 주의사항
  1. if ,elif, else 옆에는 항상 콜론 : 이 있어야합니다.
  2. 조건이 만족하거나 만족하시 않을 경우 실행되는 문장은 들여쓰기로 구분합니다.
  3. else는 없어도 실행이 가능합니다.
들여쓰기

파이썬에서는 들여쓰기로 조건을 만족할 경우 같이 수행되는 문장을 판단합니다. 따라서 들여쓰기가 다를경우 컴퓨터가 이를 이해하지 못해 오류가 생길 수 있습니다.

문장 들여쓰기 오류 예
money = 1000
water = 500
if water < money :
  print("생수를 뽑는다")
  print("물을 마신다")
    print("시원하다")
money = 1000
water = 500
if water < money :
  print("생수를 뽑는다")
print("물을 마신다")
    print("시원하다")
조건 판단

조건의 판단하는 값은 참(True)과 거짓(False) 2 가지 입니다. 참과 거짓을 판단하는 방법은 연산기호, 논리기호, 존재여부, 자료형여부로 나뉩니다.

판단하는 방법에 대해 간단히 살펴보도록 하겠습니다. 이것도 그냥 한번 읽고만 지나가셔도 됩니다.

1) 비교 연산 기호

  
==같다
!=다르다
a<ba가 b보다 작다
a<=ba가 b보다 작거나 같다
a>ba가 b보다 크다
a>=ba가 b보다 크거나 같다
a=3
b=5
a<b   #true
a>b   #false
a==b  #false
a!=b  #true

2) 논리 기호

  
x and yx 와 y 모두 참
x or yx 또는 y 둘 중 하나만 참이면 참
not xx가 거짓이면 참

3) 값의 존재 여부

  
in값이 존재할 떄 true
not in값이 존재하지 않을 때 true

값의 존재여부 조건은 주로 리스트와 함께 사용됩니다.

"korean" in ["korean","english"]

if "커피" not in ["우유","녹차","홍차"] :
  print("우유주세요")


if "커피" not in ["커피","녹차","홍차"] :
  print("우유주세요")
else :
  print("커피주세요")

4) 자료형의 참과 거짓

  • 숫자형의 경우 0은 False , 나머지는 true
  • 문자열, 리스트, 딕셔너리의 경우에는 비어 있을 때는 flase, 값이 하나라도 있으면 true

    숫자
      - 0이 아닌 숫자 : true
      - 0 : flase
    
    문자열
      - "string" : true
      - "" : flase
    
    리스트
      - [1,2,3] : ture
      - [] : False
    
    딕셔너리
      - {"x":"y"} : ture
      - {} : False
    

4-3. 반복문(Repeated Steps)

조건식이 참이면 코드가 반복적으로 실행되며 조건이 만족하지 않으면 반복을 그만합니다. 반복문을 표현하는 예약어는 while, for문 2가지가 있습니다.

while문

while문의 기본구조는 다음과 같습니다.

while : ~하는 동안
while 조건 :
  문장 1
  문장 2

  조건을 만족하는 동안 계속 문장1, 문장2 계속 수행
  거짓인 경우 반복 실행을 정지

while 주의 사항
  • 조건을 바꿔주는 문장이 있어야 반복이 끝납니다.
  • 조건을 바꿔주는 문장이 없을 경우 무한반복이 실행됩니다.

예시를 통해 다시 한번 보겠습니다.

n = 5           #  n변수에 5를 담습니다.
while n > 0 :   #  조건 n이 0보다 크면
  print(n)      #  n 을 출력합니다.
  n = n - 1     #  n에서 1을 뺍니다.
                #  조건 n이 0보다 작으면 반복문이 끝납니다.
print('finish') #  finish를 출력합니다.

n이 하나씩 줄어들면서 계속 반복하면서 조건이 참인지를 확인합니다.

for문

while문과 비슷한 구문이지만 집합자료에서 하나씩 값을 가져와 처리할 수 있습니다.

for문의 기본구조는 다음과 같습니다.

for문의 기본 구조
for 변수 in 집합자료(리스트):
  문장1
  문장2
dictionary = ["korean","english","french"]
for language in dictionary:
  print(language)

language 라는 변수가 생기고 dictionary에 있는 값이 하나하나 들어가서 출력됩니다.

range 함수

영어의 숙어처럼 for문과 함께 자주 쓰이는 range함수가 있습니다.

range함수의 구조는 다음과 같습니다.

range(끝) : 0부터 시작에서 끝-1 까지 하나씩 리턴
range(시작,끝) : 시작 부터 끝-1 까지 하나씩 리턴
range(시작,끝,증가단위) : 시작부터 끝-1까지 증가단위 만큼 리턴
# 예 : 1부터 10까지 더해보자
sum = 0
for num in range(1,11):
  sum += num

print(sum)
break 와 continue

반복문은 무한반복으로 이야기가 진행될 수 있습니다. 마치.. 이 편지는 영국에서부터 시작되어 ..와 같은 행운의 편지가 되어버리면 답이 없겠죠?

그럴때 사용하는것이 break와 continue 함수입니다. break는 반복문을 강제로 빠져나오는 역할을 합니다. continue는 현재 작업을 중단하고 다시 조건부분으로 돌아가 조건을 확인합니다.

break와 continue의 활용을 예로 들어보겠습니다.

작심삼일 다이어트를 아예 포기할때는 break를 사용합니다.


weight = 10
day = 0
while weight > 0 :
  day = day +1
  print(day,"일째")
  if day == 3:
    print("다이어트 포기")
    break
  print("07시 기상, 아침식사, 운동")
  print("점심식사, 운동")
  print("저녁식사,운동,취침")
  weight = weight -1

print("살은 빼서 뭐해")

매일 운동하기 힘드니까 3일째만 잠시 쉴때는 continue를 사용합니다.

weight = 10
day = 0
while weight > 0 :
  day = day +1
  print(day,"일째")
  if day == 3:
    print("치킨먹는날")
    continue
  print("07시 기상, 아침식사, 운동")
  print("점심식사, 운동")
  print("저녁식사,운동,취침")
  weight = weight -1

print("성공!")

5. 순차문 , 조건문, 반복문 으로 글 쓰기

이제까지 파이썬으로 글을 쓰는 패턴에 대해 알아보았습니다. 그럼 배운 패턴을 사용해서 하나의 글을 완성해보도록 하겠습니다. 파이썬이란 언어를 이용해서 단어수 세기 라는 글을 써보겠습니다.

모든 코드를 이해하지 않으셔도 괜찮습니다. 어떻게 글이 구성되어 있는지를 파악하는 것이 목적입니다.

이야기 구성은 다음과 같습니다.

  1. 사용자의 데이터를 읽어드립니다.
  2. 단어가 얼마나 나왔는지 세립니다.
  3. 리스트에 있는 단어중 가장 많이 나온 단어가 무엇인지 찾습니다.

이제 파이썬으로 이야기를 쓰겠습니다.

### 1. 사용자의 데이터를 읽어드립니다.
# 순차문 시작
name = input('Enter file:')
handle = open(name,'r')

counts = dict()

###2. 단어가 얼마나 나왔는지 세립니다.
# 반복문1 시작
for line in handle :
  words = line.split()
  # 반복문2 시작
  for word in words :
    counts[word] = counts.get(word,0) + 1
  # 반복문2 끝
# 반복문1 끝

# 순차문 계속
bigcount = None
bigword = None

# 반복문 3 시작
for word,count in counts.items() :
  ### 3. 리스트에 있는 단어중 가장 많이 나온 단어가 무엇인지 찾습니다.
  # 조건문 시작
  if bigcount is None or count > bigcount :
    bigword = word
    bigcount = count
  # 조건문 끝
# 반복문 3 끝

# 순차문 끝
print(bigword, bigcount)

순차문, 반복문 속의 반복문, 순차문 , 반복문 속의 조건문, 순차문으로 구성되어 있습니다. 마지막으로 제일 많이 들어 있는 단어를 출력하면서 이야기가 끝이 납니다.

한줄씩 문장들이 의미하는 바가 무엇인지 알고 싶으신 분들은 다음을 참고하시면 됩니다. 너무 복잡하다고 생각하시는 분들은 그냥 넘어가도 괜찮습니다 :)

# 순차문 시작
name = input('Enter file:')
handle = open(name,'r')   #  파일을 엽니다.

counts = dict()           #  딕셔너리 자료형을 만듭니다.

# 반복문1 시작
for line in handle :      #  반복문 1을 시작합니다. 파일에 있는 라인을 한줄 씩 읽어 옵니다.
  words = line.split()    #  라인을 단어로 잘라 words 리스트 변수에 넣습니다.
  # 반복문2 시작
  for word in words :     #  반복문 2를 시작합니다. words 리스트에 있는 단어를 하나씩 가져와 word라는 변수에 넣습니다.
    counts[word] = counts.get(word,0) + 1     # count딕셔너리에 word키 값을 생성하고 1씩 더합니다.
  # 반복문2 끝              #  words리스트에 있는 모든 단어를 다 읽어 오면  반복문 2가 끝이 납니다.
# 반복문1 끝                #  파일에 있는 모든 라인을 다 읽어오면 반복문 1이 끝이 납니다.

# 순차문 계속
bigcount = None          #  bigcount라는 변수를 만듭니다.
bigword = None           #  bigword라는 변수를 만듭니다.

# 반복문 3 시작
for word,count in counts.items() :    # 반복문 3을 시작합니다. counts딕셔너리에 있는 아이템을 하나씩 가져와 word와 count라는 변수에 넣습니다.
  # 조건문 시작
  if bigcount is None or count > bigcount :   # 조건문을 시작합니다. bigcount가 none값이거나 count값이 bigcount보다 크면
    bigword = word                            # bigword 변수에 word를 넣습니다.
    bigcount = count                          # bigcount 변수에 count를 넣습니다.
  # 조건문 끝
# 반복문 3 끝                           # 딕셔너리에 있는 모든 단어를 다 읽어오면 반복문 3이 끝이 납니다.

# 순차문 끝
print(bigword, bigcount)              # 단어들 중에서 가장 많이 나온 단어와 단어수를 출력합니다.

정리

오늘은 정말 많은 이야기를 말씀드린것 같은데요. 한가지만 기억하셔도 됩니다.

파이썬은 글을 쓰는 방법과 유사하며, 글을 쓰는 패턴은 순차문, 조건문, 반복문이 있습니다.

참조

  1. 모두를 위한 프로그래밍 : 파이썬 - edwith 강좌
  2. 파이썬을 활용한 기초 컴퓨터 프로그래밍 - edwith 강좌