Python Tutorial(dbc2018)

Python설치방법

이번 강연에서는 Python 설치에 대한 설명은 하지 않도록 하겠습니다.

대신에 파이썬 설치 메뉴얼로 대신합니다.

링크 :


Google Colab사용방법

Google Colab을 통해 인터넷만 연결되어 있다면 Python을 설치하지 않아도 사용할 수 있습니다.

Colab에서 Python package를 설치하는 방법만 익히면 되는데,

!pip install [package name]

을 실행시킴으로써 설치할 수 있습니다.

In [3]:
!pip install pandas
Requirement already satisfied: pandas in /usr/local/lib/python3.6/dist-packages (0.22.0)
Requirement already satisfied: pytz>=2011k in /usr/local/lib/python3.6/dist-packages (from pandas) (2018.4)
Requirement already satisfied: numpy>=1.9.0 in /usr/local/lib/python3.6/dist-packages (from pandas) (1.14.5)
Requirement already satisfied: python-dateutil>=2 in /usr/local/lib/python3.6/dist-packages (from pandas) (2.5.3)
Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.6/dist-packages (from python-dateutil>=2->pandas) (1.11.0)

데이터 자료형

다른 프로그래밍 언어와 마찬가지로 여러가지의 자료형이 있습니다. 여기에서는 특별히 숫자, 문자, list, (tuple), (dictionary) 등의 자료형에 관해서 초기화 방법, 기본연산, 인덱싱 등에 관해 살펴보겠습니다.


숫자형 자료

In [4]:
my_number = 201882104
# 각자 학번을 입력하도록 합니다.
In [5]:
a = 1
b = 3

# 혹은 한번에 아래와 같이 입력.
# a = 1; b = 3
# [a,b] = [1,3]

현재 저장된 변수의 목록은 who라는 명령어를 통해 확인할 수 있습니다.

저장된 값은 print를 통해 확인합니다.

In [6]:
who
a	 b	 my_number	 
In [7]:
print(a,b,my_number)
1 3 201882104

숫자형 자료의 기본 연산들, 조건들을 아래와같이 실습해 볼 수 잇습니다.

In [10]:
a + b, a * b, a / b, a % b

# 더하기, 곱하기, 나누기, 나머지 연산...!
Out[10]:
(4, 3, 0.3333333333333333, 1)
In [11]:
a > b, a == b, a != b

# 크다, 같다, 다르다...!
Out[11]:
(False, False, True)

코딩을 시작하면서 겪을 대부분의 에러는 지켜야할 type을 지키지 않았을때 생깁니다.

에러가 발생했을때 제일 먼저 체크해보아야할 것은 알맞은 데이터 타입을 넣었는가 하는가 입니다.

type() 이라는 명령어로 저장된 데이터의 형식을 파악할 수 있습니다.

In [12]:
type(a), type(a/b), type(a>b)
Out[12]:
(int, float, bool)

문자형 자료

In [13]:
my_string = '불고기 덮밥'
In [14]:
c = 'Hellow'; d = 'World'
In [15]:
who
a	 b	 c	 d	 my_number	 my_string	 

문자형 자료의 덧셈과 스칼라곱은 특별히 정의됩니다.

In [16]:
c + d 
Out[16]:
'HellowWorld'
In [17]:
c + ' ' + d
Out[17]:
'Hellow World'
In [19]:
my_string + ' 먹고싶다'
Out[19]:
'불고기 덮밥 먹고싶다'
In [20]:
'하' * 3
Out[20]:
'하하하'

문자형 변수는 [ ] 안에 index를 집어넣음으로써 부분적인 문자열을 호출 할 수 있습니다.

In [24]:
(c + ' ' + d)[4:6]
Out[24]:
'ow'

리스트형 자료

In [25]:
my_list = [0,1,2,3,4,5]
In [26]:
temp_1, temp_2 = [1,3], ['a', 12, [3]]
In [27]:
who
a	 b	 c	 d	 my_list	 my_number	 my_string	 temp_1	 temp_2	 

문자형 변수와 마찬가지로 [ ] 안에 index를 넣어주으로써 부분적인 호출이 가능합니다.

[:]는 모든 원소를 호출합니다.

[k:]는 k-index 이후 모든 원소를 호출합니다.

In [31]:
temp_1
Out[31]:
[1, 3]
In [32]:
temp_2
Out[32]:
['a', 12, [3]]
In [30]:
print(temp_1[:])
print(temp_1[0])
print(temp_1[1])
print(temp_2[0:])
[1, 3]
1
3
['a', 12, [3]]
In [33]:
temp_2[0] = 'b'
In [34]:
temp_2
Out[34]:
['b', 12, [3]]

문자형 자료의 덧셈과 스칼라곱 과 같은 의미의 연산이 리스트 내에서도 적용됩니다.

In [35]:
temp_1 + temp_2
Out[35]:
[1, 3, 'b', 12, [3]]
In [36]:
temp_1 * 10
Out[36]:
[1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3]

기본함수들

문자형 자료에 적용할 수 있는 기본 함수들을 확인합니다.

문자 개수 새기(count)

In [37]:
'hello'.count('l')
Out[37]:
2
In [38]:
a = 'hello'
a.count('o')
Out[38]:
1

위치 알려주기(index)

In [39]:
'나는 오늘 점심에 커피를 마셨다.'.index('점심에')
Out[39]:
6
In [40]:
'나는 오늘 점심에 커피를 마셨다.'[6]
Out[40]:
'점'

문자열 바꾸기(replace)

In [41]:
'Life is too short'.replace('Life','Your leg')
Out[41]:
'Your leg is too short'

문자열 나누기(split)

In [42]:
'candy, snack, chicken'.split(', ')
Out[42]:
['candy', 'snack', 'chicken']

리스트형 자료에 적용할 수 있는 기본함수들을 확인합니다.

리스트에 요소 추가(append)

In [43]:
[1,2,3].append(4)

주의, 위의 명령은 실행되고나서 곧바로 사라지고 맙니다.

In [45]:
a = [1,2,3]
a.append(4)
print(a)
[1, 2, 3, 4]

리스트 정렬(sort)

In [46]:
a = [1,3,2,4]
a.sort
print(a)
[1, 3, 2, 4]
In [47]:
a = [1,3,2,4]
a.sort()
print(a)
[1, 2, 3, 4]

위와같이, 함수는 언제나 입력인자를 받는 괄호 ( ) 를 가지고 있습니다.

다만 특별히 입력인자를 받지 않는경우에도 괄호를 해주지 않으면 함수가 실행되지 않습니다. 주의.

리스트 요소 제거(remove)

In [48]:
a = [1,2,3,4]
In [49]:
a.remove(3)
print(a)
[1, 2, 4]

리스트에 포함된 요소 x의 개수 세기(count)

In [50]:
[1,2,3].count(0)
Out[50]:
0

위치 변환(index)

In [51]:
[1,2,3].index(1)
Out[51]:
0

Python 내장함수

모든 내장함수를 다루지 않습니다.

경험상 더 쓰게되는 함수들을 위주로 소개합니다.

여기서 내장함수란 파이썬에 기본적으로 깔려있는 함수들을 의미합니다.

자료형 바꾸기(int(), str(), list())

In [1]:
int('1')
Out[1]:
1
In [2]:
str(1)
Out[2]:
'1'
In [3]:
list((1,2))
Out[3]:
[1, 2]

자료형 묻기(type())

In [4]:
type(1)
Out[4]:
int

리스트 혹은 문자열의 길이 구하기 len()

In [5]:
len([10,9,3,2,1]), len('대구대')
Out[5]:
(5, 3)

입력값 받기 input()

In [6]:
t = input()
10
In [7]:
print(t)
10
In [9]:
x, y = map(lambda x:int(x),input().split())
5 1
In [10]:
print(x,y)
5 1

리스트의 중복된 원소를 제거합니다. set()

In [12]:
set([1,2,3,1]), list(set([1,2,3,1])) 
Out[12]:
({1, 2, 3}, [1, 2, 3])

해당 조건에 맞는 list의 원소를 꺼내줍니다. filter

In [13]:
list( filter(lambda x : x>3, [1,3,5,7]) )
Out[13]:
[5, 7]

모든 list의 원소에 해당하는 함수를 작용합니다. map

In [14]:
list( map(lambda x:x**2,[1,2,3,4]) )
Out[14]:
[1, 4, 9, 16]

Python 반복문, 조건문

반복문

In [15]:
for i in [1,2,3]:
  print(i)
1
2
3

위와같이, 파이썬에서 반복문은 콜론( : ) 과 들여쓰기( indent ) 을 기준으로 이해를 합니다.

In [16]:
for i in [1,2,3]:
print(i)
  File "<ipython-input-16-d5fb8fa98281>", line 2
    print(i)
        ^
IndentationError: expected an indented block
In [17]:
for i in [1,2,3]:
  print(i)
print(i)
1
2
3
3
In [18]:
for i in [1,2,3]:
  print(1)
  print(i)
1
1
1
2
1
3

for문을 구성함에 있어서 아래와같이 자유롭게 할 수 있습니다.

In [19]:
for i in range(3):
  print(i)
0
1
2
In [20]:
for i in '대구':
  print(i)
대
구
In [21]:
for i in [[0,1],[1,3],[2,3]]:
  print(sum(i))
1
4
5

for문은 리스트 안에서도 사용할 수 있습니다.

In [22]:
[i for i in range(10)]
Out[22]:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
In [23]:
[i for i in [1,3,8,9]]
Out[23]:
[1, 3, 8, 9]
In [24]:
[i**2-3 for i in range(5)]
Out[24]:
[-3, -2, 1, 6, 13]
In [25]:
[i**2-3 for i in [2*j for j in range(5)]]
Out[25]:
[-3, 1, 13, 33, 61]
In [27]:
[str(i) + '번째' for i in range(4)]
Out[27]:
['0번째', '1번째', '2번째', '3번째']

조건문

In [28]:
if 3>1:
  print('3이 1보다 크다?')
3이 1보다 크다?
In [29]:
if True:
  print('치킨은 언제나 옳아. ')
치킨은 언제나 옳아. 
In [30]:
my_list = [1,2,3]
if 1 in my_list:
  print('1이 my_list안에 있어')
1이 my_list안에 있어
In [32]:
my_list = [1,2,3]
if 4 not in my_list:
  print('4가 my_list안에 없어')
4가 my_list안에 없어

for문과 if문을 함께 조합하면 여러가지 일들을 해낼 수 있습니다.

In [37]:
my_list = [i+2 for i in range(5)]
for i in range(8):
  if i in my_list:
    print(str(i) + '(이)가 my_list안에 있음')
  else:
    print(str(i) + '(이)가 my_list안에 없다아')
0(이)가 my_list안에 없다아
1(이)가 my_list안에 없다아
2(이)가 my_list안에 있음
3(이)가 my_list안에 있음
4(이)가 my_list안에 있음
5(이)가 my_list안에 있음
6(이)가 my_list안에 있음
7(이)가 my_list안에 없다아

break, continue

In [38]:
for i in range(5):
  if i==3:
    break
  print(i)
0
1
2
In [39]:
for i in range(5):
  if i == 3:
    continue
  print(i)
0
1
2
4

코딩 실습

백준 사이트 를 보면 파이썬 코딩연습을 하기 좋은 여러 알고리즘 문제들을 찾아 볼 수 있습니다.

아래의 문제들은 백준 사이트의 문제들을 그대로 가져온 것입니다.


문제 2438번 : 첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제

입력 : 첫째 줄에 N (1<=N<=100)이 주어진다.

출력 : 첫째 줄부터 N번째 줄 까지 차례대로 별을 출력한다.

예제입력 : 5

예제출력 :

*
**
***
****
*****
In [41]:
x = input()

# 코드를 완성하여 봅시다.
10

문제 2439번 : 첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제. 하지만, 오른쪽을 기준으로 정렬한 별 (예제 참고)을 출력하시오.

입력 : 첫째 줄에 N (1<=N<=100)이 주어진다.

출력 : 첫째 줄부터 N번째 줄 까지 차례대로 별을 출력한다.

예제입력 : 5

예제출력 :

    *
   **
  ***
 ****
*****
In [0]:
x = input()

# 코드를 완성하여 봅시다.
1

문제 1157번 : 알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.

입력 : 첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.

출력 : 첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.

예제입력 :

aabb

예제출력 :

?
In [51]:
x = input()

print('?')

#코드를 완성해 봅시다.
aasdbasd
?

문제 8958번 : "OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수는 3이 된다.

"OOXXOXXOOO"의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다.

OX퀴즈의 결과가 주어졌을 때, 점수를 구하는 프로그램을 작성하시오.

입력 : 첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 길이가 0보다 크고 80보다 작은 문자열이 주어진다. 문자열은 O와 X만으로 이루어져 있다.

출력 : 각 테스트 케이스마다 점수를 출력한다.

예제입력 :

5
OOXXOXXOOO
OOXXOOXXOO
OXOXOXOXOXOXOX
OOOOOOOOOO
OOOOXOOOOXOOOOX

예제출력 :

10
9
7
55
30
In [48]:
num_testcase = int(input())
for i in range(num_testcase):
  
  x = input()
  
  print(1)

#코드를 완성해 봅시다.
5
OX
1
XXXO
1
XXXX
1
XX
1
OOOO
1

문제 1316번 : 그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때문에 그룹 단어이지만, aabbbccb는 b가 떨어져서 나타나기 때문에 그룹 단어가 아니다.

단어 N개를 입력으로 받아 그룹 단어의 개수를 출력하는 프로그램을 작성하시오.

입력 : 첫째 줄에 단어의 개수 N이 들어온다. N은 100보다 작거나 같은 자연수이다. 둘째줄부터 N개의 줄에 단어가 들어온다. 단어는 알파벳 소문자로만 되어있고 중복되지 않으며, 길이는 최대 100이다.

출력 : 첫째 줄에 그룹 단어의 개수를 출력한다.

예제입력 :

3
happy
new
year

예제출력 :

3
In [50]:
num = int(input())
count = 0

for i in range(num):
  
  x = input()
  
  if True:
    count = count + 1
print(count)

#코드를 완성해 봅시다.
2
zz
zzz
2