[네이버 부스트코스]프로그래밍 기초 ft.파이썬 3차시 : 변수와 기초 자료형
[학습 목표]
1. 객체(object)와 형태(type)를 이해
2. 변수(variables) 이해
3. 연산자를 통한 식 이해하고 작성
4. 기초 자료 구조인 튜플 이해하고 작성
5. 튜프를 이용한 디지털 사진 변환
#1. 객체
: python 프로그램에서 사용하는 각각의 데이터
객체의 크기는 아주 작을 수도 있고 매우 클 수도 있다
-형태
: 모든 객체는 형태를 가지고 있다
형태는 객체를 이용해 할 수 있는 일을 결정한다.
cf. Python 동물원
객체 = 동물
형태 = 동물의 종류
-객체 생성
1)숫자(integer) : 숫자 그대로 적는다
ex. 정수, 실수 가능
2)문자열(string): "문자열"
ex. "CS101", '1'(숫자 1이 아닌 문자열 1)
3)논리값(Boolean): True 또는 False
4)복잡한 객체: 객체를 만드는 함수를 부르는 방법
ex. from cs1robots import *
Robot()
5)튜플(Tuple): 다른 객체들을 포함하는 객체
-> 여러 객체들을 쉼표(,)를 사이에 두고 적어서 만들 수 있다.
ex. (20101000, "String") -> 종류가 같은, 다른 데이터 여럿으로 생성 가능
#2. 형태
-모든 객체는 형태를 가지고 있다.
-객체의 형태는 객체가 할 수 있는 일과 객체를 이용해서 할 수 있는 일을 결정합니다.
ex. 두 숫자는 더할 수 있지만 두 로봇을 더할 수 없다.
-객체의 형태 알아보는 방법: type(객체) -> <class '타입'>
ex. 정수: int, 실수: float, 문자열: str, 복소수: complex, 논리값: bool, 튜플: tuple
이외: cs1robots.Robot, cs1media.Picture
#3. 변수
-객체 등에게 주는 이름
-변수에 대입된 객체는 변수의 값
-변수의 값은 바뀔 수 있다
-변수 = 값 [대입문] ex. n = 17, n = "girl", n = None
-None은 '비었다'는 의미의 특별한 객체 : type(n) -> <class 'NoneType'>
cf. python 동물원에서 이름은 동물 우리 앞의 팻말
#4.멤버변수
객체가 할 수 있는 일은 객체의 형태에 따라 결정.
객체는 멤버 함수(method)를 통해 이러한 일들을 할 수 있다.
객체 안에 함수이름이 key, 명령이 value로 있다.
멤버 함수는 점(.)연산자를 통해 실행할 수 있다.
=> 객체. 함수이름()
ex. hubo.move()
#5.여러 이름을 가진 객체
하나의 객체는 여러 이름을 가질 수 있다.
hubo = Robot("yellow")
hubo.move()
ami = hubo
hubo = Robot("blue")
hubo.move()
ami.turn_left()
ami.move()
-> hubo 값을 ami에 넣으니까 ami=hubo=노란 로봇
-> hubo의 파란색으로 값이 변했지만 ami는 따로 안 바꿨으므로 노란색
#6.연산자
: +, _, *, /, //, %, **
**: 거듭제곱 연산
ex. 2**5 = 32
%: 나눗셈의 나머지 연산
ex. 7%3 => 1
//: 정수 나눗셈(소수 부분을 제외한 나눗셈) 연산 (몫)
#7. 식
: 객체, 변수, 연산자, 함수 호출의 조합
-연산자는 우선순위에 따라 적용
1)거듭제곱 : **
2)곱셈, 나눗셈: *, / , //, %
3)덧셈, 뺄셈: +,-
-> 순서가 헷갈리면 괄호를 이용해 우선 순위 둘 수 있음
-> 모든 연산자는 복소수에서도 사용 가능
-> +, *는 문자열에서도 사용 가능
ex. "CS101 " * 8 = "CS101 CS101 CS101 CS101 ... CS101 "
-논리식
: 계산 결과가 논리값인 식
-> if, while문에서 사용
-> 다음 연산자들의 연산 결과: ==, !=, <, >, <=, >=
-> 답이 True, False로 나온다
-논리 연산자
: not, and, or
- and
: 하나라도 false면 false
-or
: 하나라도 true면 true
=> 그러므로 왼쪽 값으로 연산의 결과가 결정되면 논리 연산자 오른쪽 값을 계산하지 않는다.
#8. 튜플
: 다른 객체들을 포함하는 객체
-> tuple 형태를 가진 하나의 객체
-> 튜플이 포함하는 객체는 풀 수 있다.
ex. x,y,z = position
-> 값을 한번에 풀고 다시 묶으려면
ex. a,b = ("aa", "bb")
a,b = b,a
print(b) = aa
#9. 튜플로 사진 변환
1)색
색은 3개의 값을 가진 튜플로 표현됩니다.
이 튜플이 가진 3개의 값들은 해당 색의 빨간색, 초록색, 파란색 세기/강도를 의미합니다.
red = (255, 0, 0)
blue = (0, 0, 255)
white = (255, 255, 255)
black = (0, 0, 0)
yellow = (255, 255, 0)
purple = (128, 0, 128)
from cs1media import * img = create_picture(100, 100, purple) img.show() img.set_pixels(yellow) img.show()
너비 w 픽셀, 높이 h 픽셀을 가진 디지털 이미지는
h개의 행과 w개의 열을 가진 직사각형 행렬로 표현됩니다.
이미지의 각 픽셀은 행렬의 x와 y좌표를 이용해서 접근할 수 있습니다.
x좌표의 범위는 0부터 w-1까지, y좌표의 범위는 0부터 h-1까지 입니다.
for 반복문
for 반복문은 변수에 정수 값을 대입합니다.
이미지 반전
from cs1media import * img = load_picture("../photos/geowi.jpg")
w, h = img.size() -> 이미지의 크기를 구한다
for y in range(h):
for x in range(w):
r, g, b = img.get(x, y) -> 각 픽셀의 색을 구한다 (get)
r, g, b = 255 - r, 255 - g, 255 - b -> 픽셀마다 컬러 반전
img.set(x, y, (r, g, b))
img.show()
이미지 흑백 변환
=> 임의로 정한 한계를 넘으면 흰색, 안 넘으면 검은색
함수를 이용한 이미지 흑백 변환
white = (255, 255, 255)
black = (0, 0, 0)
def blackwhite(img, threshold):
w, h = img.size()
for y in range(h):
for x in range(w):
v = luma(img.get(x, y))
if v > threshold:
img.set(x, y, white)
else:
img.set(x, y, black)
pict = load_picture("../photos/yuna1.jpg")
blackwhite(pict, 100) pict.show()