클래스

 클래스와 객체

클래스를 잘 설명해주는 예는 스마트폰과 스마트폰 설계도를 생각하면 된다.

  • 스마트폰 설계도 → 클래스(class) : 똑같은 무엇인가를 계속해서 만들어 낼수 있는 설계 도면
  • 설계도에 의해 만들어진 스마트폰 객체(object) : 클래스로 만든 피조물

클래스로 만든 객체는 각 객체마다 고유한 성격을 가진다. 동일한 클래스로 만든 객체들은 서로 전혀 영향을 주지 않는다.

 

객체와 인스턴스의 차이

클래스로 만든 객체를 인스턴스라고도 한다. 

a = Cookie() 와 같이 만든 것은 객체

a 객체는 Cookie의 인스턴스

즉, 인스턴스는 특정 객체가 어떤 클래스의 객체인지 관계 위주로 설명할 때 사용한다. 'a는 Cookie의 객체'라는 표현보다 'a는 Cookie의 인스턴스' 라는 표현을 사용한다.

 


 

 

함수

 함수를 사용하는 이유

(1) 반복적으로 사용되는 가치 있는 부분을 한 뭉치로 묶어서 어떤 입력값을 주었을 때 어떤 결과값을 돌려준다

(2) 기능 단위의 함수로 분리해 놓으면 프로그램 흐름을 일목요연하게 볼수 있다.

(3) 프로그램 흐름도 잘 파악할 수 있고 오류가 어디에서 나는지도 쉽게 알아차릴 수 있다.

 

파이썬 함수의 구조

def는 함수를 만들때 사용하는 예약어, 함수명은 개발자가 임의로 만들어 준다. 매개변수는 이 함수에 입력으로 전달되는 값을 받는 변수이다.

def 함수명(매개변수) :
	수행할 문장1
	수행할 문장2
	...
    
def add(a, b) :
	return a+b
    
a = 3
b = 4
c = add(a, b)

print(c)	# 출력결과 : 7

위의 함수 이름은 add이고 입력값을 2개 받아서 더한값을 리턴(출력)하는 함수이다. 변수 a에 3, b에 4를 대입한 후 변수 c에 add 함수의 리턴값을 대입하면 c는 a와 b를 더한 값 7이 출력되는 것을 확인할 수 있다.

 매개변수와 인수

매개변수와 인수는 혼용해서 사용되는 헷갈리는 용어다. 매개변수는 함수에 입력으로 전달된 값을 받는 변수를 의미하고 인수는 함수를 호출할 때 전달하는 입력값을 의미한다.

def add(a, b)		# a, b는 매개변수
	return a+b
    
print(add(3, 4))	# 3, 4는 인수
  • 매개변수 : 함수에 전달된 값을 저장하는 변수
  • 인수 : 함수에 전달하는 값

 

여러개의 입력값을 받는 함수 만들기

예제로 여러 개의 입력값을 모두 더하는 함수를 만들어 보자. add_many(1, 2)면 3, add_many(1, 2, 3)이면 6, add_many(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)이면 55를 리턴하는 함수를 만들어 보자

def add_many(*nums) : 
	result = 0
	for i in nums :
		result = result + i
	return result
    
result = add_many(1, 2, 3)
print(result)	# 출력결과 : 6

result = add_many(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
print(result)	# 출력결과 : 55

add_many함수는 입력값이 3개든 10개든 상관이 없다. *nums 처럼 매개변수 이름 앞에 *을 붙이면 입력값을 전부 모아서 튜플로 만들어 준다. 또 *nums 하나만 사용하는 것이 아니라 다른 매개변수도 같이 사용할 수 있다.

def add_mul(choice, *nums) :
	if choice == "add" :
		result = 0
		for i in nums :
			result = result + i
	elif choice == "mul" : 
		result = 1
		for i in nums :
			result = result * i
	return result
    
result = add_mul('add', 1, 2, 3, 4, 5)
print(result)   # 출력결과 : 15

result = add_mul('mul', 1, 2, 3, 4, 5)
print(result)   # 출력결과 : 120

사용자 입력과 출력

 사용자 입력(input)

사용자가 입력한 값을 어떤 변수에 대입하고 출력한다.

a = input()

# 입력값 : dokev archive python chapter4
print(a)	# 출력값 : dokev archive python chapter4

 

프롬프트를 띄워 사용자 입력 받기

input("안내문구") 와 같은 형식으로 사용자 입력을 받아본다

number = input("숫자를 입력하세요 >> ")
# 입력값 : 3
print(number)	# 출력결과 : 3

print(type(number))	# 출력결과 : <class 'str'>

위에 number 변수에 입력된 값은 숫자형식의 3이 아니라 문자형식의 '3' 임을 기억하자! 

 

출력(print)

(1) 큰 따옴표(")로 둘러싸인 문자열은 (+) 연산과 동일하다

(2) 문자열 띄어쓰기는 콤마로 한다

(3) 한줄에 결과값 출력하기

print("abc" "def" "ghi")		# 출력결과 : abcdefghi
print("abc" + "def" + "ghi")	# 출력결과 : abcdefghi
print("abc", "def", "ghi")		# 출력결과 : abc de fghi

for i in range(10) :
	print(i, end=' ')
# 출력결과 : 0 1 2 3 4 5 6 7 8 9

 

파일 읽고 쓰기

 파일 생성하기

프로그램을 실행한 디렉터리에 새로운 파일을 만들 수 있다. 파이썬 내장함수 open을 사용해서 파일을 생성한다. open함수는 "파일 이름" "파일 열기 모드" 를 입력값으로 받고 결괏값으로 파일 객체를 리턴한다.

파일 객체 = open(파일 이름, 파일 열기 모드)

파일열기모드 설명
r 읽기모드 - 파일을 읽기만 할 때 사용
w 쓰기모드 - 파일에 내용을 쓸 때 사용
a 추가모드 - 파일의 마지막에 새로운 내용을 추가 시킬 때 사용
f = open("새파일.txt", 'w')
f.close()

파일을 쓰기 모드로 열면 해당 파일이 이미 존재할 경우 원래 있던 내용이 모두 사라지고, 해당 파일이 존재하지 않으면 새로운 파일이 생성된다. 그리고 파일을 프로젝트가 생성된 경로가 아니라  (windows10 기준 바탕화면) C:/Users/user/Desktop/ 경로에 생성하고 싶다면 다음과 같이 작성한다.

f = open("C:/Users/user/Desktop/새파일.txt", 'w')
f.close()

f.close() 는 열려 있는 파일 객체를 닫아 주는 역할을 한다. 프로그램을 종료할 때 파이썬 프로그램이 열려 있는 파일 객체를 자동으로 닫아주기 때문에 생략이 가능하지만 close() 를 사용해서 열려있는 파일을 직접 닫아주는 것이 좋다. 쓰기모드로 열었던 파일을 닫지 않고 다시 사용하려고 하면 오류가 발생하기 때문이다.

쓰기모드로 내용작성하기

 


 

 

if문(조건문)

 if문 이란?

프로그래밍에서 조건을 판단하여 해당 조건에 맞는 상황을 수행하는 데 쓰이는 조건문

 

if문 기본구조
if 조건문 : 
	수행할 문장1
	수행할 문장2
else :
	수행할 문장A
	수행할 문장B

 

조건문을 테스트 해서 참(True)이면 if문에 해당하는 내용을 수행하고, 거짓(False)면 else문에 있는 내용을 수행한다. 따라서 else는 if문 없이 단독으로 사용할 수 없다.

 

들여쓰기

다른 프로그래밍 언어와 달리 python은 들여쓰기(indentation)를 잘 지켜야한다.

if condition : 
    print("dokev")
    print("archive")
    print("python")
    
    ''' 출력결과
    
    dokev
    archive
    python
    
    '''

위와 같이 [tab] 키를 눌러서 들여쓰기를 해줘야 원하는 대로 출력이 되는 것을 볼 수 있다.

condition = True

if condition : 
    print("dokev")			# ①
    	print("archive")		# ②
print("python")			# ③

①의 경우에는 조건식 condition의 값에 따라 출력이 되는 것을 볼 수 있고, ②의 경우는 'Unexpected indentation Pylance' 오류 메세지가 출력하는 것을 볼 수 있다. 마지막 ③의 경우는 조건식과 관계없이 무조건 출력이 된다.

 비교 연산자

비교 연산자는 값의 크기를 비교하여 참(True)와 거짓(False)을 판별한다.

비교 연산자 설명
x < y  x가 y보다 작다
x > y  x가 y보다 크다
x == y  x와 y가 같다
x != y  x와 y가 같지 않다
x >= y  x가 y보다 크거나 같다
x <= y  x가 y보다 작거나 같다

if문의 기준이 되는 조건문 money >= 3000 이 거짓이 되기 때문에 else문에 해당하는 "아메리카노를 마신다" 가 출력이 되는 것을 확인할 수 있다. 

money = 2000
if money >= 3000
	print("바닐라라떼를 마신다")
else :
	print("아메리카노를 마신다")
    
# 출력결과 : 아메리카노를 마신다

 

논리 연산자

논리 연산자는 and, or, not 연산자를 사용해서 조건을 판단한다

논리 연산자 설명
x or y  x와 y 둘중에 하나만 참이어도 참이다
x and y  x와 y 모두 참이어야 참이다.
not x  x가 거짓이면 참이다

x와 y는 조건식 혹은 조건문으로 이루어 진다. x에 money>=3000 이라는 식과 y 에 True 라는 값을 넣어서 확인해보자!

money = 2000
x = money >= 3000
y = True

if x or y :
	print("x or y : True")
else :
	print("x or y : False")
    
if x and y :
	print("x and y : True")
else :
	print("x and y : False")
    
if not x :
	print("not x : True")
else :
	print("not x : False")
    
'''
출력결과 
x or y : True
x and y : False
not x : True
'''

 

 in 연산자

다른 프로그래밍 언어에서는 쉽게 볼 수 없는 조건문을 제공한다. in의 뜻이 '~안에' 라는 의미가 있듯이 in 은 리스트, 튜플, 문자열안에 해당하는 값이 있다면 True, 없으면 False를 반환하고, not in의 경우에는 해당 리스트, 튜플, 문자열 안에 값이 없다면 True, 있으면 False값을 반환한다.

x = 'dokev archive'
y = [1, 2, 3]

print('d' in x)	# 출력결과 : True
print('j' in x)	# 출력결과 : False

print(1 not in y)	# 출력결과 : False
print(4 not in y)	# 출력결과 : True

 

 elif 사용

보통 else if 로 자주 사용하지만 python에서는 elif로 사용된다. 조건문에서 처음 나오는 조건 if 이후에 나오는 다른 조건들은 elif (else if의 줄임말)을 사용해서 나타내도록 한다.

'''
elif 기본구조

if 조건문1 : 
	수행할 문장1
elif 조건문 2 :
	수행할 문장2
elif 조건문 n :
	수행할 문장n
else :
	수행할 문장m
'''

money = 2000

if money >= 3000:
    print("바닐라 라떼를 마신다")
elif money >= 1500:
    print("아이스 아메리카노를 마신다")
else:
    print("따뜻한 아메리카노를 마신다")

 

조건부 표현식

변수 = 참일 경우 값 if 조건문 else 거짓일 경우 값

조건부 표현식은 가독성에 유리하고 한줄로 작성할 수 있어 활용성이 좋다.

money = 4000
message = "바닐라라떼를 마신다" if money >= 3000 else "아메리카노를 마신다"

print(message)	# 출력결과 : 바닐라라떼를 마신다

 

while문(반복문)

 while문이란?

조건문이 참인 동안에 while문에 속한 문장들이 반복해서 수행된다. ex) "열번 찍어 안 넘어가는 나무 없다 "는 속담을 파이썬 프로그램으로 만들기

treeHit = 0
while treeHit < 10 :
	treeHit = treeHit + 1
	print("나무를 %d번 찍었습니다." %treeHit)
	if treeHit == 10 :
		print("나무가 넘어갑니다.")
        
'''
출력결과
나무를 1번 찍었습니다.
나무를 2번 찍었습니다.
나무를 3번 찍었습니다.
나무를 4번 찍었습니다.
나무를 5번 찍었습니다.
나무를 6번 찍었습니다.
나무를 7번 찍었습니다.
나무를 8번 찍었습니다.
나무를 9번 찍었습니다.
나무를 10번 찍었습니다.
나무가 넘어갑니다.
'''

위 예제에서 while문의 조건문은 treeHit < 10 이다. 즉 treeHit가 10보다 작은 동안에 while문이 반복돼서 실행된다. 그리고 treeHit가 10보다 크게 된다면 조건문이 False가 되므로 while문을 종료한다.

 while문 강제로 빠져나가기

while문을 수행하다가 강제로 종료시키기 위해서는 break 문을 사용하면 된다. break문을 사용하는 시점에서 반복을 중지되고 while문이 종료되는 것을 볼 수 있다.

treeHit = 0
while treeHit < 10:
    treeHit = treeHit +1
    print("나무를 %d번 찍었습니다." % treeHit)
    if treeHit == 3:
        print("너무 힘들어서 그만둡니다.")
        break
        
'''
출력결과
나무를 1번 찍었습니다.
나무를 2번 찍었습니다.
나무를 3번 찍었습니다.
힘들어서 그만둡니다
'''

 

while문의 처음으로 돌아가기

break문은 while문을 빠져나갔다고 하면 continue문은 이후 문장을 실행하지 않고 while문의 처음으로 돌아가는 역할을 한다. treeHit가 3일때 이후 문장을 실행하지 않고 다시 while문의 처음으로 돌아가서 반복문을 다시 실행하는 것을 볼 수 있다.

treeHit = 0
while treeHit < 10 :
	treeHit = treeHit + 1
	if treeHit == 3 :
		continue
	print("나무를 %d번 찍었습니다." %treeHit)
    
'''
출력결과
나무를 1번 찍었습니다.
나무를 2번 찍었습니다.
나무를 4번 찍었습니다.
나무를 5번 찍었습니다.
나무를 6번 찍었습니다.
나무를 7번 찍었습니다.
나무를 8번 찍었습니다.
나무를 9번 찍었습니다.
나무를 10번 찍었습니다.
'''

 

 무한루프

while문의 조건식이 계속 참일 경우 반복문을 무한으로 실행한다. 아무 의미 없이 무한 루프를 돌리는 경우는 거의 없을 것이므로 무한루프를 빠져나가기 위해 [Ctrl]키 + [C]키를 눌러서 빠져 나오도록 한다.

 

for문

 for문의 기본 구조
'''
for 변수 in 리스트(또는 튜플, 문자열) :
	수행할 반복문1
    수행할 반복문2
    
'''

fruits = ['strawberry', 'banana', 'orange']
for i in fruits:
	print(i)
    
'''
출력결과
strawberry
banana
orange
'''

 

 

 for문과 range함수

range 함수는 숫자 리스트를 자동으로 만들어 주는 함수로써 for문과 함께 사용하는 경우가 많다. range(10)은 0부터 10미만(10은 포함하지 않음)의 숫자를 포함하는 range객체를 만들어 주고, range(1, 11) 은 1부터 10까지(1이상, 11미만)의 숫자를 지정해준다.

a = range(10)
b = range(1, 11)

print(a)	# 출력결과 : range(0, 10)
print(b)	# 출력결과 : range(1, 11)

for문과 range함수를 함께 사용하는 예제를 살펴보자. 아래 예제는 1부터 10까지의 합을 구하는 문제를 for문과 range함수를 이용해서 작성한 것이다.

add = 0
for i in range(1, 11) :
	add = add + i

print(add)	# 출력결과 : 55

 

 for문과 range함수를 이용한 구구단
for i in range(2, 10):
    print("===", i, "단 ===", end="\n")
    for j in range(1, 10):
        print(i, "*", j, "=", i*j, end="\n")
    print(end="\n")

'''
출력결과
=== 2 단 ===
2 * 1 = 2
2 * 2 = 4
2 * 3 = 6
.
.
.
9 * 7 = 63
9 * 8 = 72
9 * 9 = 81
'''

 

 리스트 컴프리헨션

리스트 컴프리헨션(List comprehension) : 리스트 안에 for문을 포함, 좀 더 편리하고 직관적인 프로그램을 만들 수 있다. 아래 예제는 a리스트의 각 요소에 3을 곱한 결과를 result 리스트에 담는 예제이다.

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

for num in a :
	result.append(num*3)
    
print(result)	# 출력결과 : [3, 6, 9, 12]

또한 리스트 컴프리헨션을 다음과 같이 표현할 수도 있다.

[ 표현식 for 항목 in 반복가능객체 if 조건문]

# a 리스트에서 짝수에만 3을 곱한다
a = [1, 2, 3, 4]
result = [num * 3 for num in a if num % 2 == 0]

print(result)	# 출력결과 : [6, 12]

위와 같이 사용할 수도 있고, 복잡하지만 for문을 여러개 사용할 수도 있다. 구구단의 모든 결과를 리스트에 담아 보도록 하자

result = [x*y for x in range(2,10) for y in range(1,10)]
print(result)	# 출력결과 : [2, 4, 6, ... 63, 72, 81]

 

 

 

자료형의 값을 저장하는 공간, 변수

 변수란?

(1) 객체를 가리키는 것 : assignment( = ) 기호를 사용해서 "변수 = 저장할 값" 과 같이 선언한다.

a = 1
b = "python"
c = [1, 2, 3]

(2) 자료형의 데이터(값)와 같은 것 : C언어나 Java처럼 자료형을 따로 지정하지 않는다.

# Java에서 숫자데이터를 변수에 저장할 때
# int javaNum = 10;

# Python에서 숫자데이터를 변수에 저장할 때
pythonNum = 10

(3) 변수에 데이터를 할당하면 그 객체는 자동으로 메모리에 생성되고 변수는 저장된 메모리의 주소를 가르키게 된다. (메모리 주소는 사용자마다 다르게 나올수 있다.)

print(id(a))  # 출력결과 : 140735303312168

b = "python"
print(id(b))  # 출력결과 : 2894261684656

c = [1, 2, 3]
print(id(c))  # 출력결과 : 2894261685376

 

 리스트 복사

(1) [:] 사용

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

print(a)		# 출력결과 : [1, 2, 3]
print(b)		# 출력결과 : [1, 2, 3]

(2) copy 모듈 사용

a = [1, 2, 3]
b = copy(a)

print(a)		# 출력결과 : [1, 2, 3]
print(b)		# 출력결과 : [1, 2, 3]

print(id(a))	# 출력결과 : 3151493893248
print(id(b))	# 출력결과 : 3151494869184

print(b is a)	# 출력결과 : False
print(b == a)	# 출력결과 : True

객체 b와 객체 a의 데이터를 비교하는 ( == )를 사용할 경우 '두 객체의 값이 같다' 는 의미로 True가 출력되고 두 객체의 메모리를 비교하는 is 키워드를 사용해서 '두 객체가 다르다' 는 의미로 False가 출력되는 것을 확인할 수 있다.

변수를 만드는 여러가지 방법
# 튜플
a, b = ('dokev', 'archive')
a, b = 'dokev', 'archive'
print(a)    # 출력결과 : dokev
print(b)    # 출력결과 : archive

# 값 바꾸기
a, b = b, a
print(a)    # 출력결과 : archive
print(b)    # 출력결과 : dokev

# 리스트
[c, d] = ['python', 11]
print(c)    # 출력결과 : python
print(d)    # 출력결과 : 11

x = y = 'dokev archive'
print(x)    # 출력결과 : dokev archive
print(y)    # 출력결과 : dokev archive

 


 

불(bool) 자료형이란?

참(True)과 거짓(False)을 나타내는 자료형, 다른 언어와 달리 첫문자를 항상 대문자로 작성한다. 파이썬의 내장함수 type(x)를 사용해서 자료형을 확인해보자.

a = True
b = False

print(a)		# 출력결과 : True
print(type(a))	# 출력결과 : <class 'bool'>

print(b)		# 출력결과 : False
print(type(b))	# 출력결과 : <class 'bool'>
 조건문의 리턴(return) 값

True나 False값 외에 조건에 대한 리턴 값으로도 사용된다.

print(1==1)		# 출력결과 : True
print(2<1)		# 출력결과 : False

a = 1==1
b = 2<1
print(a)		# 출력결과 : True
print(b)		# 출력결과 : False

 

 자료형의 참과 거짓

문자열, 리스트, 튜플, 딕셔너리 등의 값이 존재하면 참(True), 비어있으면 거짓(False)이 된다. 숫자에서는 0일때 거짓, 값이 존재하지 않는 변수 None이 거짓이 된다.

"python" "" [1, 2, 3] [] (1, 2, 3) () {'a':1} {} 1 0 None

or
거짓
거짓 거짓 거짓 거짓 거짓 거짓

 

불 연산

bool 함수를 통해 자료형의 참과 거짓을 판별할 수 있다.

print(bool([1, 2, 3]))	# 출력결과 : True
print(bool())			# 출력결과 : False
print(bool(0))			# 출력결과 : False
print(bool(3))			# 출력결과 : True

 


 

 

딕셔너리 자료형

 딕셔너리란?

 

(1) 대응 관계를 잘 나타내는 자료형, 연관 배열(Associative Array) 또는 해시(Hash)

(2) key와 value를 한쌍으로 갖는 자료형

(3) 리스트와 튜플처럼 순차적으로 해당 요솟값을 구하지 않고 key를 통해 value를 얻는 형태

딕셔너리 기본구조

 

{ key1 : value1, key2 : value2 , key3 : value3 , ... } 의 구조처럼 key와 value 사이에 콜론(:) 으로 한쌍을 묶고 콤마(,)로 구분한다. 

person = {'name' : 'dokev', 'age' : 20, 'birth' : '1122'}
print(person)	# 출력결과 : {'name' : 'dokev', 'age' : 20, 'birth' : '1122'}

딕셔너리의 value에는 리스트도 넣을 수 있다.

dic = {'keyList': [1, 2, 'a', 'b']}
print(dic)      # 출력결과 : {'keyList': [1, 2, 'a', 'b']}
딕셔너리 요소(key : value) 추가하기

 

a[key] = value 형태로 딕셔너리 a에 key와 value를 추가한다. 딕셔너리는 순차적 요소를 사용하지 않기 때문에 순서는 상관하지 않아도 된다.

a = {1: 'a'}
a['name'] = 'dokev'
a[2] = 'b'
a['dicList'] = [1, 2, 3]

print(a)    
# 출력결과 : {1: 'a', 'name': 'dokev', 2: 'b', 'dicList': [1, 2, 3]}
딕셔너리 요소 삭제하기

 

del 함수를 사용해서 해당 key를 선택하면 value도 삭제된다. key 값이 1인 value값 'a'와 key값이 2인 value값 'b'가 삭제된 것을 확인할 수 있다.

a = {1: 'a', 'name': 'dokev', 2: 'b', 'dicList': [1, 2, 3]}
del a[1]
del a[2]

print(a)        # 출력결과 : {'name': 'dokev', 'dicList': [1, 2, 3]}
딕셔너리 사용시 주의사항

 

key가 중복되면 먼저 나온 key에 대한 value는 무시한다. 먼저 작성한 key 'name' 의 value는 'dokev' 였는데 뒤에 나온 key 'name' 의 value 'archive' 만 출력되는 것을 확인할 수 있다.

b = {'name' : 'dokev' , 'name' : 'archive'}
print(b)	# 출력결과 : {'name' : 'archive'}
딕셔너리 관련 함수들

 

(1) keys() : key 값들을 모아 리스트 만들기

(2) values() : value 값을 모아 리스트 만들기

(3) items() : key와 value 쌍으로 만들기

(4) clear() : key와 value 지우기

(5) get(key) : key로 value 값 얻기

(6) in : 해당 key가 딕셔너리 안에 있는지 확인


2장 파이썬 프로그래밍의 기초 [자료형] 

튜플형 자료형

- 튜플(tuple)이란

리스트와 비슷하지만 몇가지 다른점이 있다.

(1) 리스트는 [] 로 생성하고, 튜플은 ()로 생성한다 + () 도 생략이 가능하다.

(2) 리스트는 요소 값의 생성, 삭제, 수정이 가능하지만 튜플은 불가능하다.

t1 = (1, 2, 'a', 'b')
t2 = 3, 'c'

print(t1)		# 출력결과 : (1, 2, 'a', 'b')
print(t2)		# 출력결과 : (3 'c')

- 튜플 인덱싱

튜플을 만들 때 꼭 같은 데이터 타입으로 만들 필요는 없다. 튜플 안에 튜플을 포함 할 수도 있다.

t3 = (1, 2, 'dokev', 'archive')
t4 = (1, 2, ('dokev', 'archive'))

print(t3[2])    	 # 출력결과 : dokev
print(t4[2])    	 # 출력결과 : ('dokev', 'archive')
print(t4[2][1])	# 출력결과 : archive'

- 튜플 슬라이싱

리스트과 마찬가지로 튜플도 슬라이싱 기법을 사용해서 나눈다. t5[0:2] 의 경우 인덱스 번호 0번부터 2번 전까지 리스트를 가져온다는 의미로 사용된다. 또한 t5[:2] 는 처음부터 인덱스 2번 전까지, t5[2:] 는 인덱스 2번부터 끝까지 튜플을 가져온다.

t5 = (1, 2, 3, 4, 5)
print(t5[0:2])	# 출력결과 : [1, 2]

b = t5[:2]
c = t5[2:]

print(b)	# 출력결과 : [1, 2]
print(c)		# 출력결과 : [3, 4, 5]

 

- 튜플 연산하기

(1) 튜플 더하기 (+) : 튜플a 와 튜플b를 더하면 모든 요소를 튜플안에 담으면 된다.

t1 = (1, 2, 'a', 'b')
t2 = 3, 'c'

print(t1 + t2)	# 출력결과 : (1, 2, 'a', 'b', 3, 'c')

(2) 튜플길이 구하기 : len() 함수 사용

t1 = (1, 2, 'a', 'b')
t2 = 3, 'c'

print(len(t1+t2))	# 출력결과 : 6

- 튜플 요소 컨트롤

(1) 요소 수정 : t1[0]의 요솟값을 1에서 'c'로 바꿀 수 없다. 요솟값을 수정하려고 하면 'tuple' object does not support item assignment 오류가 발생하는 것을 볼 수 있다.

t1 = (1, 2, 'a', 'b')
t1[0] = 'c'
# TypeError: 'tuple' object does not support item assignment 오류 발생

(2) 요소 삭제(del) : t1[1] 에 해당하는 값을 삭제할 수 없다. 요솟값을 삭제하려고 하면 'tuple' object does not support item deletion 오류가 발생하는 것을 볼 수 있다.

t1 = (1, 2, 'a', 'b')
del t1[0]
# TypeError: 'tuple' object doesn't support item deletion 오류 발생

그 외에도 append(추가), sort(정렬), reverse(뒤집기), insert(삽입), remove(제거), pop(꺼내기), extend(확장) 등은 사용할 수 없고, index(인덱스반환), count(해당요소갯수) 는 확인할 수 있다.

 


 

2장 파이썬 프로그래밍의 기초 [자료형] 

 리스트 자료형

- 리스트 생성

리스트 이름을 만들과 대괄호 [ ] 안에 데이터를 넣고, 요솟값은 쉼표(,)로 구분

odd = [1, 3, 5, 7, 9]
# 리스트명 = [요소1, 요소2, 요소n]

a = []
# 비어 있는 리스트는 a = list()로 생성가능

- 리스트 인덱싱

리스트를 만들 때 꼭 같은 데이터 타입으로 만들 필요는 없다. 리스트 안에 리스트를 포함 할 수도 있다.

b = [1, 2, 3]
c = ['dokev', 'archive', 'develope']
d = [1, 2, 'dokev', 'archive']
e = [1, 2, ['dokev', 'archive']]

print(b[0])     # 출력결과 : 1
print(c[1])     # 출력결과 : archive
print(d[2])     # 출력결과 : dokev
print(e[2])     # 출력결과 : ['dokev', 'archive']

- 리스트 슬라이싱

문자열과 마찬가지로 리스트도 슬라이싱 기법을 사용해서 나눈다. a[0:2] 의 경우 인덱스 번호 0번부터 2번 전까지 리스트를 가져온다는 의미로 사용된다. 또한 a[:2] 는 처음부터 인덱스 2번 전까지, a[2:] 는 인덱스 2번부터 끝까지 리스트를 가져온다.

a = [1, 2, 3, 4, 5]
print(a[0:2])	# 출력결과 : [1, 2]

b = a[:2]
c = a[2:]

print(b)	# 출력결과 : [1, 2]
print(c)		# 출력결과 : [3, 4, 5]

- 리스트 연산하기

(1) 리스트 더하기 (+) : 리스트 a 와 리스트 b를 더하면 모든 요소를 리스트 안에 담으면 된다.

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

print(a + b)	# 출력결과 : [1, 2, 3, 4, 5, 6]

(2) 리스트 반복하기 ( * ) : 리스트를 여러번 반복할 때 사용한다.

a = [1, 2, 3]
print(a * 3)	# 출력결과 : [1, 2, 3, 1, 2, 3, 1, 2, 3]

(3) 리스트 길이 구하기 : len() 함수 사용

a = [1, 2, 3]
print(len(a))	# 출력결과 : 3

(4) 리스트 연산 오류 : 정수타입과 문자열은 더할 수 없기 때문에 오류 발생, str() 함수를 사용해서 정수타입의 데이터를 문자열로 바꿔준다.

a = [1, 2, 3]
print(a[1] + "hi")	
# 출력결과 : TypeError : unsupported operand typs(s) for +: 'int' and 'str'

print(str(a[1]) + "hi")		# 출력결과 " 2hi

- 리스트 요소 컨트롤

(1) 요소 수정 : a[2]의 요솟값을 3에서 4로 바꿀 수 있다.

a = [1, 2, 3]
a[2] = 4
print(a)		# 출력결과 : [1, 2, 4]

(2) 요소 삭제(del) : a[1] 에 해당하는 2 값이 삭제된다.

a = [1, 2, 3]
del a[1]
print(a)	# 출력결과 : [1, 3]

(3) 요소 추가(append) : 맨 마지막에 요소를 추가 한다. 

a = [1, 2, 3]

a.append(4)
print(a)	# 출력결과 : [1, 2, 3, 4]

a.append([5, 6])
print(a)	# 출력결과 : [1, 2, 3, 4, [5, 6]]

(4) 요소 정렬(sort) : 요소를 순서대로 정렬해 준다

a = [1, 4, 3, 2]
a.sort()

print(a)    # 출력결과 : [1, 2, 3, 4]

b = ['a', 'c', 'b']
b.sort()

print(b)    # 출력결과 : ['a', 'b', 'c']

(5) 리스트 뒤집기(reverse) : 리스트의 요소를 모두 거꾸로 배치한다.

a = [1, 4, 3, 2]
a.reverse()

print(a)    # 출력결과 : [2, 3, 4, 1]

# 역정렬 : 정렬 후 reverse()
# a.sort().reverse() 하면 AttributeError: 'NoneType' object has no attribute 'reverse' 오류
a.sort()
a.reverse()
print(a)    # 출력결과 : [4, 3, 2, 1]

(6) 인덱스 반환(index)

(7) 요소 삽입(insert)

(8) 요소 제거(remove)

(9) 요소 꺼내기(pop) : 맨 마지막 요소를 삭제한다.

(10) 리스트에 포함된 요소 갯수 세기(count) 

(11) 리스트 확장(extend)

2장 파이썬 프로그래밍의 기초 [자료형] 

 문자열 자료형

 

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

- 큰따옴표( " " )로 둘러싸여 있다.

 

- 이스케이프 코드 : 프로그래밍 할때 사용할 수 있도록 미리 정의해 둔 "문자 조합"

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

 

- 큰따옴표, 작은따옴표 3개를 사용하는 경우

str = "Python 
is
Easy"

위와 같이 줄바꿈을 사용할 경우 "String literal is unterminated" 오류 발생, 이를 해결하기 위해

str = """Python 
is
Easy"""

와 같이 사용한다. 혹은 여러줄 주석처리 할 때도 큰따옴표 3개( """ ) 를 사용한다.

 

- 문자열 연결하기

파이썬에서는 문자열을 더하거나 곱해서 사용할 수 있다.

head = "Python"
tail = "is Fun!"

print("=" * 20)
print(head + tail)
print("=" * 20)

# 출력결과
"""
====================
Pythonis Fun!
====================
"""

 

- 문자열 길이 구하기 (len 함수)

변수 a에 저장된 문자열의 갯수(공백 포함)를 출력한다.

a = "Life is too short"
print(len(a))   # 출력결과 :17

 

- 문자열 인덱싱(Indexing) : 가리킨다

변수 a에 저장한 문자열의 각 문자마다 번호를 매긴다. 번호는 0부터 시작한다. 그래서 index 0번(첫번째) 문자는 'L'이 되고 다음 index 1번(두번째) 문자는 'i' 가 된다. index 10번은 'o', 20번은 'o', 30번은 't' 가 된다. 그리고 index -1번은 문장의 가장 마지막에 있는 'n' 이 출력되는 것을 볼 수 있다.

a = "Life is too short, You need Python"
print(a[0])   # 출력결과 : L
print(a[1])   # 출력결과 : i
print(a[10])   # 출력결과 : o
print(a[-1])   # 출력결과 : n

"""
Life is too short, You need Python
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
0123456789012345678901234567890123
0         1         2         3 
"""

- 문자열 슬라이싱(Slicing) : 자르다

a = "Life is too short, You need Python"
b = a[0] + a[1] + a[2] + a[3]

print(b)    # 출력결과 : Life

위와 같이 단순하게 출력할 수도 있지만 a [ 시작번호 : 끝번호 ] 와 같은 방식으로 출력할 수 있다.

a = "Life is too short, You need Python"
b = a[0:4]

print(b)    	 # 출력결과 : Life
print(a[19:])    # 출력결과 : You need Python
print(a[:17])    # 출력결과 : Life is too short

a[0:4]는 인덱스 0번부터 4번 전까지 출력하라는 의미다. a[7:] 은 인덱스 7번부터 끝까지, a[:20] 은 처음부터 인덱스20번 전까지 출력하라는 의미다.

 

- 문자열 포매팅(Formatting) : 문자열 안에 어떤 값을 삽입하는 방법

 (1) 포맷 코드를 사용

코드 설명
%s 문자열(String)
%c 문자형(Character)
%d 정수(Integer)
%f 부동소수(floating-point)
%o 8진수
%x 16진수
%% Literal % (문자 %)
# 숫자 대입
format1 = "I eat %d apples." % 3
print(format1)  # 출력결과 : I eat 3 apples.

# 문자열 대입
format2 = "I eat %s apples." % "five"
print(format2)  # 출력결과 : I eat five apples.

# 숫자 변수 대입
numbers = 2
format3 = "I eat %d apples." % numbers
print(format3)  # 출력결과 : I eat 2 apples.

# 여러개 변수 대입
number = 10
day = "three"
format4 = "I eat %d apples. so I was sick for %s days." % (number, day)
print(format4)  # 출력결과 : I eat 10 apples. so I was sick for three days.

# %문자 포함
format5 = "Error is %d%%." % 98
print(format5)  # 출력결과 : Error is 98%.

 

 (2) format() 함수 사용 : 문자열 작성 후 .format(data)

# 숫자 대입
format11 = "I eat {0} apples." .format(3)
print(format11)  # 출력결과 : I eat 3 apples.

# 문자열 대입
format22 = "I eat {0} apples." .format("five")
print(format22)  # 출력결과 : I eat five apples.

# 숫자 변수 대입
numbers = 2
format33 = "I eat {0} apples." .format(numbers)
print(format33)  # 출력결과 : I eat 2 apples.

# 여러개 변수 대입
number = 10
day = "three"
format44 = "I eat {0} apples. so I was sick for {1} days." .format(number, day)
print(format44)  # 출력결과 : I eat 10 apples. so I was sick for three days.

 

(3) f 문자열 포매팅 (파이썬 3.6버전 이상 사용가능)

문자열 앞에 f 접두사를 붙이면 f 문자열 포매팅 기능을 사용할 수 있다.

name = '도깨비'
age = 30

print(f'나의 이름은 {name}입니다. 나이는 {age}입니다.')
# 출력결과 : 나의 이름은 도깨비입니다. 나이는 30입니다.

f 문자열 포매팅은 문자열 안에서 변수와 +, -와 같은 수식을 함께 사용하는 표현식을 사용할 수 있다.

age = 30

print(f'나는 내년이면 {age+1}살이 된다.')
# 출력결과 : 나는 내년이면 31살이 된다.

Key와 Value를 한쌍으로 사용하는 딕셔너리도 사용이 가능하다.

d = {'name': '도깨비', 'age': 30}
# var = { 'key' : value }

print(f'나의 이름은 {d["name"]}입니다. 나이는 {d["age"]}입니다.')
# 출력결과 : 나의 이름은 도깨비입니다. 나이는 30입니다.

- 문자열 함수들

(1) 문자 갯수 세기 (count)

 

(2) 위치 알려주기1 (find)

 

(3) 위치 알려주기2 (index)

 

(4) 문자열 삽입 (join)

 

(5) 소문자를 대문자로 (upper)

 

(6) 대문자를 소문자로 (lower)

 

(7) 공백 지우기 (lstrip, rstrip, strip)

 

(8) 문자열 바꾸기 (replace)

 

(9) 문자열 나누기 (split)

 

 

 

 

 

 

2장 파이썬 프로그래밍의 기초 [자료형]  

숫자형(Number) : 숫자 형태로 이루어진 자료형

정수형(Integer) : 정수를 뜻하는 자료형

a = 123
b = -178
c = 0

실수형(Floating-point) : 소숫점이 포함된 숫자

a = 1.2
b = -3.45

컴퓨터식 지수 표현 방식

4.24E10은 4.24∗1010(10의 10승), 4.24e-10은 4.24∗10−10(10의 -10승)을 의미

a = 4.24e10
b = 4.24e-10

print(a)	# 출력결과 : 42400000000.0
print(b)	# 출력결과 : 4.24e-10

- 8진수(Octal) : 숫자가 0o 또는 0O(숫자 0 + 알파벳 소문자 o 또는 대문자 O)로 시작

a = 0o177
print(a)    # 출력결과 : 127

 - 16진수(Hexadecimal) : 0x로 시작

a = 0x8ff
b = 0xABC

print(a)    # 출력결과 : 2303
print(b)    # 출력결과 : 2748

 

※ 파이썬에선 8진수, 16진수, 컴퓨터식 지수표현 방식은 거의 사용하지 않으니 확인만 하고 넘어가면 된다.

 

- 사칙연산 ( 덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/) )

a = 7
b = 4

print(a+b)    # 출력결과 : 11
print(a-b)    # 출력결과 : 3
print(a*b)    # 출력결과 : 28
print(a/b)    # 출력결과 : 1.75

- x의 y제곱 ( xy ) : x ** y

a = 3
b = 4

print(a**b)    # 출력결과 : 81 (3의 4승 => 3 x 3 x 3 x 3)

- 나눗셈 후 목( // ),  나머지 반환 ( % )

a = 7
b = 4

print(a // b)   # 출력결과 : 1
print(a % b)    # 출력결과 : 3

 

+ Recent posts