프로그래밍/Python

[Do it! 점프 투 파이썬] 02장. 파이썬 프로그래밍의 기초, 자료형

어? 2023. 7. 6.

02-1. 숫자형

1) 숫자형 :  정수, 실수, 8진수(ex. 0o34,0O34), 16진수(ex. 0x2A)

1-1) 실수 : 4.24E10 == 4.24e-10 <- 4.24 × 10^(-10)

2) 사칙연산 : a**b  <- a^y

#Q. 방금 배운 연산자를 이용해 10*18^2+2*11을 계산해 보자.
print(10*18**2+2*11)
#정답 : 3262

나눗셈 후 몫을 리턴하는 연산자 : a // b != a / b

#Q. 방금 배운 연산자를 사용해서 숫자 14를 3으로 나누었을 때 몫과 나머지를 확인해 보자.
print("14 나누기 3의 몫은 ", 14//3, "이고, 나머지는 ", 14%3 , "입니다.")
#정답 : 몫: 4, 나머지 : 2

 

 

02-2. 문자열 자료형

1) 문자열 : 문자, 단어 등으로 구성된 문자들의 집합

2) 문자열 안에 작은따옴표나 큰따옴표를 포함시키고 싶을 때

#문자열에 작은따옴표 포함하기
food = "Python's favorite food is perl"
print(food)
#출력 : Python's favorite food is perl

#문자열에 큰따옴표 포함하기
say = '"Python is very easy." he says.'
print(say)
#출력 : "Python is very easy." he says.

#역슬래시를 사용해서 작은따옴표와 큰따옴표를 문자열에 포함하기
food = 'Python\'s favorite food is perl"
say = "\"Python is very easy.\" he says."
print(food)
print(say)
#출력 : Python's favorite food is perl
#출력 : "Python is very easy." he says.

3) 여러 줄인 문자열을 변수에 대입하고 싶을 때

#줄을 바꾸기 위한 이스케이프 코드 \n 삽입하기
multiline = "Life is too short\nYou need python"
print(multiline)
"""출력 : 
Life is too short
You need python
"""

#연속된 작은따옴표 3개 또는 큰따옴표 3개 사용하기
multiline = '''
Life is too short
You need python'''
print(multiline)
"""출력 : 
Life is too short
You need python
"""
multiline = """
Life is too short
You need python"""
print(multiline)
"""출력 : 
Life is too short
You need python
"""

3-1) 이스케이프 코드

코드 설명
\n 문자열 안에서 줄을 바꿀 때 사용
\t 문자열 사이에 탭 간격을 줄 때 사용
\r 캐리지 리턴(줄 바꿈 문자, 커서를 현재 줄의 가장 앞으로 이동)
\f 폼 피드(줄 바꿈 문자, 커서를 현재 줄의 다음 줄로 이동)
\a 벨 소리(출력할 때 PC스피커에서 '삑'소리가 난다)
\b 백 스페이스
\000 널 문자

4) 문자열 곱하기

print("=" * 50)
print("My Program")
print("=" * 50)

"""
==================================================
My Program
==================================================
"""

5) 문자열의 길이 구하기 : 문자열의 길이에는 공백 문자도 포함된다. >>> len(a)

#Q. 'You need python'라는 문자를 문자열로 만들고 길이를 구해 보자.
a = "You need Python"
len(a)
#정답 : 15

6) 문자열 인덱싱/슬라이싱

a = "Life is too short, You need Python"
print(a[-1])	#출력 : 'n'
print(a[0:4])	#출력 : Life, # 0<=a<3
print(a[19:])	#출력 : You need Python
print(a[:17])	#출력 : Life is too short
print(a[:])	#출력 : Life is too short, You need Python
문자열의 요솟값은 바꿀 수 있는 값이 아니다. (immutable), >>> a[1] = 'y' 불가능

7) 문자열 포매팅

print("I eat %d apples." %3)	#출력 : I eat 3 apples. #정수는 %d
print("I eat %s apples." %"five")	#출력 : I eat five apples. #문자열은 %s + 따옴표

number = 3
print("I eat %d apples." %number)	#출력 : I eat 3 apples.

number = 3
day = "three"
print("I eat %d apples. so I was sick for %s days." %(number,day))
#출력 : I eat 3 apples. so I was sick for three days.
#에러 : print("I eat %d apples. so I was sick for %s days." %number,%day)

number = 10
day = "three"
print("I ate {0} apples. so I was sick for {1} days." .format(number, day))
#출력 : I ate 10 apples. so I was sick for three days.

print("I ate {number} apples. so I was sick for {day} days." .format(number=10, day=3))
#출력 : I ate 10 apples. so I was sick for 3 days.

print("{0:<10}".format("hi"))
#출력: hi        
print("{0:>10}".format("hi"))
#출력:         hi
print("{0:^10}".format("hi"))
#출력:     hi
print("{0:=^10}".format("hi"))
#출력: ====hi====
print("{0:!<10}".format("hi"))
#출력: hi!!!!!!!!
#Q. format 함수 또는 f문자열 포매팅을 사용해 !!!python!!! 문자열을 출력해 보자.
print("{0:!^12}".format("python"))	#출력 : !!!python!!!
print(f'{"python":!^12}')		#출력 : !!!python!!!

8) 문자열 관련 함수들

#1. 문자 개수 세기
a = "hobby"
a.count('b')	#출력 : 2

#2. 위치 알려 주기 1
a = "Python is the best choice"
a.find('b')	#출력 : 14
a.find('k')	#출력: -1, 존재하지 않을 경우...

#3. 위치 알려 주기 2
a = "Life is too short"
a.index('t')	#출력 : 8
a.index('k')	#에러!!!

#4. 문자열 삽입
print(",".join('abcd'))	#출력 : a,b,c,d

#5. 소문자를 대문자로 바꾸기
a = "hi"
print(a.upper())	#출력 : HI

#6. 대문자를 소문자로 바꾸기
a = "HI"
print(a.lower())	#출력 : hi

#7. 공백 지우기
a = "   hi"
print(a.lstrip())	#출력 : hi, 왼쪽 공백 지우기
a = "hi   "
print(a.rstrip())	#출력 : hi, 오른쪽 공백 지우기
a = "   hi   "
print(a.strip())	#출력 : hi, 양쪽 공백 지우기

#8. 문자열 바꾸기
a = "Life is too short"
print(a.replace("Life","Your leg"))	#출력 : Your leg is too short

#9. 문자열 나누기
a = "Life is too short"
print(a.split())	#출력 : ['Life', 'is', 'too', 'short']
b = "a:b:c:d"
print(b.split(':'))	#출력 : ['a', 'b', 'c', 'd']

 


02-3. 리스트 자료형

1) 리스트의 인덱싱

>>> a = [1,2,3, ['a','b','c']]
>>> a[-1][0]	#출력 : 'a'
>>> a[3][0]		#출력 : 'a'

2) 리스트의 슬라이싱

>>> a = [1,2,3,4,5]
>>> a[0:2]	#출력 [1, 2]
# Q. a[1,2,3,4,5] 리스트에서 슬라이싱 기법을 사용하여 리스트 [2.3]을 만들어 보자.
>>> list = a[1:3]

3) 리스트 연산하기

>>> a = [1,2,3, ['a','b','c']]
>>> type(a[1])	#출력 : <class 'int'>
>>> type(a[3])	#출력 : <class 'list'>
>>> type(a[3][0])#출력 : <class 'str'>

4) 리스트 수정과 삭제 : del 객체

5) 리스트 관련 함수 : append(요소 추가), sort(정렬), reverse(뒤집기), index(인덱스, 검색), insert(위치를 지정하여 요소 추가), remove(제거), pop(stack의 pop?), count(특정 요소의 개수 세기), extend(리스트를 추가)

 

 

02-4. 튜플 자료형

- [리스트] vs (튜플), 튜플은 요솟값을 바꿀 수 없다

1) 튜플 만드는 법 : t1 = (1, ) <<< 1개의 요소만을 가질 때는 쉼표 필수, t2 = 1,2,3 <<< 소괄호 생략 가능

Q. (1,2,3) 이라는 튜플에 값 4를 추가하여 (1,2,3,4)라는 새로운 튜플을 출력해 보자.
t1 = 1,2,3
t1 + (4,)	#출력 : (1, 2, 3, 4)

 


02-5. 딕셔너리 자료형

- 대응 관계, '연관 배열' or '해시(hashing)

1) 딕셔너리란? : key -> value

2) 딕셔너리 만들기 : {Key1: Value1, Key2: Value2, ...}

3) 딕셔너리 쌍 추가, 삭제하기

>>> a = {1: 'a'}
>>> a[2] = 'b'
>>> a['name'] = 'pey'
>>> a[3] = [1,2,3]
>>> a	#출력 : {1: 'a', 2: 'b', 'name': 'pey', 3: [1, 2, 3]}
>>> del a[1]
>>> del a['name']
>>> a	#출력 : {2: 'b', 3: [1, 2, 3]}

4) 주의 사항 : 중복 Key값일 경우 가장 Last 이외 무시, Key값으로 리스트는 사용X but 튜플은 사용O

5) 딕셔너리 관련 함수 : keys(키값만을 모아 dict_keys객체 리턴), values(밸류값만을 모아 dict_values 객체 리턴), items( 모든 키-밸류 쌍을 튜플로 묶어서 dict_items으로 리턴), clear(모든 요소 삭제), get(키값으로 밸류 얻기, 인덱싱 방식과는 다르게 존재하지 않는 키를 검색할 때 에러를 발생시키지 않음, 디폴트 처리를 할수있음?), in(키값이 존재하는지 검색, boolean리턴)

# Q. 다음 표를 딕셔너리로 만드시오. (생략)
>>> d = {'name' : ' 홍길동', 'birth' : 1128, 'age' : 30}
>>> d	# 출력 : {'name': ' 홍길동', 'birth': 1128, 'age': 30}

 

02-6. 집합 자료형

1) 집합 자료형 만들기

>>> s1 = set([1,2,3])
>>> s1	#출력 : {1, 2, 3}

>>> s2 = set("Hello")
>>> s2	#출력 : {'H', 'l', 'e', 'o'}

-특징 : 중복 허용X. 순서 없음

2) 교집합, 합집합, 차집합 구하기 : &(교집합, intersection함수도 동일 기능), | (합집합, union 함수도 동일 기능), -(차집합, difference 함수도 동일 기능)

3) 집합 자료형 관련 함수 : add(값 1개 추가, 1개 초과시 error ), update(값 여러개 추가, 리스트 형식으로...), remove(특정 값 제거)

 

02-7. 불 자료형

1) 자료형의 참과 거짓 : 공백 <- False, bool

 

02-8. 자료형의 값을 저장하는 공간, 변수

1) 변수란?

>>> a = [1,2,3]
>>> id(a)	#출력 : 2792807691968 <- 변수 a가 가리키는 리스트의 주소 값

[1,2,3] <- 리스트 데이터(객체)가 자동으로 메모리에 생성, a <- 리스트가 저장된 메모리의 주소를 가리킴

2) 리스트 복사 : 같은 객체를 참조(point?)하게 될지도... 

>>> b = a
>>> a is b	#출력 : True

 

# [:] 이용하기
>>> a = [1,2,3]
>>> b = a[:]
>>> a is b	#출력 : False

# copy 모듈 이용하기
>>> from copy import copy
>>> c = [1,2,3]
>>> d = copy(c) #copy 모듈 필요함
>>> d = c.copy()
>>> c is d	#출력 : False

3) 변수를 만드는 여러 가지 방법

#파이썬은 동시에 여러 변수 대입 가능함
>>> a = b = 'python'
>>> a, b = ('python', 'java')
>>> (a, b) = 'python', 'java'
>>> [a, b] = ['python', 'java']

>>> a	#출력 : 'python'
>>> b	#출력 : 'java'
# 간단한 swap
>>> a = 3
>>> b = 5
>>> a, b = b, a

>>> a	#출력 : 5
>>> b	#출력 : 3
# Q. 다음 예제를 실행한 후 그 결과를 설명해 보자.
>>> a = [1,2,3]
>>> b = [1,2,3]
>>>a is b
# 출력 : False
# 설명 : 변수 a 와 b는 서로 다른 메모리를 가리킨다.

 

댓글