hw_0309_ - Jupyter Notebook.pdf
0.20MB
20200308_20200309 - Jupyter Notebook.pdf
0.61MB

파이썬 소개

  • 반 로썸이 개발한 인터프리터 언어
  • 기업의 실무를 위해서 많이 사용되는 언어. 그 대표 예가 구글에서 만든 소프트웨어의 50% 이상이 파이썬으로 작성

파이썬 특징

  • 프로그램 언어 중 사람이 생각하는 방식을 가장 잘 나타낸 언어가 파이썬이다. ex) in 4 in [1, 2, 3, 4] : print('4가 있습니다.')
  • 문법 자체가 아주 쉽고 간결하며 사람의 사고체계와 매우 비슷함
  • 프로그래머가 만들고자 하는 프로그램의 대부분을 파이썬으로 만들 수 있다.
  • 100가지 방법으로 하나의 일을 처리할 수 있다면 파이썬은 가장 좋은 방법 1가지만 사용하는 것을 선호한다.
  • 다른 것을 신경 쓸 필요 없이 내가 하고자 하는 부분에만 집중

파이썬으로 할 수 있는 일

  • 시스템 유틸리티 제작
  • GUI 프로그래밍을 위한 도구들이 잘 갖추어져 있어서 GUI 프로그램 제작이 쉽다.(ex))윈도우 바탕화면)
  • C나 C++로 만든 프로그램을 파이썬에서 사용할 수 있으며 파이썬으로 만든 프로그램 역시 C나 C++에서 사용할 수 있다.
  • Numpy라는 수치 연산 모듈을 제공한다. 이 모듈은 C로 작성했기 때문에 파이썬에서도 수치 연산을 빠르게 할 수 있다.
  • 오라클, MySQL, PostgreSQL 등의 데이터베이스에 접근하기 위한 도구를 제공
  • 판다스 모듈(대표적인 라이브러리)을 사용하면 데이터 분석을 더 쉽고 효과적으로 할 수 있다.

파이썬으로 할 수 없는 일

  • 복잡한 시스템 연산은 적합하지 않음
  • 안드로이드, 아이폰 앱을 개발하는 것은 어려움

-https://themes.getbootstrap.com/

 

Bootstrap Themes Built & Curated by the Bootstrap Team.

Bootstrap Themes is a collection of the best templates and themes curated by Bootstrap’s creators. Our collection of templates include themes to build an admin, dashboard, landing page, e-commerce site, application, and more.

themes.getbootstrap.com

# 파이썬 자료형

# 리스트는 [] 로 표시하며, [] 안의 요소를 , 로 구분하여 순서있게 나열한다.

list1 = [1, 2, 3, 4, 5] # 숫자

list2 = ['a', 'b', 'c'] # 문자

list3 = [1, 'a', 2, 'b', 3, 'c', [1,2,3], ['a','b','c']] #숫자문자 섞어서, 리스트 안에 리스트 가능

print(list1)

print(list2)

print(list3)

list1[0] = 6

print(list1)

[1, 2, 3, 4, 5]

['a', 'b', 'c']

[1, 'a', 2, 'b', 3, 'c', [1, 2, 3], ['a', 'b', 'c']]

[6, 2, 3, 4, 5]

In [6]:

#지역 변수 선언

def myfunc():

print('안녕하세요')

list4 = [1, 2, myfunc]

print(list4)

list4[2]()

[1, 2, <function myfunc at 0x000002405267D558>]

안녕하세요

In [7]:

#리스트 수정, 변경, 삭제

a = [1, 2, 3]

a[2] =4

a[1:2] # 1 초과 2 이하

print(a)

[1, 2, 4]

In [8]:

#리스트 수정, 변경, 삭제

a = [1, 2, 3]

a[2] =4

a[1:2] = ['a', 'b', 'c']

print(a)

del a[1:4]

print(a)

[1, 'a', 'b', 'c', 4]

[1, 4]

In [13]:

a=[1,2,3,4,5,6,7,8,9]

#[15,5,6,7]

del a[0:3]

a[0]=15

del a[4:6]

print(a)

[15, 5, 6, 7]

In [15]:

#정렬(sort)

b=[2,3,4,1]

b.sort() #정방향으로 정렬

print(b)

c=['a','c','d']

c.sort(reverse=True) #역방향으로 정렬

print(c)

[1, 2, 3, 4]

['d', 'c', 'a']

In [6]:

d=['a','b','d']

d.reverse()

print(d)

print(sorted(d,reverse=True))

['d', 'b', 'a']

['d', 'b', 'a']

In [2]:

#리스트 요소의 인덱스 위치 반환

e=[1,2,3]

print(e.index(3))#3의 인덱스를 반환하는 것 3이 2번 배열에 들어가있다는 것을 표시

print(e.index(1))

2

0

In [10]:

f=[1,2,3]

print(f.pop())#배열의 마지막 요소이 출력되고 그 요소를 삭제 한다. # 컨트롤+엔터 실행키

print(f)

3

[1, 2]

In [7]:

#알트+엔터 생성키

g=[1,2,3,1] #리스트내에 x가 몇 개인지 조사하여 그 갯수를 반환

print(g.count(1))

2

In [11]:

h=[1,2,3]#리스트 확장하는 것

h.extend([4,5,])

print(h)

[1, 2, 3, 4, 5]

In [14]:

a=[1,2,3]

a.append(4)

print(a)

a.append([5,6])#리스트를 추가 할 수 있다.

print(a)

[1, 2, 3, 4]

[1, 2, 3, 4, [5, 6]]

In [17]:

#튜플

#리스트와 비슷한 성질을 가지고 있는 자료형이지만 요소값을 변경 할 수 없음

#프로그램이 실행되는 동안 그 값이 항상 변하지 않아야되는 경우

t1=(1,2,3,4,5) # () 튜플 []배열

t2=('a','b','c')

t3=(1,'a','abc',[1,2,3,4,5],['a','b','c'])

def myfunc():

print('안녕하세요')

t4=(21,2,myfunc)

#t1[0]=6

#print(t1)

print(t4)

t4[2]()

(21, 2, <function myfunc at 0x0000015AE20EC678>)

안녕하세요

In [22]:

t1 = (1,) # 1개의 요소만 가질 때는 요소뒤에 콤마를 붙여야 함

print(t1)

t1 = (1,2,3,4,5)

t2 = ('a','b','c')

t3 = (1,'a','abc', [1,2,3,4,5],['a','b','c'])

print(t1)

print(t2)

print(t3)

(1,)

(1, 2, 3, 4, 5)

('a', 'b', 'c')

(1, 'a', 'abc', [1, 2, 3, 4, 5], ['a', 'b', 'c'])

In [21]:

a=(1,2,3)

b=('a','b','c')

c=a+b

print(c)

print(c*3)

(1, 2, 3, 'a', 'b', 'c')

(1, 2, 3, 'a', 'b', 'c', 1, 2, 3, 'a', 'b', 'c', 1, 2, 3, 'a', 'b', 'c')

In [27]:

#사전

#사전은 키와 값을 하나의 요소로 하는 순서가 없는 집합

#시퀀스 자료형이 아니면 인덱싱으로 값을 접근 할 수 없음

dic1={'a':1, 'b':2,'c':3}

print(dic1['a'])

print(dic1['c'])

print(dic1)

print(len(dic1)) # 배열의 개수를 출력

1

3

{'a': 1, 'b': 2, 'c': 3}

3

In [33]:

#딕셔너리 관련 함수 {}로 사용함

a={'name':'pey','phone':'0123456789','birth':'1108'}

print(a.keys())

print(a.values())

print(a.items()) #key:value 쌍 얻기

print(a.get('name'))

print(a.get('nokey'))#nokey의 값이 없기 때문에 none으로 나온다.

dict_keys(['name', 'phone', 'birth'])

dict_values(['pey', '0123456789', '1108'])

dict_items([('name', 'pey'), ('phone', '0123456789'), ('birth', '1108')])

pey

None

In [38]:

#해당 key가 딕셔너리 안에 있는지 조사(in)

a={'name':'pey','phone':'0123456789','birth':'1108'}

print('name' in a)

print('email' in a)

True

False

In [43]:

#딕셔너리 안에서 찾으려고 하는 key값이 없는 경우에 미리 정해준 디폴트 값을 가져오게 하고 싶을 경우에는 get(x,'디폴트 값')을 사용

a={'name':'pey','phone':'0123456789','birth':'1108'}

print(a.get('foo','bar'))#foo가 없을 경우 디폴트 값 bar를 가져온다

print(a.clear())

print(a.get('name','bar'))#name이 있을 경우 name의 값 pey를 가져온다.

bar

None

bar

In [46]:

#set

#set 자료형은 순서가 없기 때문에 인덱싱으로 값을 얻을 수 없음

s1=set([1,2,3,4,5,6])

s2=set([4,5,6,7,8,9])

print(s1&s2)# &는 교집합의 의미

print(s1.intersection(s2)) #교집합의 다른 사용방법

print(s1|s2)#|는 합집합의 이미

print(s1.union(s2))#합집합의 다른 사용방법

{4, 5, 6}

{4, 5, 6}

{1, 2, 3, 4, 5, 6, 7, 8, 9}

{1, 2, 3, 4, 5, 6, 7, 8, 9}

In [49]:

#리스트로 출력하기

s3=list(s1&s2) #교집합

print(s3)

s4=list(s1|s2)#합집합

print(s4)

[4, 5, 6]

[1, 2, 3, 4, 5, 6, 7, 8, 9]

In [52]:

#뺄셈

s1=set([1,2,3,4,5,6])

s2=set([4,5,6,7,8,9])

print(s1-s2)

print(s2-s1)

{1, 2, 3}

{8, 9, 7}

In [57]:

s1.add(7)# 값 1개 추가

print(s1)

s1.update([9,10])#값 여러개를 추가

print(s1)

s1.remove(10)

print(s1)

{1, 2, 3, 4, 5, 6, 7, 9}

{1, 2, 3, 4, 5, 6, 7, 9, 10}

{1, 2, 3, 4, 5, 6, 7, 9}

In [64]:

#이스케이프 문자

#키보드로 입력하기 어려운 기호들을 나타내기 위해 역슬래쉬'\'로 시작하는 문자

print('나는 파이썬을 사랑합니다. 파이썬은 자바보다 쉽습니다.')

print('나는 파이썬을 사랑합니다.\n파이썬은 자바보다 쉽습니다.')#띄어쓰기

print('Name:Jone \tSex:Male \tAge:22')#탭띄우기

print('이 문장은 화면 폭이 너무 길어 다음 줄로 넘깁니다. \그러나 문장을 한줄에서 보고 싶습니다.') # 자바의 +과 같은 의미

나는 파이썬을 사랑합니다. 파이썬은 자바보다 쉽습니다.

나는 파이썬을 사랑합니다.

파이썬은 자바보다 쉽습니다.

Name:Jone Sex:Male Age:22

이 문장은 화면 폭이 너무 길어 다음 줄로 넘깁니다. \그러나 문장을 한줄에서 보고 싶습니다.

In [67]:

#들여쓰기

listdata=['a','b','c']

if 'a' in listdata:

print('a가 listdata에 있습니다.')

print(listdata)

else:

print('a가 listdata에 존재하지 않습니다.')

a가 listdata에 있습니다.

['a', 'b', 'c']

In [107]:

#문자열 포멧팅

#숫자 대입

a="I eat %d apples."%3 #3을 %d에 대입하라

print(a)

#문자 대입

b='I eat %s apples.' %'five'

print(b)

number=3

c='I eat %d apples.' %number

print(c)

#2개 이상의 문자, 숫자를 대입할 경우

number=10

day='three'

d='I eat %d apples. so I was sick of %s days' %(number, day)

print(d)

I eat 3 apples.

I eat five apples.

I eat 3 apples.

I eat 10 apples. so I was sick of three days

In [109]:

# %s 포멧코드는 어떤 형태의 값이든 변환해 넣을 수 있음

#%s 는 자동으로 % 뒤에 있는 값을 문자열로 변경함 /숫자가 오더라도 문자열로 출력된다.

e='I have %s apples' %3

print(e)

f='rate is %s' %3.234

print(f)

I have 3 apples

rate is 3.234

In [112]:

# %를 나타내려면 반드시 %%로 써야 한다.

g='Error is %d%%.' %98

print(g)

Error is 98%.

In [115]:

# 정렬과 공백

a='%10s' %'hi' #전체 길이가 10개인 문자열 공간에서 오른쪽 정렬

print(a)

b='%-10s' %'hi'

print(b)

hi

hi

In [124]:

#소수점 표현하기

c='%0.2f' %3.4567892

print(c)

d='%10.4f' %3.4567892

print(d)

e='%10.2f' %3.4567892

print(e)

3.46

3.4568

3.46

In [130]:

# 문자열 관련 함수

a='hobby'

print(a.count('b')) #문자 개수를 세기 알파벳 b의 개수를 세기

a='Python is best choice'

print(a.find('b')) #b의 방 번호를 찾는 방법

print(a.find('k'))#k가 없는 경우는 -1이 반환 된다.

print(a.index('n'))

print(a.index('k'))#없는 경우는 오류가 발생한다.

2

10

-1

5

--------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-130-6999e625ec54> in <module> 6 print(a.find('k'))#k가 없는 경우는 -1이 반환 된다. 7 print(a.index('n')) ----> 8 print(a.index('k'))#없는 경우는 오류가 발생한다. ValueError: substring not found

In [133]:

#문자열 삽입(join)

a=','

a=a.join('abcd')

print(a)

a,b,c,d

In [135]:

# 소문자를 대문자로 변경

a='hi'

a=a.upper()

print(a)

# 대문자를 소문자로 변경

b='HI'

b=b.lower()

print(b)

HI

hi

In [140]:

# 왼쪽 공백 지우기(lstrip)

a=' hi'

print(a)

b=a.lstrip()

print(b)

# 오른쪽 공백 지우기(rstrip)

a='hi '

print(a)

b=a.rstrip()

print(b)

#양쪽 공백 지우기(strip)

a=' hi '

print(a)

c=a.strip()

print(c)

hi

hi

hi

hi

hi

hi

In [145]:

# 문자열 바꾸기

a='Life is too short'

print(a.replace('Life','My leg'))

# 문자열 나누기

a='Life is too short'

print(a.split())

b = 'a:b:c:d'

print(b.split(':'))

My leg is too short

['Life', 'is', 'too', 'short']

['a', 'b', 'c', 'd']

In [150]:

# format 함수(고급 포맷팅)

a = 'I eat {0} apples'.format(3) #여기서 0은 첫 번째라는 의미, .찍고 format(대입을 원하는 숫자 기입)

print(a)

f = '{0:<10}'.format('hello') #왼쪽으로 정렬하고 자리수는 10

print(f)

z = '{0:>10}'.format('hello') #오른쪽으로 정렬하고 자리수는 10

print(z)

i='{0:=^10}'.format('hi') #중간에 넣을때는 ^으로 넣는다. / 공백을 '='로 채우기

print(i)

k = '{0:0.4f}'.format(3.567892) # 소수점 아래 4자리에서 끊도록 반올림처리

print(k)

I eat 3 apples

hello

hello

====hi====

3.5679

In [155]:

# 'I eat five apples'-> 'eight'

a='I eat %s apples' %'five'

print(a)

a='I eat {0} apples' .format('eight')

print(a)

I eat five apples

I eat eight apples

In [156]:

#'I ate 10 apples. so I was sick for three days' -> 5.'five'

number=5

day='five'

a='I ate {0} apples. so I was sick for {1} days' .format(number,day)

#c='I ate {} apples. so I was sick for {} days'.format(5,five)

#print(c) 괄호만 써도 가능

print(a)

I ate 5 apples. so I was sick for five days

In [153]:

m='{{and}}' .format()

print(m)

{and}

In [157]:

a='{0:>10}' .format('hello') # 오른쪽 정렬

b='{0:<10}' .format('hello') #왼쪽 정렬

c='{0:^10}' .format('hello')#가운데 정렬

print(a)

print(b)

print(c)

hello

hello

hello

In [160]:

#y=3.451235, 자리수 10

y=3.451235

k = '{0:<0.4f}'.format(y)

print(k)

j = '{0:>10.4f}'.format(y)

print(j)

3.4512

3.4512

In [90]:

#1. 김철수씨의 주민번호는 881230-1078523이다.

#주민번호를 연월일 부분과 그 뒤의 숫자부분으로 나누어 출력

a='881230-1078523'

print(a.split('-'))

881230

1078523

In [80]:

#2.a[1,3,5,4,2] 리스트를 [5,4,3,2,1]로 변경해서 출력

a=[1,3,5,4,2]

a.sort(reverse=True)

print(a)

[5, 4, 3, 2, 1]

In [77]:

#3.['Life','is','too','short'] 리스트를 Life is too short

#문자열로 출력

a=['Life', 'is', 'too', 'short']

print(a[0]+' '+a[1]+' '+a[2]+' '+a[3])

In [81]:

#4.문자열을 LIST로 변환하여 ['Life','is','too','short']출력

a='Life is too short'

print(a.split(' '))

In [87]:

#5.[1,2,3] 리스트에 값 4를 추가하여 출력

a1=[1,2,3]

a1.append(4)

print(a1)

[1, 2, 3, 4]

In [97]:

#6. a 리스트에서 중복 숫자를 제거후 리스트로 출력

a=[1,1,1,2,2,3,3,3,4,4,5]

a=set(list(a))

print(a)

{1, 2, 3, 4, 5}

In [99]:

#7.a에서 80과 70을 각각 출력

a={'A':90,'B':80,'C':70}

print(a['B'])

print(a['C'])

80

70

In [163]:

#리스트 자료형 복사

#id 함수는 변수가 가리키고 있는 객체의 주소 값을 돌려주는 파이썬 내장 함수

a=[1,2,3]

b=a

a[1]=4

print(a)

print(b)

print(id(a)) #주소값(메모리주소)

print(id(b))

[1, 4, 3]

[1, 4, 3]

1489876716616

1489876716616

In [165]:

a=[1,2,3]

b=a[:]

a[1]=4

print(a)

print(b)

print(id(a))

print(id(b))

[1, 4, 3]

[1, 2, 3]

1489876863688

1489876214472

In [171]:

#제어문

#if-else

x=1

y=2

if x >=y:

print('x가 y보다 크거나 작습니다.')

else:

print('x가 y보다 작습니다.')

x가 y보다 작습니다.

In [174]:

#만약 3000원 이상의 돈을 가지고 있으면 택시를 타고 그렇지 않으면 걸어가라

money=2000

if money >=3000:

print('택시를 타고 가라')

else:

print('걸어가라')

걸어가라

In [179]:

#만약 돈이 3000원 이상 있거나 카드가 있으면 택시를 타고 그렇지 않으면 걸어가라

money=2000

card=1

if money>=3000 or card:

print('택시')

else:

print('걸음')

택시

In [182]:

#if~elif

x=1

y=2

if x>y:

print('x가 y보다 큽니다.')

elif x<y:

print('x가 y보다 작습니다.')

else:

print('x와 y는 같습니다.')

x가 y보다 작습니다.

In [185]:

#for문

scope=[1,2,3,4,5]

for x in scope:

print(x, end=' ')

1 2 3 4 5

In [187]:

#for~continue~break

scope=[1,2,3,4,5]

for x in scope:

print(x)

if x <3:

continue

else:

break

1 2 3

In [196]:

#range(1,11) 끝 숫자는 포함되지 않음

sum=0

for i in range(1,11):

sum+=i #(sum=sum+i), sum-=i,sum*=i, sum/=i

print(sum)

55

In [197]:

marks = [90, 25, 67, 45, 80]

for number in range(len(marks)):

if marks[number] < 60: continue

print('%d번 학생 축하합니다.' %(number+1))

1번 학생 축하합니다.

3번 학생 축하합니다.

5번 학생 축하합니다.

In [201]:

for i in range(2,10):

for j in range(1,10):

print(i*j, end=' ')

print('')

2 4 6 8 10 12 14 16 18 3 6 9 12 15 18 21 24 27 4 8 12 16 20 24 28 32 36 5 10 15 20 25 30 35 40 45 6 12 18 24 30 36 42 48 54 7 14 21 28 35 42 49 56 63 8 16 24 32 40 48 56 64 72 9 18 27 36 45 54 63 72 81

In [216]:

scope=[1,2,3,4,5]

for i in scope:

if i<4:

print(i)

print('perfect')

scope = [1,2,3,4,5]

for i in scope:

if i<4:

print(i)

elif i>4:

print('perfect')

1

2

3

perfect

1

2

3

perfect

In [227]:

# Q. 정수 1 부터 n 까지 더할 때, 그 합이 10만 보다 커지게 되는 n과 합을 구하시오.

n=1

sum=0

while 1: #while 이 1 이면 TRUE 라는 의미

sum = sum+n # 0 + 1

if sum > 100000: # 1은 100000보다 작지 않다.

print(n)

print(sum)

break

n=n+1

# 1 + 1 은 2가 되고 다시 처음부터 시작,

#그 때 100000보다 커지게 되는 n에 해당하는 값을 출력하고 break 하게 된다.

447

100128

In [1]:

#while문을 사용하여 1부터 1000까지의 자연수 중 3의 배수의 합 구하기

n=0

b=0

while 1:

if n > 1000:

print(b)

break

b = b+n

n = n+3

n=0

b=0

while 1:

if n==1000:

print(b)

break

elif n%3==0:

b = b+n

n=n+1

166833

166833

+ Recent posts