바로 쓰는 파이썬 기초편 Lecture Notes

컴퓨터의 개념 및 실습

This project is maintained by jinsooya

3장: 파이썬 문법 미리 알아두기

Prerequisites for Python Programming<


박 진 수 교수
Intelligent Data Semantics Lab
Seoul National University


Table of Contents

아주 간단한 프로그램

아래 링크로 가서 파이썬 프로그램을 내려받기 한다.

다음 코드를 입력해 실행해보자.

from tkinter import *
 
window = Tk()
window.title('Welcome to Python World!')
window.geometry('370x90')
 
lbl = Label(window, text='Hello, Python!', font=('Arial Bold', 50))
lbl.grid(column=0, row=0)

btn = Button(window, text='Quit', command=window.destroy)
btn.grid(column=0, row=1)
 
window.mainloop()

실행된 창에 ‘Hello, Python!’라고 되어있는데 이를 ‘Hi, Python!’으로 바꾸려면 코드의 어디를 수정해야할까?

여러분은 심지어 코드가 어떤 의미를 갖는지도 모르는 상태에서도 프로그램을 수정할 수 있다.

사실, 프로그래밍의 대부분은 이것과 크게 다르지 않다.

컴퓨터가 이해할 수 있는 언어 규칙에 맞춰 여러분이 원하는 바를 작성하는 것이 프로그래밍이다.

확장자명

인코딩

UTF-8 문자 인코딩(encoding)

한 줄이 넘는 코드 작성하기 : 들여쓰기

indentation-1

if 7 > 3:
    print(7 - 3 - 1)

들여쓰기

Space sensitive

TabError

if True:
    print('4 spaces')  # space 4칸 사용
   print('3 spaces')   # space 3칸 사용
x = 1
 y = 3

같은 코드 블록만 아니면 탭(tab)과 공백(space)을 혼용해서 사용할 수 있지만 권장하지 않는다.

if True:
    print('4 spaces')  # space 4칸 사용
else:
    print('1 tab')     # tab 1개 사용
if True:
 print('1 spaces')  # space 1칸 사용
else:
    print('1 tab')  # tab 1개 사용

가독성을 높이는 수단이지만 잘못 사용해서 문법적 오류 대신 논리적 오류로 빠지게 되면 디버깅하기가 매우 힘들어 질 수도 있다.

연산

숫자 연산

5 + 7
5 - 7
7 * 2
7 / 2

문자열 연산

'안녕' + '파이썬'
'파이썬' * 3
'안녕' - '파이썬'
'안녕' / '파이썬'

Lab: 연산해보기

파이썬 대화형 모드에서 더하기, 빼기 곱하기 등의 연산을 하면 결과를 바로 알려준다.

Q1. 1부터 10까지 더하면 얼마인가?

Q2. 1부터 10까지 더한 값에 10 이하의 짝수를 모두 더한 값을 빼면 얼마인가?

만약 계산된 결과를 반복해서 사용해야 한다면?

변수를 정의해서 사용하면 편리하다.

Q3. 1부터 10까지 더한 값에 10 이하의 홀수를 모두 더한 값을 빼면 얼마인가?

Q4. 1부터 10까지 더한 값에 10 이하의 3의 배수를 모두 더한 값을 빼면 얼마인가?

이처럼 변수를 사용해서 계산을 하면 데이터를 처리하는 것이 편리하다.

변수

변수(variable)란?

동일 변수에 다른 객체를 언제든 할당할 수 있기 때문에, 즉 참조하는 객체가 바뀔 수 있기 때문에 ‘변수’라고 부른다.

변수 할당

x = 1
y = 1
z = 1

하지만 다음과 같이 약간 다른 형식으로도 사용할 수 있다.

x = y = z = 1
print(x, y, z)

변수를 사용하면 컴퓨터와 프로그래머 모두가 데이터를 쉽게 관리할 수 있다.

x = 1
y = 'Hello'
z = 'Good Bye~~~!'

print(x)
print(y)
print(z)

어떤 데이터에는 따옴표가 있고 어떤 데이터에는 따옴표가 없나요?

다음 코드를 실행해보자.

x = 1
y = '1'

print(x)
print(y)

위의 코드를 보면 두 변수 xy는 같은 값을 갖고 있는 것처럼 보인다.

하지만 변수의 종류를 알려주는 함수인 type()을 이용하면 두 변수가 다른 종류인 것을 알 수 있다.

print(type(x))
print(type(y))

변수 x는 숫자형인 int, 변수 y는 문자열인 str임을 알 수 있다.

지금은 변수에도 자료형(data type)이 있다는 것만 알아두고 자세한 내용은 잠시 후에 다루자.

다음 코드를 실행해보자.

x = hello

무엇이 문제인가요?

다음 코드를 실행해보자.

hello = 'Good Bye~~~!'

print(hello)
print('hello')

두 개의 비슷한 print() 문이 전혀 다른 값을 출력하는 것을 알 수 있다.

파이썬에서는 따옴표로 묶은 문자는 문자열로 인식하고, 따옴표로 묶지 않은 문자는 변수의 이름으로 인식한다.

그러면 변수 이름으로 아무 문자를 마음대로 사용할 수 있나요?

한국어 = '영어'  
숫자 = 5

print(한국어)
print(숫자)

이처럼 심지어 한국어로 변수 이름을 사용하는 것도 가능하다.

하지만…

먼저 숫자 3을 아래와 같이 힘수 print에 할당한다.

print = 3

그리고 다시 함수 print를 실행해서 문자를 출력해보자.

print('Hello, Python!')

즉, print는 더 이상 출력을 할 수 없게 되어버렸다.

print

파이썬이 이미 사용하고 있는 이름을 변수 이름으로 사용하게 되면 이처럼 복잡한 문제가 발생할 수 있다.

앞의 예에서는 출력을 담당하는 함수 print의 이름을 변수로 사용해, 더 이상 출력 함수를 사용할 수 없게 되어버렸다.

따라서…

파이썬이 이미 사용하고 있는 이름은 건드리지 말자.

이처럼 변수 이름으로 사용할 수 있는 것들에는 제약이 생긴다.

식별자

식별자(identifier)란?

파이썬 ‘객체’(데이터)를 식별하기 위해 붙이는 이름이다.

즉, 컴퓨터의 메모리 어딘가에 저장(위치)한 객체(데이터)를 컴퓨터와 프로그래머 모두가 쉽게 관리할 수 있도록 변수, 함수, 클래스 등에 붙이는 이름을 말한다.

식별자 구성 규칙

하나 또는 그 이상의 공백이 없는 문자와 숫자의 조합으로 길이는 제한이 없다.

하지만 숫자로 시작할 수는 없다.

문자 : 유니코드 문자(Unicode characters) 중 영어 알파벳(a … z, A … Z), 밑줄(‘_’), 한글

숫자 : 0, 1,…, 9

대소문자를 구분한다.

파이썬 예약어(키워드)와 동일한 이름사용할 수 없다.

퀴즈

다음 중 식별자로 적절한 것과 아닌 것을 구별하시오.

tax4

tax4 = 0.05
print(tax4)

4tax

4tax = 0.07
print(4tax)

interest-rate

interest-rate = 0.02
print(interest-rate)

interest_rate

interest_rate = 0.02
print(interest_rate)

korea’s

korea's = '태극기'
print(korea's)

str

str = 'interest-rate'
print(str)

int

int = 5
print(int)

이름

이름 = '대한민국'
print(이름)

예약어(Reserved Words)와 키워드(Keywords)

예약어(reserved words)란 특별한 용도로 사용하기 위해 미리 예약한 식별자(reserved identifiers)

파이썬 예약어/식별자는 어떻게 확인할 수 있을까?

방법 1:

help('keywords')

방법 2:

import keyword
print(keyword.kwlist)

주의

if = 1

출력

출력은 특히 초보 프로그래머들에게 필수인 기능(함수)이다.

파이썬에서는 print() 함수를 이용해 다양한 것들을 출력할 수 있다.

print('Hello, Python!')

따옴표 안의 내용을 수정해 다양한 문장을 출력해보자.

# --- 실습 : 다양한 문장 출력해보기
print('')

한글도 출력할 수 있나요?

# --- 실습 : 한글 출력해보기
print('')

출력 방식과 출력 형식

'안녕 파이썬!!!'
11 + 22
print('안녕 파이썬!!!')
print(11 + 22)

대표 형식과 텍스트 형식의 차이는 뭔가요?

a = '홍길동'                    # 변수 a에 문자를 할당한다.
a                              # 문자를 대표 형식으로 출력한다.
print(a)                       # 문자를 텍스트 형식으로 출력한다.
b = '27'                       # 변수 b에 문자를 할당한다.
b                              # 문자를 대표 형식으로 출력한다.
print(b)                       # 문자를 텍스트 형식으로 출력한다.
c = 27                         # 변수 c에 숫자를 할당한다.
c                              # 숫자를 대표 형식으로 출력한다.
print(c)                       # 숫자를 텍스트 형식으로 출력한다.
d = '첫째 줄\n둘째 줄'           # 변수 d에 특수문자가 있는 문자를 할당한다.
d                              # 특수문자가 있는 문자를 대표 형식으로 출력한다.
print(d)                       # 특수문자가 있는 문자를 텍스트 형식으로 출력한다.
'Python',1, 2,      3          # 여러 개의 객체를 대표 형식으로 출력한다.
print('Python',1, 2,      3)   # 여러 개의 객체를 텍스트 형식으로 출력한다.

모듈은 대표 형식이나 텍스트 형식으로 출력할 수 없기 때문에 꺾쇠 괄호 안에 sys가 파이썬 내장(built-in) 모듈이란 표현이 출력된다.

import sys                     # 모듈을 입력한다.
sys                            # 모듈 이름을 대표 형식으로 출력한다.
print(sys)                     # 모듈 이름을 텍스트 형식으로 출력한다.

Lab: 다음 내용을 출력해보기

# --- 대표 형식
1,2,3, 4,      5
# --- 텍스트 형식
print(1,2,3, 4,      5)
# --- 대표 형식
'Python', 3
# --- 텍스트 형식
print('Python', 3)
# --- 대표 형식
1 + 2 + 3 + 4 + 5
# --- 텍스트 형식
print(1 + 2 + 3 + 4 + 5)
x = '홍길동'
y = 27
# --- 대표 형식
x, y
# --- 텍스트 형식
print(x, y)
x = '안녕'
y = '파이썬'
# --- 대표 형식
x + y
# --- 텍스트 형식
print(x + y)
# --- 텍스트 형식
print()    # 빈 칸 한 줄이 출력된다.

고급 : print() 함수 탐구하기

작성 방법

print(*objects, sep=’ ‘, end=’\n’, file=sys.stdout, flush=False)

따라하기 : print() 함수 잘 활용하기

print('Python', 3)
print('Python', 3, sep='')
print('Python', 3, sep=' version ')
print(1, 2, 3, 4, 5, sep=' + ')
name = '파이썬'

# 아래 코드의 차이가 뭔지 확인하세요.
print('Hi!', name)   
print('Hi! ' + name)  # 문자열 결합
# 아래 코드의 차이가 뭔지 확인하세요.
print('The length of', name, 'is', len(name))
print('The length of ' + name + ' is ' + str(len(name)))  # 문자열 결합
age = 19
# 아래 코드의 차이가 뭔지 확인하세요.
print('You will be', age + 1, 'years old in the next year.')
print('당산의 나이는 내년에 ' + str(age + 1) + '살이 됩니다.')  # 문자열 결합

입력

파이썬에서 입력을 받는 대표적인 함수로는 input()이 있다.

input('무엇이든 입력해 주세요: ')

input() 함수의

‘무엇이든 입력해 주세요: ‘ 대신에 화면에 ‘좋아하는 숫자를 입력해 주세요: ‘라고 표시되게 코드를 수정해보자.

Lab: 따라해보기

input()                   # no prompt
input('이름을 입력하세요: ')  # using prompt

그런데, 우리가 입력한 값은 어디로 가는 것일까?

프로그램에서 입력을 받았다면 그 값을 사용할 수 있어야 한다.

다음 코드를 실행해보자.

x = input('좋아하는 숫자를 입력해 주세요: ')
print('당신이 좋아하는 숫자는', x)

좋아하는 숫자 x에다 5를 더해보자.

x + 5

어찌된 영문일까?

입력받은 값의 자료형을 확인해보자.

print(type(x))

x의 자료형이 문자열이다.

따라서 숫자 5와 문자열은 덧셈 연산을 할 수 없다.

Lab: 입력 값의 자료형을 육안으로 확인하기

문자열을 입력한 경우

name = input('이름을 입력하세요: ')
name  # 문자열이다.

숫자를 입력한 경우

age = input('나이를 입력하세요: ')
age  # 문자열이다.

input() 함수가 반환하는 값은 모두 문자열이다.

따라서 이 값으로 사용하여 계산을 하려면 문자열 자료형을 숫자 자료형으로 변환해야 한다.

int(age) + 1

그렇지 않으면…

age + 1

정리 : input([prompt]) 함수

형변환

형변환(casting)이란?

어떤 자료형(data type)을 다른 자료형으로 변환시키는 과정

형변환의 필요성

파이썬은 변수를 선언할 때 자료형을 지정할 필요가 없다.

x = 1
y = 2
print(x + y)

이번에는 숫자 대신에 문자열을 사용해보자.

x = '1'
y = '2'
print(x + y)

이번에는 변수 xy를 선언할 때 숫자를 작은 따옴표(‘‘)로 둘러싸서 문자열 변수라고 선언해 주자 파이썬은 이를 알아채고 결과로 ‘12’를 반환한다.

그렇다면, 만약 호환될 수 없는 서로 다른 자료형 변수를 가지고 연산을 한다면 어떤 결과가 나올까?

문자형 변수와 숫자형 변수의 합 연산 결과는 어떻게 될까?

a = 1
b = '2'
a + b

위와 같이 정수와 문자열 변수 간에는 + 연산을 할 수 없다면서 TypeError가 발생한다.

즉, 두 변수의 자료형이 맞지 않아 에러가 난 것으로, 이런 경우에 연산을 수행하고 싶다면 형변환(casting)을 통해 같은 자료형(또는 연산이 가능한 유사 자료형)으로 바꿔 줘야 한다.

x = 1
y = '2'
print(x + int(y))

변수 y는 문자형으로 선언되었지만 int() 클래스를 통해 정수로 변환했기 때문에 1과 합 연산이 가능하다.

자주 사용하는 형변환 클래스

잠깐…

이번 실습에서 변수 xy를 여러 번 사용하였다.

변수 x에 새로운 값이 할당되면 이전의 값은 사라져버린다.

따라서 변수를 여러 개 사용해야 하는 프로그램을 작성하는 경우 적절한 변수 이름을 생각하는 것도 굉장한 노동이다.

형변환이 가능한 자료형

형변환은 데이터 분석시 매우 유용하고 강력한 기능이지만

변수의 자료형이 서로 변환 가능한 형태인 경우에만 형변환을 할 수 있다.

정수(integer)를 실수(float)로, 실수(float)를 정수(integer)로 변환할 수 있다.

x = 5            # 정수
print(type(x))   # x는 정수다.
x = float(x)    # 정수를 실수로 형변환한다.
print(type(x))  # x는 이제 실수다.
x = int(x)      # 실수를 정수로 형변환한다.
print(type(x))  # x는 다시 정수로 바뀌었다.

숫자(정수와 실수)를 문자열로 변환할 수 있지만, 문자열은 숫자로 변환 가능한 것만 숫자로 변환할 수 있다.

x = 5           # 정수
print(type(x))  # x는 정수다.
x = str(x)      # 숫자(정수와 실수)는 문자열로 형변환할 수 있다.
print(type(x))  # x는 문자열이다.
x = float(x)    # 문자열 중 숫자로 변환이 가능한 문자열은 숫자로 변환할 수 있다.
print(type(x))  # x는 이제 실수다.

만약 자료형이 서로 변환 가능한 형태가 아니면 오류가 발생한다.

x = 'drum'      # 문자열
print(type(x))  # x는 문자열이다.
x = float(x)    # error

Lab: 형변환하기

(제일 중요한) 주석 달기

주석(comment)이란?

가장 중요한 습관

파이썬에서 주석다는 법

한 줄 전체를 주석 처리하는 예

# 이름을 출력합니다.
print('Python')

그 줄의 마지막 부분에 작성하는 예

print('Python')  # 이름을 출력합니다.

주석은…

머리말(header) 주석달기

매우 중요!!!

본 강의에서 배부되는 과제의 머리말은 반드시 다음과 같이 작성되어야 한다.

# Assignment Number...: 
# Assignment Title....:
# Student ID..........:
# Student Name........: 반드시 한글 이름으로 이름 작성
# File Name...........:
# Program Description.:

Lab: 입력, 연산, 출력하기

실행 예시

> python lab03.py
이름을 입력하세요...: 파이썬
안녕 파이썬
몇 살이세요? 19
You will be 20 years old in the next year.
내년에 20살이 되시는군요.
Bye~~~!

THE END