-
Python Programming (1) - 파이썬 기본Python Programming 2020. 3. 28. 06:19728x90
2.Python_Basic 1. Python의 기본¶
Python 프로그램¶
Python 프로그램의 소스 코드는 일련의 정의와 명령문으로 구성된다.
Python 프로그램이나 소스 코드는 스크립트(script)라고도 불림.
프로그램을 작성하는 사람이 command 혹은 statement라고 불리는 문장들을 작성하여, 이 문장들을 통해 Python 인터프리터가 프로그램 작성자의 목적에 맞는 일을 하도록 지시한다.
다음은 print 문장을 이용한 간단한 프로그램이다.
- In [1]: 의 오른쪽의 내용이 우리가 작성하는 프로그램의 내용이며 그 다음 줄의 내용이 프로그램의 실행 결과이다.
이 자료는 Python 3.6을 기준으로 작성되었다.
In [1]:print('This is my first Python program.')
번외 : 만약 Spyder를 이용 중이라면, Spyder 오른쪽 하단의 IPython Console을 이용하여 위의 문장을 실행시켜 보자. Spyder는 Anaconda 배포판을 통해 설치할 수 있는 Python 개발 환경이다. 아래 그림의 In [1]: 오른쪽 부분에 print 'This is my first Python program.' 를 입력하고 엔터를 입력한다.
데이터 타입¶
프로그래밍에 사용되는 데이터들은 데이터 타입(데이터 형)을 구분한다.
Python에는 크게 세 가지 데이터 타입이 존재
- 숫자형
- 5, 10.3, -2, -1.02
- 사칙연산 등을 수행할 수 있음
- 숫자형 데이터는 다시 정수형과 실수형으로 구분할 수 있다.
- 문자열
- "apple", "Hello, world!", 'Yeungnam University', "15"
- 큰 따옴표나 작은 따옴표로 표현
- 부울(Bool)
- True, False
수치와 연산¶
- 숫자형 데이터에는 사칙연산이나 나머지, 제곱 등의 연산을 적용할 수 있다.
- IPython 콘솔은 마치 계산기처럼 이용 가능하다.
In [2]:3 + 4
Out[2]:In [3]:3 - 4
Out[3]:In [4]:3 * 4
Out[4]:- Python 2.x에서는 정수끼리 나누기 연산의 결과는 정수로 나타난다. 소수점 아래의 숫자는 버린다.
- 3/4 -> 0
- 나누기를 통하여 실수 결과를 얻고자 할 때는 연산되는 수를 실수형으로 먼저 바꾼 후 진행한다.
- 3/4.0 혹은 3.0/4
Python 3.x에서는 정수끼리 나누기 연산의 결과는 실수로 나타난다.
In [5]:3 / 4
Out[5]:만약 나누기의 정수 부분만 나타내려면 다음을 이용한다.
In [6]:7 // 3
Out[6]:다음은 나머지 연산을 수행한다.
In [7]:5 % 2
Out[7]:제곱이나 거듭제곱은
**
를 이용한다. 다른 프로그램 언어에서는 제곱을 표현할 때^
를 사용하는 경우가 많으므로, 혼돈하지 않도록 주의한다.In [8]:5 ** 2
Out[8]:In [9]:2 ** 3
Out[9]:복잡한 연산의 순서는 기본적인 수학 규칙을 따른다.
In [10]:2 + 2 * 2
Out[10]:In [11]:(3 - 5) * (6 + (2 - 4))
Out[11]:변수¶
변수는 값을 나타내는 기호 또는 이름을 말한다.
- 변수는 컴퓨터 프로그래밍의 가장 기본적인 구성요소로 반드시 잘 이해해 두어야 한다.
- 프로그램을 처음 시작하는 경우, 변수를 왜 사용해야 하는지 이해하기 힘든 경우도 있으니, 주의깊게 아래 내용을 살펴보자.
계산을 하다보면 특정 변수를 생성하여 값을 지정하고 변수를 통하여 수식을 계산하는 것이 더 편리할 경우가 많다.
- 수학 문제를 풀 때, x나 y와 같은 변수 기호를 이용하여, 문제를 더 간결하게 표현하는 것과 비슷한 원리이다.
변수 생성의 기본 방법¶
수학에서 x=10과 같이 변수와 그 값을 지정하듯이 Python에서도 등호(
=
)를 이용하여 변수의 값을 지정한다.변수의 이름, 변수명은 기본적인 규칙을 지키는 선에서 마음대로 지어주면 된다.
- 이 규칙에 대해서는 잠시 후에 살펴본다.
- 대입 연산에서는 반드시 왼쪽에 변수명이 등장한다.
정수형 변수 지정
- 다음을 'my_integer는 10과 같다'고 해석을 해서는 안 된다. 'my_integer에 10을 대입한다'와 같이 해석한다.
In [12]:my_integer = 10
실수형 변수 지정
In [13]:my_number = 5.2
문자열 변수 지정
In [14]:my_string = "Statistics"
부울형 변수 지정
In [15]:my_bool = True
번외 : 만약 Spyder를 이용 중이라면 Variable explorer를 이용하여 입력한 변수의 내용을 확인할 수 있다.
위의 예제들처럼 대입 연산의 오른쪽에는 상수값이 오거나, 다음의 예제들처럼 기존의 변수 혹은 기존의 변수를 이용한 식 등이 올 수 있다.
In [16]:my_second_integer = my_integer + 1
In [17]:width = 10 height = 13 rectangle_area = width * height
변수와 객체¶
- Python에 존재하는 거의 모든 것들은 객체(object)라는 형태로 존재한다.
- 숫자, 문자열, 리스트, dictionary 등이 있으며, 이 과목을 통해 자세히 살펴볼 것이다.
- 변수는 이러한 객체들에 이름을 붙여, 추후에 참조하여 더 복잡한 연산에 사용할 수 있도록 하는 역할을 한다.
- 객체는 데이터의 실질적인 존재, 변수 혹은 변수명은 그 존재를 지칭하는 이름이라고 생각하자.
변수명 규칙¶
- Python 변수명은 문자나 _로 시작
_the_string
my_variable
- 첫 글자가 아닌 나머지 부분은 문자, 숫자, _가 올 수 있음
password1
n00b
un_der_score
대소문자 구별 :
X
와x
는 서로 다른 변수변수명을 짓는 방법
- 알아보기 쉽게 짓는다.
apartmentname
->apartment_name
혹은apartmentName
- 무슨 변수를 나타내는지 알아보도록 짓는다.
afmowpv
: 아무 의미 없어 보이며 이렇게 짓지 않음average_num_students
: 변수명이 다소 긴 것처럼 느껴지지만, 학생 수의 평균을 의미하는 변수 임을 추측할 수 있음
- 알아보기 쉽게 짓는다.
변수 지정에 있어 Python의 특징¶
많은 다른 프로그래밍 언어의 경우 변수형을 따로 선언해 주어야 함. 예를 들어, C언어 등의 경우
- int n = 10
- 정수(integer)형 변수
- double x = 2.12
- double precision을 가지는 실수형 변수
- char c = 'a'
- 문자(character)형 변수
- int n = 10
Python은 int, double, char 등과 같은 변수형에 대한 키워드(keyword)를 따로 선언해 주지 않는다.
- 프로그래머는 변수형을 일일이 입력할 필요가 없으니 편리한 점이 있음
Dynamic types¶
- Python에서는 데이터 type을 따로 명시하는 것이 아니기 때문에, 프로그램 중간에 데이터 type이 바뀔 수 있다.
- x = 10
…
x = 'John'
…
x = True
- x = 10
그러나, 하나의 변수가 한 프로그램 내에서 데이터 타입이 변하는 것은 바람직하지 않으며, 동일한 데이터 타입을 유지하도록 한다.
반면 변수의 값은 계속 변할 수 있다.
변수값 재지정¶
한 번 지정한 변수값을 얼마든지 새 변수값으로 바꿀 수 있음
In [18]:a = 1 a = 2 a = 2.1 b = "Hi" b = "Hello" c = True c = False
다음의 예제에서는
area
의 값이radius
의 값에 따라 바뀐다.In [2]:pi = 3 radius = 11 area = pi * (radius ** 2) print(area)
In [3]:radius = 12 area = pi * (radius ** 2) print(area)
multiple assignment¶
Python에서는 다음과 같이 여러 개의 변수에 여러 값들을 한 번에 지정할 수 있다.
- 첫 라인에서는
x
에 2를,y
에 3을 대입하고, - 다음 라인에서
x
에y
의 값인 3을,y
에x
의 값인 2를 다시 재지정한다.
In [20]:x, y = 2, 3 x, y = y, x print('x = ', x) print('y = ', y)
문자열(String) 출력해 보기¶
프로그래밍의 가장 기본 예제를 연습해 보자. Python은 인터프리터 언어로서 매우 간단하게 Hello world 프로그램을 작성할 수 있다.
- 이 때,
print
라는 명령이 사용된다.
In [21]:print("Hello, w!")
In [22]:print('Hello, world!')
따옴표로 둘러싸여 있는 부분은 문자열을 의미하며 print 명령을 통해 해당 문자열 - 여기서는 Hello, world! - 을 화면에 출력하라는 뜻이다.
문자열을 생성할 때는 따옴표로 해당 문자열을 감싸준다.
- 큰 따옴표, 작은 따옴표 모두 가능
Python 2.x에서는 print 명령에 괄호 생략 가능
- Python 3.0 이상에서는 print가 함수로 변경되었기 때문에, 반드시 괄호를 이용해야 한다.
- https://docs.python.org/3/whatsnew/3.0.html#print-is-a-function
In [23]:# 문자열 기호를 생략하면 당연히 에러가 발생하니 주의히자. print(Hello, world!)
변수의 내용 출력하기¶
문자열 뿐만 아니라, 변수의 내용, 즉, 변수가 지칭하는 객체(object)의 내용을 화면에 출력할 수 있다.
- 이 때는
print
함수의 괄호 안에 원하는 변수명을 입력한다.
In [24]:width = 10 height = 13 rectangle_area = width * height print(rectangle_area)
물론 앞에서 연습하였듯이, 변수 하나의 내용을 확인할 때는 굳이
print
함수를 사용하지 않아도 화면에 출력할 수 있다.In [25]:rectangle_area
Out[25]:Jupyter notebook에서 여러 변수를 한 번에 확인하고 싶을 때는
print
함수를 이용하는 것이 낫다.In [26]:print(width) print(height) print(rectangle_area)
print
문을 생략한다면 마지막 변수의 내용만 확인할 수 있다. 따라서, 확실하게 화면에 프린트하고 싶은 경우라면print
함수를 적극적으로 이용하는 것이 좋다.In [27]:width height rectangle_area
Out[27]:그 외에, 보다 자세히 알아보자면,
print(variable)
은print(str(variable))
와 동치이고, 단순히variable
을 입력하는 것은print(repr(variable))
와 동치이다.문자열 입력 받기¶
input()
함수를 사용하여 콘솔로부터 문자열을 입력 받을 수 있음- python 2.x에서는
raw_input()
함수를 이용한다.
아래 예제는 간단해 보이지만, 처음 겪는 사람은 다소 헷갈리 수 있다.
아래의 명령을 실행하면, 키보드 입력을 기다리는 화면이 나타난다.
- 자유롭게 타이핑을 하여 결과를 확인해 보자.
In [28]:input_string = input("Input any string : ")
위 코드에서
"Input any string : "
부분은 콘솔 창에 다시 한 번 나타나는 부분으로 원하는 대로 바꾸어 쓸 수 있음- 입력할 문자열에 대한 적당한 설명을 작성하는 곳이라고 이해하면 좋다.
- 프로그래머가 문자열을 입력 받는 목적을 입력하는 사람에게 설명할 수 있는 부분이라고 생각하자.
콘솔에서 입력받은 문자열은 대입 연산자(=) 왼쪽의 변수 이름으로 저장된다.
- 위 예제에서는 "ABCD EFG HIJK LMNOP"라는 문자열을 임의로 입력하였다.
- 입력 받는 변수 이름은
input_string
print
명령을 이용하여input_string
저장된 내용을 다시 출력해 보자.- 임의로 입력한 "ABCD EFG HIJK LMNOP"가 다시 출력됨을 알 수 있다.
In [29]:print(input_string)
다시 한 번 연습해 보자.
- 아래 예제에서는 "Kyungsub Lee"라는 이름을 입력하여
name
이라는 변수에 전달할 수 있도록 하였다.
In [30]:name = input("Please input your name correctly : ")
name
의 내용을 다시 출력하여, 입력이 성공적으로 진행되었는지 확인하자.In [31]:print(name)
부울(Boolean)형 (논리형)¶
True
혹은False
로 구성된 자료형이다.- Boolean type의 변수는 프로그래밍에서 중요한 역할을 담당
- 조건에 따라 처리를 달리하는 프로그램을 작성할 때 유용
In [32]:2 < 0.9
Out[32]:In [33]:3 > -3
Out[33]:물론 변수에
True
혹은False
를 대입할 수 있다.In [34]:# True의 값을 가지는 변수 a a = True print(a)
In [35]:# False의 값을 가지는 변수 b b = False print(b)
비교연산과 대입연산¶
등호를 하나만 사용하는 경우 이를 대입연산자라 한다.
In [36]:x = 5
x
라는 변수에 5라는 정수를 대입하였다.- 따라서
4=4
와 같은 문장은 잘못된 문장이다.- 숫자 4에 4를 대입할 수 없음.
등호를 두 개를 연속해서 사용하는 경우는 비교연산이라 한다.
아래 예제에서는 숫자 4와 숫자 4가 같은지 비교하고 있다. 당연히 같으므로 결과는
True
이다.In [37]:4 == 4
Out[37]:아래 예제에서는 "Korea"라는 문자열과 "Japan"이라는 문자열이 같은지 비교하고 있다. 당연히 다르므로 결과는
False
이다.In [38]:"Korea" == "Japan"
Out[38]:아래 예제에서는
c
라는 변수에False
라는 값을 대입한 후, 변수c
의 내용과 값False
가 같은지 비교하고 있다. 두 값이 같으므로 결과는True
이다.In [39]:c = False c == False
Out[39]:=
와==
의 차이는 프로그램 초보자들이 빈번히 혼동하는 부분이다. 연습을 통해 잘 숙지하도록 한다.대입연산 예제¶
다음의 결과들을 순차적으로 생각해 보자. 항상 오른쪽의 계산을 완료하여 왼쪽의 변수에 대입하도록 한다.
In [40]:x = 2 x = x + 4 x = x * x x = x % 5
In [41]:print(x)
비교연산¶
비교연산의 종류
비교연산자 대응되는 수학기호 > $>$ >= $\geq$ < $<$ <= $\leq$ != $\neq$ == $=$ 비교연산자를 사용한 식이 옳을 경우
True
를, 그렇지 않을 경우False
를 반환한다.In [42]:egg = 138 spam = 370
In [43]:egg == spam
Out[43]:In [44]:egg != spam
Out[44]:In [45]:name = 'Kim' name != 'Lee'
Out[45]:In [46]:i = 1 i += 3 # i = i + 3 i
Out[46]:In [47]:j = 10 j -= 0.5 # j = j - 0.5 j
Out[47]:주석(comment)¶
- 주석은 코드를 실행시켰을 때, 실행되지 않는 부분을 말하며
- 코드에 설명을 넣고 싶을 때 보통 이용한다.
- 한 줄로 주석 넣기, #으로 시작
# This code solves the P vs NP problem.
- 여러 줄에 걸쳐 주석을 넣을 때,
"""
를 이용-
""" Turing used this code to crack the Enigma. With this code, anybody can hack a server like a pro. """
-
문자열(string)¶
문자열은 문자들로 이루어진 단어나 문장 등을 의미한다.
파이썬에서는 문자열(string)을 쉽게 다룰 수 있다.
앞에서 설명하였듯이, 문자열을 표현할 때는 큰 따옴표나 작은 따옴표를 이용한다.
In [48]:name = "Kyungsub Lee"
In [49]:print(name)
다음은 숫자 45가 아니라 문자열로서 "45"로 사용되었음을 유의
In [50]:age = "45"
In [51]:print(age)
긴 문자열을 입력할 때는 다음과 같이 사용하기도 한다.
In [52]:long_string = ''' It was the best of times, it was the worst of times, it was the age of wisdom, it was the age of foolishness, it was the epoch of belief, it was the epoch of incredulity, it was the season of Light, it was the season of Darkness, it was the spring of hope, it was the winter of despair, we had everything before us, we had nothing before us, we were all going direct to Heaven, we were all going direct the other way - in short, the period was so far like the present period, that some of its noisiest authorities insisted on its being received, for good or for evil, in the superlative degree of comparison only. Tale of Two Cities by Charles Dickens '''
문자열 연결 (concatenation)¶
Python에서 문자열은
+
기호를 이용하여 쉽게 연결할 수 있다.- 다음은 이름 "Kyungsub"과 공백 글자 " ", 성 "Lee"을 연결하여 출력하는 예제이다.
In [53]:first_name = "Kyungsub" family_name = "Lee" full_name = first_name + " " + family_name print(full_name)
숫자형 값을 같이 연결하고 싶을 경우
str
이라는 함수를 이용하여 문자열로 변경 후 연결하면 편리하다.In [54]:print("My age is " + str(20) + ".")
In [55]:print("My age is " + "20" + ".")
In [56]:# 숫자를 문자열로 변경하지 않고 연결하였기 때문에 에러가 발생하는 코드이다. print("My age is " + 20 + ".")
In [57]:# 비슷한 예제 age = 20 print("My age is " + str(age) + ".")
문자열 관련 예제¶
다음의 결과를 테스트해 보자.
In [58]:'a' + 'bcde'
Out[58]:In [59]:5 * 'abc'
Out[59]:In [60]:3 + 'three'
In [61]:'a' < 3
In [62]:'3' > 3
연산자 오버로딩(overloading)¶
- 더하기(+) 기호는 연산되는 변수의 타입에 따라 다르게 작동한다.
- 3 + 4 : 덧셈
- "ab" + "cd" : 문자열 연결
In [63]:3 + 4
Out[63]:In [64]:"ab" + "cd"
Out[64]:이를 연산자 overloading라고 한다.
type checking¶
In [65]:'a' * 'a'
실수로 잘못 입력된 형태의 type을 찾아준다.
In [66]:'This isn't flying, this is falling with style!'
- 올바른 예 : backslash
\
를 삽입하여 문자열 내의 따옴표 사용임을 알림
In [67]:'This isn\'t flying, this is falling with style!'
Out[67]:\"
: 큰 따옴표
\\
: backslash(\)In [68]:print('\"')
In [69]:print('\\')
인덱스를 통한 특정 문자 접근¶
- 인덱스를 통하여 문자열의 특정 문자에 쉽게 접근
- 첫 번째 문자의 인덱스는 0부터 시작함 (1이 아님)
In [70]:first_letter = "uncopywritable"[0] print(first_letter)
In [71]:my_word = "uncopywritable" second_letter = my_word[1] print(second_letter)
In [72]:i = 2 third_letter = my_word[i] print(third_letter)
In [73]:fourth_letter = my_word[i + 1] print(fourth_letter)
In [74]:my_name = "KS Lee" len(my_name)
Out[74]:lower()
,upper()
- 소문자 혹은 대문자로 바꾸어주는 method
- 문자열 뒤에 마침표(.)와 함께 사용
lower()
,upper()
등은 생성한 문자열에 종속된 method로써 python에서 제공함
- 변수에 저장된 문자열과 따옴표로 표현된 문자열 모두에 method를 적용할 수 있다.
In [75]:"EGG".lower()
Out[75]:In [76]:my_string = "spam_egg" my_string.upper()
Out[76]:str()
¶- 다른 데이터형을 문자열로 바꾸기
In [77]:this_year = 2016
this_year
는 2016이라는 값을 지닌 정수형 데이터- 이를 정수가 아닌 문자열로 바꾸고 싶을 때
In [78]:this_year_string = str(this_year)
this_year = 2016
이고this_year_string = "2016"
으로 데이터형이 다름에 주의- 다음의 값이 무엇이 나올지 살펴 보자.
In [79]:this_year + this_year
Out[79]:In [80]:this_year_string + this_year_string
Out[80]:Method와 Function(함수)¶
Python에 내장된 많은 method와 function들은 다양한 기능을 제공한다.
- method와 function은 일부 다른 특징이 있지만, 근본적인 작동 원리는 비슷하다.
lower()
와upper()
등의 method는 dot(.)을 이용하며 특정 객체(object), 여기서는 특정 문자열(string)에 종속되어 있다고 한다.str()
,len()
등은 dot(.)을 이용하지 않으며, 이는 특정 객체에 종속되어 있지 않음을 의미힌다.- 괄호 안에 인자로서 여러 형태의 데이터형이 올 수 있음
함수에 대해서는 나중에 자세히 다루도록 한다.
endswith()
와startswith()
¶이름을 통해 이 두 method의 기능을 추측해 보자.
In [81]:'March2019.csv'.endswith('.csv')
Out[81]:In [82]:'March2019.csv'.endswith('sv')
Out[82]:In [83]:'March2019.csv'.endswith('abc')
Out[83]:In [84]:'March2019.ppt'.startswith('March')
Out[84]:In [85]:'March2019.ppt'.startswith('march')
Out[85]:strip()
¶- 문자열 앞, 뒤의 빈 공간(white space)을 제거
In [86]:" Introduction to Python ".strip()
Out[86]:split()¶
- 문자열을 공백 혹은 주어진 규칙을 바탕으로 분리하여 리스트로 반환한다.
- 리스트에 대해서는 추후 공부할 예정
In [87]:"How are you? I am fine, and you?".split()
Out[87]:In [88]:"Split_this_string_please".split("_")
Out[88]:%s를 이용한 문자열 출력¶
In [89]:name = "Tom" home = "New York" print("My name is %s and I am from %s." %(name, home))
문자열 입력 - 다시 살펴보기¶
Python 3.x 에서는 input 함수를 이용하여 문자열을 입력받는다.
input()의 괄호 안에는 문자열 입력 전 화면에 보여주고 싶은 문장을 입력한다.In [90]:name = input('Enter your name: ')
In [91]:print('Are you really ' + name + '?')
입력 받은 문자열 type 변경¶
만약 입력 받은 문자열을 숫자로 활용하고자 하면
int()
나float()
함수를 이용하여 type을 변경In [92]:num = input('Input any number: ')
- num은 문자열이지만
float(num)
을 통해서 실수로, 혹은int(num)
을 통해서 정수로 바꿀 수 있다. - 숫자형을 변경할 경우 각종 사칙연산 등에 활용할 수 있다.
In [93]:sqr = float(num) * float(num) print('The square of num ' + num + ' is ' + str(sqr))
728x90'Python Programming' 카테고리의 다른 글
Python Programming (6) - 선형대수 (0) 2020.03.28 Python Programming (5) - 리스트 (0) 2020.03.28 Python Programming (4) - 함수 (0) 2020.03.28 Python Programming (3) - 반복문 (0) 2020.03.28 Python Programming (2) - 조건문 (0) 2020.03.28