대학교

파이썬 - (4) 튜플, 함수

매 석 2023. 10. 15. 22:11
반응형

튜플

다른 타입의 객체를 포함하는 객체

연속적으로 나열된 객체를 표현한다.

EX) A=(1,2,3)

A=1,2,3

A=(1,2,True)

 

튜플 활용

from cs1media import *

yellow = (255, 255, 0)

img = load_picture("./cs101_students.jpg")
img.show()

img.set(29, 30, yellow)
img.set(30, 30, yellow)
img.set(31, 30, yellow)
img.set(30, 29, yellow)
img.set(30, 31, yellow)

w, h = img.size()
for i in range(w):
  img.set(i, h/5, yellow)
  img.set(i, h/5-1, yellow)
  img.set(i, h/5+1, yellow)

img.show()

위는 yellow를 튜플로 사용해서 RGB값을 넘겨 set함수로 w,h,color를

img에 적용할 수 있게 한다. 즉 튜플로 간단하게 여러 매개값을 함수에 보낼 수 있다.

 

실습

from cs1media import *

threshold_1= 150
threshold_2= 50
yellow=(255,255,0)
green=(0,255,0)
blue=(0,0,255)

img = load_picture("sonny.jpg")

w,h = img.size()

for x in range(w):
    for y in range(h):
        r,g,b = img.get(x,y)
        v= r+g+b//3
        if v>threshold_1:
            img.set(x,y,yellow)
        elif threshold_2 < v <= threshold_1:
            img.set(x,y,green)
        else:
            img.set(x,y,blue)

img.show()

 

우선 튜플로 yellow, green, blue에 맞는 RGB값을 저장해준다.

이후 모든 W,H의 좌표값을 하나하나 특정변수와 비교하여 yellow, green, blue로 바꿔준다.

 

함수

파라미터는 함수를 호출할 때 파라미터에 값을 대입하여 사용한다.

이 값을 인수라고 한다. 이후에 함수에서 정의한 반환값을 반환하여 다시 main으로 돌려줄 수 있다

위에서 amount, rate, years를 파라미터라고 하고, return은 반환을 의미한다.

이를 main에서 함수로 호출할 때 입력하는 값을 인수라고 한다.

반환은 여러 번 쓸 수 있지만 반환하게 되면 함수가 종료된다.

또한 반환값은 튜플을 사용하면 여러 값을 반환할 수 있다.

 

실습

import time
from cs1robots import *
load_world("./worlds/add1.wld")
hubo = Robot()
cnt=0
ans=0
def turn_right(robot):
 for i in range(3):
  robot.turn_left()
def move():
    while(1):
        if not hubo.front_is_clear():
            break
        hubo.move()
def pick_up(cnt):
    cnt=0
    while(1):
        if hubo.on_beeper():
            hubo.pick_beeper()
            cnt+=1
        else:
            turn_right(hubo)
            hubo.move()
            break
    return cnt
def pick_down(cnt,ans):
    while(1):
        if hubo.on_beeper():
            hubo.pick_beeper()
            cnt+=1
        else:
            break
    if ans!=0:
        cnt+=ans
        ans=0
    if cnt>=10:
        cnt-=10
        ans+=1
    for _ in range(cnt):
        hubo.drop_beeper()
    hubo.turn_left()
    hubo.turn_left()
    hubo.move()
    hubo.turn_left()
    hubo.move()
    hubo.turn_left()
    hubo.turn_left()
    return ans

hubo.turn_left()
hubo.move()
turn_right(hubo)
move()
for _ in range(5):
    cnt = pick_up(cnt)
    ans= pick_down(cnt,ans)