코드를 묶는 3가지의 방법
- 함수는 우리가 반복적으로 사용하는 코드를 묶은 것이다
- 객체(object)는 서로 관련있는 변수와 함수를 묶는 방법이다.
- 모듈(module)은 함수나 객체들을 소스파일 안에 모은 것이다.
함수(function) : 특정 작업을 수행하는 명령어들의 모음에 이름을 붙인 것.
- 함수는 작업에 필요한 데이터를 전달받을 수 있으며, 작업이 완료된 후에는 작업의 결과를 호출자에게 반환할 수 있다.
- 동일한 처리를 반복해야 하는 경우 이미 작성한 코드를 재활용하여 사용할 수 있다.
함수 정의
def 함수이름(매개변수1, 매개변수2, ...):
명령문1
명령문2
def get_area(radius) :
area = 3.14*radius**2
return area
함수 호출
인수, 리턴값
1
2
3
4
5
6
|
def get_Area(radius):
area = 3.14*radius**2
return area ##값 반환하기
result = get_area(3) ## 인수3 전달
print("반지름이 3인 원의 면적=", result)
|
cs |
여러 개의 값 반환하기
파이썬에서는 함수가 여러개의 값을 반환할 수 있다.
1
2
3
4
|
def get_input():
return 2,3
x,y=get_input() #x는 2이고 y는 3이다.
|
cs |
함수의 순서
파이썬은 인터프리트 언어이기 때문에 함수의 순서가 중요하다. 함수가 사용되기전 정의되어야 한다. 그러나 함수내에서는 아직 정의되지 않은 함수를 호출할 수는 있다.
#1 피자크기비교문제
원의 반지름을 받아서 피자의 면적을 계산하는 함수를 작성해서 사용해보자.
1
2
3
4
5
6
7
8
9
|
def getArea(rad):
result = 3.14*rad**2
return result
rad1=int(input("피자의 반지름을 적으세요 : "))
num=int(input("피자의 갯수를 적으세요 : "))
result = getArea(rad1)*num
print(result)
|
cs |
서로 다른 인수로 호출될 수 있다.
1
2
3
4
5
6
7
8
9
10
11
|
def get_sum(start, end):
sum = 0
for i in range(start, end+1):
sum += i
return sum
# 1과 10이 get_sum()의 인수가 된다.
x = get_sum(1, 10)
# 1과 20이 get_sum()의 인수가 된다.
y = get_sum(1, 20);
|
cs |
디폴트 인수
파이썬에서는 함수의 매개변수가 기본값을 가질 수 있다. 이것을 디폴트 인수라고 한다.
1
2
3
4
|
def greet(name, msg="별일없죠?"):
print("안녕 ", name + ', ' + msg)
greet("영희")
|
cs |
키워드 인수
키워드 인수는 인수의 이름을 명시적으로 지정해서 값을 매개변수로 전달하는 방법
1
2
3
4
5
6
7
|
def sub(x, y, z):
print("x=", x, "y=", y, "z=", z)
sub(10,20,30) #x= 10 y= 20 z= 30
sub(x=10,y=20,z=30) #x= 10 y= 20 z= 30
sub(x=10,20,30) #SyntaxError: positional argument follows keyword argument
sub(10,y=20,z=30) #x= 10 y= 20 z= 30
|
cs |
가변 인수
가변 인자를 사용하면 함수에 인수 한 개를 넣을 수도 있고, 열 개를 넣을 수도 있다. 또는, 인수를 넣지 않을 수도 있다.
1
2
3
4
5
6
7
8
|
def varfunc(*args ):
print (args)
print("하나의 값으로 호출")
varfunc(10) #하나의 값으로 호출 (10,)
print("여러 개의 값으로 호출")
varfunc(10, 20, 30) #여러 개의 값으로 호출 (10, 20, 30)
|
cs |
1
2
3
4
5
6
7
8
|
def add(*numbers) :
sum = 0
for n in numbers:
sum = sum + n
return sum
print(add(10, 20)) #30
print(add(10, 20, 30)) #60
|
cs |
매개 변수 이름 앞에 이중별표(**)를 사용하여 가변 길이 키워드 인수를 나타낸다. 인수는 딕셔너리 형태로 전달된다.
1
2
3
4
5
6
7
8
|
def myfunc(**kwargs):
result = ""
for arg in kwargs.values():
result += arg
return result
print(myfunc(a="Hi!", b="Mr.", c="Kim"))
|
cs |
가변길이변수 함수에서 넘겨받을시 배열인가??
*연산자로 언패킹하기
단일 별표 연산자 *는 파이썬이 제공하는 모든 반복 가능한 객체(iterable)을 언패킹할 수 있고 이중 별표 연산자 **는 딕셔너리 객체를 언패킹할 수 있다.
1
2
3
4
5
6
7
|
alist = [ 1 , 2 , 3 ]
print(*alist)
#1 2 3
alist = [ 1 , 2 , 3 ]
print(alist)
#[1, 2, 3]
|
cs |
1
2
3
4
5
6
|
def sum(a, b, c):
print(a + b + c)
alist = [1, 2, 3]
sum(*alist)
#6
|
cs |
#2 환영 문자열 출력 함수
전광판에 “환영합니다” 문자열을 여러 번 출력하는 함수 display(msg, count)를 작성
1
2
3
4
5
|
def display(count, msg ="환영합니다."):
for i in range(count):
print(msg)
display(5)
|
cs |
1
2
3
4
5
|
def display(msg, count=1) :
for k in range(count) :
print(msg)
display("환영합니다.", 5)
|
cs |
#3 이분법
구간 [a, b]에서 f(a)f(b) < 0이라고 하자. f(a)f(b) < 0이면 함수 f는 반드시 구간 [a,b]에서 근을 가져야 한다. 계속해서 a와 b의 중간값 m=(a+b)/2을 계산하고, 함수 f(m)의 값을 계산한다. f(a)f(m) < 0이면 근은 [a, m] 사이에 있고, 그렇지 않으면 근은 [m, b] 구간에 있을 것이다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
def f(x):
return(x**2-x-1)
def bisection_method(a,b,error):
if f(a)*f(b)>0:
print("구간에서 근을 찾을 수 없습니다")
else:
while(b-a)/2.0>error: #오차 계산
midpoint = (a+b)/2.0
if f(midpoint)==0:
return midpoint
elif f(a)*f(midpoint)<0: #근이 a, m사이에 있다
b=midpoint
else: #근이 b, m사이에 있다
a=midpoint
return(midpoint)
answer = bisection_method(1,2,0.0001)
print("x**2-x-1의 근", answer)
|
cs |
#4 주급계산 프로그램
값 반환하기
- 모든 경우에 값을 반환하는 것이 좋다
- 파이썬에서는 함수가 하나 이상의 값도 반환할 수 있다.
#5 여러개의 값 반환
사용자로부터 이름과 나이를 입력받아서 동시에 반환하는 함수를 작성
1
2
3
4
5
6
7
|
def get():
name = input("이름 : ")
age = int(input("나이 : "))
return name, age;
name, age = get()
print("이름은 ", name, "이고 나이는", age, "살입니다.")
|
cs |
#6 사각형을 그리는 함수 작성하기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
import turtle
t=turtle.Turtle()
t.shape("turtle")
def drawSq(length):
t.down()
for i in range(4):
t.forward(length)
t.left(90)
t.up()
drawSq(100)
t.forward(120)
drawSq(100)
t.forward(120)
|
cs |
#7 구조화 프로그래밍 실습
1. 섭씨 온도->화씨 온도
2. 화씨 온도->섭씨 온도
3. 종료
메뉴를 선택하세요: 1
섭씨 온도를 입력하시오: 37.0
화씨 온도 = 98.6
1. 섭씨 온도->화씨 온도
2. 화씨 온도->섭씨 온도
3. 종료
메뉴를 선택하세요: 3
순환호출
순환이란 어떤 알고리즘이나 함수가 자기 자신을 호출하여 문제를 해결하는 프로그래밍 기법이다.
예제) 팩토리얼 계산 프로그램
1
2
3
4
5
6
7
8
9
|
def factorial(n):
if n == 1 :
return(1)
else:
return n * factorial(n-1)
n = eval(input("정수를 입력하시오:"))
print(n, "!= ", factorial(n))
|
cs |
#8 프랙탈 그래픽
순환적으로 나무를 그리는 프랙탈(fractal) 프로그램을 작성
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
import turtle
t=turtle.Turtle()
def drawTree(branch, t):
if branch>5:
t.forward(branch)
t.right(20)
drawTree(branch-15,t)
t.left(40)
drawTree(branch-15,t)
t.right(20)
t.backward(branch)
def main():
t.left(90)
t.up()
t.backward(200)
t.down()
t.color("green")
drawTree(100,t)
main()
|
cs |
변수의 범위
- 지역 변수 : 지역변수는 함수마다 동일한 이름을 사용할 수 있다.
- 전역 변수 : 전역변수는 함수안에서 변경되지 않는다. 함수안에서 변수에 값을 저장하면 새로운 지역변수가 생성된다.
1
2
3
4
5
6
7
8
|
gx = 100
def myfunc() :
gx = 200
print(gx) #200
myfunc()
print(gx) #100
|
cs |
- 함수안에서 전역변수 변경하기
1
2
3
4
5
6
7
8
9
10
|
gx = 100
def myfunc():
global gx # 전역 변수 gx를 사용한다.
gx = 200
print(gx) #200
myfunc()
print(gx) #200
|
cs |
#9 함수 그리기
함수 f(x)=x^2+1을 계산하는 함수를 작성하고 이 함수를 이용하여 화면에 f(x)를 그려보자
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
import turtle
t=turtle.Turtle()
t.shape("turtle")
t.speed(0)
def f(x):
return x**2+1
t.goto(200,0)
t.goto(0,0)
t.goto(0,200)
t.goto(0,0)
for x in range(150):
t.goto(x,int(0.01*f(x)))
|
cs |
#10 막대 그래프 그리기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
import turtle
def drawBar(height):
t.begin_fill()
t.left(90)
t.forward(height)
t.write(str(height), font = ('Times New Roman', 16, 'bold'))
t.right(90)
t.forward(40)
t.right(90)
t.forward(height)
t.left(90)
t.end_fill()
data = [120, 56, 309, 220, 156, 23, 98]
t = turtle.Turtle()
t.color("blue")
t.fillcolor("red")
t.pensize(3)
for d in data:
drawBar(d)
turtle.mainloop()
turtle.bye()
|
cs |
'Python' 카테고리의 다른 글
input() (0) | 2022.10.06 |
---|---|
[6장] 파이썬 자료구조_리스트 (0) | 2022.10.06 |
[jupyter notebook] 2장 (0) | 2022.04.20 |
[jupyter notebook] 1장 (0) | 2022.04.20 |
[jupyter notebook] 파이썬 기초2 (0) | 2022.04.14 |