Post

[Python] 개념 자료형 연산 조건문

오늘부터 파이썬을 새롭게 배우기 시작했습니다! 처음 보는 언어이지만 해보니까 java보다 더 직관적이고 사람과 많이 닮아있어서 배우기는 쉬웠어요.. 물론 프로젝트 들어가면 눈물을 흘리겠지만..

파이썬이란?

1990년 귀도 반 로섬이 개발한 인터프리터 언어.. ( != 컴파일러) 코미디 쇼에 나오는 제목에 따왔습니다. 사전적인 의미는 고대 신화에 나오는 동굴에 살던 큰 뱀이라고 하는데요 아폴로 신이 파이썬을 퇴치했다는 이야기가 전해집니다.. 프로그래밍 교육을 위해서 많이 사용이되며 동시에 기업의 실무에서도 많이 사용됩니다. (!=베이직언어) 구글의 소프트웨어의 50%이상이 파이썬으로 작성되었습니다. 그 외에도 인스타그램, 드랍박스등이 파이썬으로 작성. 파이썬은 공동작업과 유지보수가 매우 쉽고 편하다고합니다… 이미 다른언어로 작성된 프로그램들이 파이썬으로 재구성되고 있습니다!

파이썬 특징

파이썬의 특징

(1)파이썬은 인간다운 언어입니다.

(2)파이썬은 문법이 쉬워 빠르게 배울 수 있습니다.

(3)파이썬은 무료이지만 강력합니다.

(4)파이썬은 간결합니다.

(5)파이썬은 프로그래밍을 즐기게 해줍니다.

(6)파이썬은 개발 속도가 빠릅니다. Life is too short you need python

그럼 파이썬으로 뭘하죠?

(1) 시스템 유틸리티

(2) GUI 프로그래밍(pyqt)

(3) C, C++ 결합 쉬움(glue언어)

(4) 웹 프로그래밍(flask,django)

(5) 수치연산 (Numpy)

(6) Database (Oracle,MySQL,MariaDB)

(7) 데이터분석(Pandas)

할 수 있는게 정말 많네요.. 그럼 시작하겠습니다! 먼저 어떤 언어든 핵심인 자료형을 접해보겠습니다!

자바와 달리 파이썬에서는 선언할 때 따로 자료형을 붙이지 않습니다. 그 값을 보고 판단을 하죠.. 정말 편합니다.

숫자형 : 숫자 형태로 이루어진 자료형 1,2,3 정수 12.3, 3.14 실수

정수선언은 그냥 a=5 이렇게 자료형, 세미콜론이 없다는 점에서 자바와 다르죠? 문자열도 b = ‘Hello’와 같이 그냥 홑따옴표나 쌍따옴표로 만들 수 있습니다. 다만 python’s라는 홑따옴표문자를 출력하고 싶다면 쌍따옴표로 선언하거나 홑따옴표 앞에 역슬래시를 넣으면 문자로 간주합니다.

출력문도 간단합니다. 그냥 print() …클래스도 없고 메인메서드도 없고 참 편한 언어네요! 파이썬에만 있는 작성방식이 눈에 듸었습니다. 바로

1
2
3
4
5
6
7
a = '''
Hello
World
!!
'''

print(a)

홑따옴표를 3개입력해주면 안에서 우리가 줄바꿈 한것을 그대로 표현해줍니다! 아니면 \n로 해줘도 되고요 ^^

리스트

리스트는 배열과 유사합니다. 수정,삽입,삭제가 가능합니다. 문법은 a = [ 1,2,3 ] 처럼 대괄호로 합니다. 여기서 인덱싱과 슬라이싱을 배워볼건데요.. 인덱싱은 자바에서처럼 a[0] 인덱스 번호로 값 1개를 추출합니다. 슬라이싱은 파이썬에 있는 기능인데요.. 만약 어떤 범위의 값을 가져오고 싶다면 a[1 : 3] 이라면 인덱스 1부터 3미만, 즉 인덱스 1,2 값을 선택한 것입니다. 이것을 출력문으로 출력하면 그 범위의 값이 나옵니다 ! 그리고 리스트끼리 연산이 가능한데요. 만약

1
2
3
a=[1,2,3]
b=[4,5,6]
a+b

이렇게 하면 a 리스트 뒤에 b리스트가 연결이 됩니다. 곱셈연산도 가능합니다!

1
2
a =[1,2,3]
a *3

이렇게 하면 1,2,3,1,2,3,1,2,3 이렇게 3번 반복된 하나의 리스트가 됩니다. 길이를 구하는 함수는

1
2
a = [1,2,3]
len(a)

이렇게 하면 3이 출력됩니다. 아 파이썬에서는 원칙적으로 print()함수를 사용해서 출력하지만 안써도 출력이 가능합니다… ㄷㄷ

삭제는 del a[1] 로 하면 인덱스 1의 값이 사라집니다. 또다른 함수로는 append()가 있습니다. 이안에 값을 써주면 자동으로 가장 마지막 인덱스를 추가하고 거기에 값을 넣어줍니다!

1
2
a.append([5,6]) #하나로 취급
a

이렇게 하면 [5,6]가 하나의 원소로 지정되어서 a는 [1, 2, 3, 4, [5, 6]] 이렇게 출력됩니다! 또 sort()함수도 있는데요, 숫자 뿐만아니라 문자까지도 오름차순으로 정리해줍니다. 그리고 sort()된 상태에서 reverse()를 하면 역순으로 되니까 내림차순으로 바뀌겠네요 ^^ index() 함수는 매개변수에 값을 넣어주면 그 인덱스 숫자를 반환합니다! insert()함수는 위치와 값을 입력하면 그 위치에 값을 넣어줍니다.

1
2
3
4
# insert 리스트의 특정위치에 삽입
a = [1,2,3]
a.insert(0,4)
a

이렇게 하면 첫번째 칸에 4가 들어갑니다! remove()는 매개변수에 값을 넣어주면 그 값을 삭제합니다. 중복된 값이 있으면 첫번째로 만나는 값을 삭제해줍니다! pop()은 그 리스트에 가장 마지막에 존재하는 값을 빼내옵니다. 그런데 진짜 빼와서 리스트에 값을 없애버리고 가져와요 ㅎㅎ; count()함수는 매개변수 안에 들어간 값이 리스트에 몇개가 있는지 개수를 반환해줍니다! extend()는 매개변수 안에 있는 리스트를 더해줍니다

1
2
3
4
# extend 리스트에 리스트를 더한다.
a = [1,2,3]
a.extend([4])
a

append()와의 차이라면 append는 값을 하나씩 넣어주고 extend는 리스트를 이어줍니다. 리스트에서 +연산과 비슷하죠?

튜플

튜플은 리스트와 비슷한 배열방식인데 리스트와 다른 점은 수정과 삭제가 불가능하다는 점입니다.(immutable)그리고 리스트는 대괄호[] 를 썼다면 튜플은 소괄호()를 씁니다. 따라서 프로그래밍할 때 앞으로 바뀌지 않는 상수같은 값들을 설정할 때 튜플을 사용합니다.

그리고 튜플은 원소를 하나만 넣을때도 쉼표, 를 붙입니다.

1
2
t1 = ()
t1 = (1,) #튜플은 원소를 하나만 담을 때는 쉼표를 붙인다. 튜플은 괄호 생략 가능하다.

튜플은 수정이 불가하기 때문에 del 이나 이미 만들어진 튜플에 대해 값을 삽입하는 것이 안 됩니다. 대신 추출할 땐 리스트와 같이 인덱싱과 슬라이싱이 가능합니다! 물론 튜플끼리 연산도 됩니다~

딕셔너리

자바에서의 hashmap처럼 키값과 밸류값을 짝을 지어서 저장하는 배열입니다. 중괄호{}로 나타냅니다.

1
2
3
dic = {'name':'pey', 'pohne':'01066452753', 'birth':'0202'}

print(dic)

이렇게요! 밸류값으로 리스트를 줄수도 있습니다. 쌍으로 있기 때문에 삽입할 때도

1
2
a[5]= 'b'
a

이런식으로 키값 5와 그에 대한 밸류값 ‘b’를 입력하여 넣어줍니다. 딕셔너리는 리스트와 마찬가지로 수정 삭제 가능합니다. 따라서 del명령어를 쓸수도 있고 기존값에 삽입도 가능합니다. 그리고 값을 추출할 대도 키값을 이용하여

1
2
3
4
#딕셔너리로 key값을 이용해서 value값 가져오기

grade = {'pey' : 10, 'juliet' : 9}
grade['pey']

이렇게하면 10이라는 값이 도출됩니다. 다만 딕셔너리의 특징은 key값에 대해서는 중복을 허용하지 않습니다. 따라서 key값에는 리스트는 들어올 수 없고 튜플은 들어올 수 있습니다. 왜냐하면 튜플은 더이상 수정 삭제가 되지 않으므로 key값에 영향을 끼칠 우려도 없기 때문이죠!

딕셔너리에서 많이 사용되는 함수들은 keys()가 있습니다. 이것은 그 딕셔너리의 키값을 모두 가져옵니다. 마찬가지로 values는 그 딕셔너리의 모든 밸류값을 가져옵니다. item()은 키와 밸류를 쌍으로 묶어서 딕셔너리의 값을 보여줍니다. clear()는 그냥 다 지워버립니다!

또한 논리값으로

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

이렇게 1안에 ‘a’가 있냐고 물어보는 논리값입니다. 있다면 True를 출력합니다.

Set

중복을 허용하지 않습니다. 큰 특징으로는 순서가 없어서 인덱싱이나 슬라이싱이 불가능합니다.

리스트나 튜플은 순서가 있기 때문에 ordered 인덱싱을 통해 값을 얻을 수 있지만 Set은 순서가 없기 때문에 인덱싱으로 값을 얻을 수 없습니다.. 중복을 허용하지 않는 set의 특징으로 자료형의 중복을 제거하기 위한 필터 역할로 사용됩니다.

1
2
s2 = set("Hello")
s2

이렇게 set으로 안에 Hello를 해주고 s2를 출력하면 문자값으로 H,l,o,e 같이 순서 없이 어떤 값이 있는지만 알려줍니다.

1
2
3
4
5
6
7
8
9
10
11
s1 = set([1,2,3,4,5,6])
s2 = set([4,5,6,7,8,9])

#1 교집합
s1 & s2

#2 합집합
s1 | s2

#3. 차집합
s1-s2

set가 저렇게 2개 있을 때 &기호로 교집합을 추출할 수 있습니다. 함수로는 intersection()을 써서 똑같은 결과를 추출할 수 있습니다.

합집합은기호로 합집합을 추출합니다. 함수로는 union()을 써서 똑같은 결과를 추출할 수 있습니다. 차집합은 저렇게 -기호로 사용합니다. 함수는 없습니다.
1
2
3
4
5
6
7
8
9
10
11
12
# 집합관련 함수들...

#add 1개 추가
s1 = set([1,2,3])
s1.add(4)
s1

#update 여러개 추가...
s1.update([4,5,6])

#remove 특정값 제거
s1.remove(2)

add()함수로 맨 마지막에 값을 하나 추가합니다. update()는 여러 개를 추가합니다. remove()는 특정값을 제거합니다. 매개변수에 인덱스가 아닌 값을 넣습니다.

불린(boolean, bool)

불린타입은 자바와 같습니다. True와 False를 반환하는데 여기선 첫글자를 대문자로 씁니다.

1
2
3
a =[1,2,3,4]
while a:
  print(a.pop())

이렇게하면 어떻게 될까요? while a: 는 조건문입니다. a에 값이 있으면 True를 반환합니다. 따라서 pop()함수로 마지막 값을 하나씩 빼와서 출력하게 한다면 a리스트가 없어질 때까지 반복하면서 출력하겠습니다!

1
2
3
#변수 어떤 값이 들어가 있는 메모리의 위치를 가리킨다! (중요)
#다른 언어에서는 자료형을 직접 지정해줘야하지만 파이썬은 스스로 판단해서 저장한다.
# id() 변수가 가리키는 주소값을 반환한다.
1
2
a = [1,2,3]
b = a

여기서 a라는 변수는 저 리스트의 위치를 갖고 있는 주소값을 갖고있습니다. 따라서 그 주소값을 b에 대입하면 b도 저 리스트를 가리키게 되는 것이죠. 그리고 a==b를 하면 True가 나오죠! 그런데 이것을 보세요

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

a[1]=4
a

b에 a를 대입하지 않았습니다. 그저 a의 모든 값을 복사해서 가져온것이죠 물론 b도 [1,2,3] 이라는 리스트를 갖고 있지만 그것은 a 가 가리키는 주소값의 리스트가 아닙니다. 모양만 같고 다른 리스트죠. 따라서 a리스트에 수정을 가해도 b는 변하지 않습니다. 따라서 a==b라는 논리값도 False가 나오겠군요. 마찬가지로 copy()함수를 사용해서 같은 값을 가져와도 주소값은 서로 다릅니다.

또 파이썬에는 복수의 변수에 값을 한꺼번에 넣어줄 수 있습니다.

1
2
a, b = ('pyhon','great')
a

이렇게 하고 a를 출력하면 python만 출력됩니다! 둘다 같은 값을 넣어주려면

1
a = b = 'python'

이렇게 합니다! 이렇게 보면 되게 인간과 가까운 언어를 구사하고 있다고 봐도 됩니다. 심지어 서로 변수값을 바꿀 수도 있습니다. 물론 자바에서도 가능하지만 그때는 임시로 넣어줄 변수를 선언하고 3개의 변수를 통해서 바꿨는데 파이썬은 쉽습니다. 그냥

1
2
3
4
a = 5
b = 10

a,b = b,a

이렇게 하면 됩니다.. 엄청 간단하네요

1
2
3
4
5
#홍길동 학생의 주빈번호 881120 -1073484 에서 부분씩 추출해보자

hong = '881120-1073484'
print(hong[:6])
print(hong[7:])

이렇게 슬라이싱으로 부분씩 출력할 수 있습니다.

1
2
3
life = ['Life','is','too','short'] #한문장으로 만들어보자
result =" ".join(life) #각 요소사이에 빈칸 삽입 후 하나의 문자열로 만듦
result

join()함수는 어떤 리스트의 모든 값을 “ “ 안에 있는 요소를 각 값 사이에 넣어서 한 문자열로 만들어줍니다. 여기선 공백을 넣어서 마치 띄어쓰기를한 문장처럼 만들었습니다!

1
2
3
4
5
a =(1,2,3)
print(id(a))
a = a+(4,) #튜플 자료형에 1개의 원소만 나타날 때 쉼표 붙이기
print(id(a)) #a가 가르키는 위치가 달라졌다!
a

튜플에는 수정과 삭제가 안 되죠? 삽입은 가능한데 삽입할 경우 값은 달라집니다!

비교연산자

1
2
3
4
5
6
7
8
9
x<y
x>y
x==y
x != y
x >= y
x <= y

x or y
x and y

이런 것들이 있습니다. 뭐 다른 프로그래밍 언어랑 같죠? ㅎㅎ

1
2
3
4
5
6
pocket = ['paper','cellphone','money']

if 'money' not in pocket:
  print("택시")
else:
  print("걷기")

아까는 in 을 보았는데 not in도 있습니다. 그리고 그것은 bool타입이므로 if문 조건에 넣어줄 수 있겠군요!

1
2
3
4
5
6
7
8
9
10
11
pocket = ['paper','cellphone']
card = True
if 'money' in pocket:
  print('택시')
elif card:
  print("택시")
else:
  print("걷기")


#즉, elif는 이전 조건문이 거짓일 때 수행된다.

이것은 elif문인데 else if를 줄인것같습니다 ㅎㅎ; 귀찮았나봐요

1
2
3
4
5
6
7
8
9
10
11
12
p = '''
1.Add
2.Del
3.List
4.Quit

Enter number :'''

n =0
while n !=4:
  print(p)
  n = int(input())

입력도 가능합니다.

#input()입력 받은 모든 값은 기본적으로 문자입니다 따라서 int형으로 강제형변환을 해주었습니다.

이번시간에는 여기까지 하겠습니다!

This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.