πŸ“š μŠ€ν„°λ””/파이썬 μŠ€ν„°λ”” κ°•μ˜μžλ£Œ

[3μ°¨μ‹œ/κΉ€κ·œμ˜] 파이썬 μŠ€ν„°λ””-ν•¨μˆ˜μ™€ 문자

μ•Œ 수 μ—†λŠ” μ‚¬μš©μž 2024. 4. 2. 17:44

ν•¨μˆ˜μ™€λ¬Έμžμ—΄_과제.pdf
0.15MB
μˆ˜μ •λ³Έ_3μ°¨μ‹œ_ν•¨μˆ˜μ™€λ¬Έμžμ—΄.pdf
3.91MB

 

*κ°•μ˜ μžλ£Œμ— 였λ₯˜κ°€ λ°œκ²¬λ˜μ–΄ μˆ˜μ •ν–ˆμŠ΅λ‹ˆλ‹€. 4/8 15:13 이전에 λ‹€μš΄λ‘œλ“œ λ°›μœΌμ‹  뢄듀은 μž¬λ‹€μš΄λ‘œλ“œ λΆ€νƒλ“œλ¦½λ‹ˆλ‹€.

3μ°¨μ‹œ κ°•μ˜ μ£Όμ œλŠ” ν•¨μˆ˜μ™€ λ¬Έμžμ—΄μž…λ‹ˆλ‹€.


 

 

[Chapter 01] ν•¨μˆ˜

ν•¨μˆ˜μ˜ κ°œλ…

  • μˆ˜ν•™ 속 ν•¨μˆ˜
  1. νŠΉμ • μˆ˜μ‹μ— x 값을 λŒ€μž…ν•˜λ©΄ y 값이 μ •ν•΄μ§€λŠ” 것
  2. y=f(x) ν‘œν˜„ν•¨.
  • 파이썬 속 ν•¨μˆ˜
  1. ν•¨μˆ˜(function) = μ½”λ“œμ˜ 집합
  2. νŠΉμ • κΈ°λŠ₯을 ν•˜λŠ” μ½”λ“œλ₯Ό λ¬Άμ–΄ λ†“은 κ²ƒ
  • ν•¨μˆ˜μ˜ μ’…λ₯˜
  1. λ‚΄μž₯ ν•¨μˆ˜: νŒŒμ΄μ¬μ—μ„œ 기본으둜 μ œκ³΅ν•˜λŠ” ν•¨μˆ˜, 파이썬 μ„€μΉ˜ ν›„ μ‚¬μš© κ°€λŠ₯
  2. -print(), len() λ“±
  3. μ‚¬μš©μž ν•¨μˆ˜: μ‚¬μš©μžκ°€ ν•„μš”ν•  λ•Œ 직접 λ§Œλ“€μ–΄ μ‚¬μš©

ν•¨μˆ˜μ˜ ν•„μš”μ„±

  1. μ½”λ“œ 재 μ‚¬μš© κ°€λŠ₯→λΆˆν•„μš”ν•œ μ½”λ“œ μ€‘볡 쀄일 수 있음
  2. 가독성 ν–₯상
  3. μœ μ§€ 보수 μš©μ΄→μ½”λ“œ μˆ˜μ • 사항 λ°œμƒ μ‹œ ν•¨μˆ˜λ§Œ μˆ˜μ •

ν•¨μˆ˜μ˜ ꡬ성 μš”μ†Œ

  1. def ν‚€μ›Œλ“œ: definition의 μ•½μžλ‘œ ν•¨μˆ˜λ₯Ό μ •μ˜ν•  λ•Œ μ‚¬μš©ν•¨.
  2. return ν‚€μ›Œλ“œ: ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν–ˆλ˜ μœ„μΉ˜λ‘œ λŒμ•„κ°€κ²Œ 함
  3. ν•¨μˆ˜ μ΄λ¦„: ν•¨μˆ˜μ˜ κΈ°λŠ₯ μœ μΆ”ν•  수 μžˆλŠ” μ΄λ¦„μœΌλ‘œ μ„€μ •
  4. λ§€κ°œλ³€μˆ˜(parameter): ν•¨μˆ˜μ— μ „λ‹¬λœ 데이터λ₯Ό λ°›μ•„ μ €μž₯ν•˜λŠ” λ³€μˆ˜
  5. λ°˜ν™˜κ°’(return value): ν•¨μˆ˜μ˜ κΈ°λŠ₯을 μˆ˜ν–‰ν•œ λ’€ κ²°κ³Όκ°’
def ν•¨μˆ˜ 이름(λ§€κ°œλ³€μˆ˜):      #μ‹€ν–‰λ¬Έμ˜ μ‹œμž‘μ„ λ‚˜νƒ€λ‚΄λŠ” ‘:’
	ν•¨μˆ˜μ˜ κΈ°λŠ₯을 μˆ˜ν–‰ν•  μ½”λ“œ1  #μ‹€ν–‰λ¬Έ λ“€μ—¬μ“°κΈ°
	ν•¨μˆ˜μ˜ κΈ°λŠ₯을 μˆ˜ν–‰ν•  μ½”λ“œ2
	…
	return λ°˜ν™˜κ°’
  • λ§€κ°œλ³€μˆ˜λŠ” ‘인수’라고도 ν•˜λ©°, λ§€κ°œλ³€μˆ˜κ°€ μžˆλŠ” ν•¨μˆ˜λ„ 있고, μ—†λŠ” ν•¨μˆ˜λ„ 있음.
  • λ°˜ν™˜κ°’μ΄ μžˆλŠ” ν•¨μˆ˜λ„ 있고, μ—†λŠ” ν•¨μˆ˜λ„ 있음.
  • λ°˜ν™˜κ°’κ³Ό λ§ˆμ°¬κ°€μ§€λ‘œ return ν‚€μ›Œλ“œλ„ λ°˜λ“œμ‹œ μ‚¬μš©ν•΄μ•Ό ν•˜λŠ” 것은 μ•„λ‹ˆλ©°, ν˜ΈμΆœλΆ€λ‘œ λŒλ €μ€˜μ•Ό ν•˜λŠ” 데이터가 μžˆλŠ” κ²½μš°μ—λ§Œ μ‚¬μš©

→ 각 μš”μ†Œκ°€ μžˆλŠ” ν•¨μˆ˜, μ—†λŠ” ν•¨μˆ˜μ˜ μ°¨μ΄λŠ” λ’€μ—μ„œ 더 μžμ„Ένžˆ!

ν•¨μˆ˜λͺ… μ§€μ„ λ•Œ μœ μ˜ 사항

  1. λ‚΄μž₯ ν•¨μˆ˜λͺ…κ³Ό λ™μΌν•˜λ©΄ μ•ˆλ¨.
  2. 첫 κΈ€μžλŠ”  μˆ«μž μ‚¬μš© λΆˆκ°€
  3. 특수 λ¬ΈμžλŠ” μ–Έλ”λ°”(_)만 μ‚¬μš© κ°€λŠ₯
  4. 첫 κΈ€μžλŠ” μ†Œλ¬Έμž μ‚¬μš© κΆŒμž₯

ν•¨μˆ˜ μ„ μ–Έ 및 ν˜ΈμΆœν•˜κΈ°

plus() ν•¨μˆ˜ λ§Œλ“€κ³  ν˜ΈμΆœν•˜κΈ°

#ν•¨μˆ˜ μ„ μ–Έ λΆ€λΆ„ (μ‹€ν–‰λ˜μ§€ μ•ŠλŠ”λ‹€)
def plus(v1, v2): #v1, v2λŠ” λ§€κ°œλ³€μˆ˜
	result = v1 + v2
	return result #λ°˜ν™˜
	
#메인 μ½”λ“œ λΆ€λΆ„
hap = plus(100, 200) 
print("100κ³Ό 200의 plus() ν•¨μˆ˜ κ²°κ³ΌλŠ”", hap) #plus() ν•¨μˆ˜μ—μ„œ λ°˜ν™˜λœ κ°’ 좜λ ₯

πŸ’‘ 100κ³Ό 200의 plus() ν•¨μˆ˜ κ²°κ³ΌλŠ” 300

 

ν•¨μˆ˜ μš”μ†Œ 유무 차이

  • ν•¨μˆ˜ μ€‘μ—λŠ” λ§€κ°œλ³€μˆ˜λ‚˜ λ°˜ν™˜κ°’μ΄ μ—†λŠ” ν•¨μˆ˜λ„ 있음.

def a_rectangle_area(): #λ§€κ°œλ³€μˆ˜ x, λ°˜ν™˜κ°’ x
	print(5 * 7)
def b_rectangle_area(x, y): #λ§€κ°œλ³€μˆ˜ O, λ°˜ν™˜κ°’ x
	print(x * y)
def c_rectangle_area(): #λ§€κ°œλ³€μˆ˜ x, λ°˜ν™˜κ°’ O
	return(5 * 7)
def d_rectangle_area(x, y): #λ§€κ°œλ³€μˆ˜ O, λ°˜ν™˜κ°’ O
	return(x * y)
	
 a_rectangle_area()
 b_rectangle_area(5, 7)
 print(c_rectangle_area())
 print(d_rectangle_area(5, 7))

πŸ’‘ 35
      35

      35

      35

리턴

  • λ°˜ν™˜κ°’(return value): ν•¨μˆ˜μ˜ κ²°κ³Ό
  • 자료 없이 λ¦¬ν„΄ν•˜κΈ°
def return_test():
	print("A μœ„μΉ˜μž…λ‹ˆλ‹€.")
	return #리턴
	print("B μœ„μΉ˜μž…λ‹ˆλ‹€.")
	
return_test() #ν•¨μˆ˜ 호좜

πŸ’‘ A μœ„μΉ˜μž…λ‹ˆλ‹€.

  • μžλ£Œμ™€ ν•¨κ»˜ λ¦¬ν„΄ν•˜κΈ°
def return_test():
	return 100 #자료 가지고 리턴
	
value = return_test()
print(value)

πŸ’‘ 100

  • 리턴할 값이 μ—†μœΌλ©΄ ν•¨μˆ˜λŠ” ‘None’을 λ°˜ν™˜ν•œλ‹€. ‘μ—†λ‹€’ λΌλŠ” μ˜λ―Έμ΄λ‹€.

λ³€μˆ˜μ˜ μ’…λ₯˜

  • λ³€μˆ˜κ°€ μ½”λ“œμ—μ„œ μ‚¬μš©λ˜λŠ” λ²”μœ„μ— 따라 두 μ’…λ₯˜λ‘œ λ‚˜λˆŒ 수 μžˆλ‹€.
  1. 지역 λ³€μˆ˜(local variable): ν•¨μˆ˜ λ‚΄μ—μ„œ μ„ μ–Έ. ν•¨μˆ˜ μ•ˆμ—μ„œλ§Œ μ‚¬μš© κ°€λŠ₯
  2. μ „μ—­ λ³€μˆ˜(global variable): ν•¨μˆ˜ μ™Έμ—μ„œ μ„ μ–Έ. ν”„λ‘œκ·Έλž¨ μ „μ²΄μ—μ„œ μ‚¬μš© κ°€λŠ₯
num = 10 #μ „μ—­λ³€μˆ˜ num μ„ μ–Έ

#ν•¨μˆ˜ μ •μ˜
def fun1():
	num = 20 #μ§€μ—­λ³€μˆ˜ num μ„ μ–Έ
	print('num: ', num) #μ§€μ—­λ³€μˆ˜ num μ‚¬μš©(ν•¨μˆ˜ μ•ˆμ—μ„œ num을 λ¨Όμ € μ°ΎλŠ”λ‹€.)

print('num: ', num) #μ „μ—­λ³€μˆ˜ num μ‚¬μš©
fun1()

πŸ’‘ num: 10 #μ „μ—­λ³€μˆ˜ num 좜λ ₯

      num: 20 #μ§€μ—­λ³€μˆ˜ num 좜λ ₯

  • global ν‚€μ›Œλ“œ: μ „μ—­λ³€μˆ˜μ— 접근함. 즉 ‘global num’은 μ „μ—­λ³€μˆ˜ num을 λœ»ν•¨.
num = 10

def fun1():
	global num
	num = 20
	print('num: ', num)
	
print('num: ', num)
fun1()
print('num: ', num)

πŸ’‘ num: 10

      num: 20

     num: 20

 

쀑첩(Nested) ν•¨μˆ˜

  • ν•¨μˆ˜ μ•ˆμ— μ •μ˜λœ 또 λ‹€λ₯Έ ν•¨μˆ˜
  • μ£Όμ˜ν•  점: 내뢀에 μ •μ˜λ˜μ–΄ μžˆλŠ” 쀑첩 ν•¨μˆ˜λŠ” μžμ‹ μ„ ν¬ν•¨ν•˜κ³  μžˆλŠ” ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œλ§Œ ν˜ΈμΆœν•  수 있으며, μ™ΈλΆ€μ—μ„œλŠ” ν˜ΈμΆœν•  수 μ—†μŒ.
def divFuntion(n1, n2): #μ™ΈλΆ€ ν•¨μˆ˜ μ •μ˜
	
	def divOperator(num1, num2): #쀑첩 ν•¨μˆ˜ μ •μ˜
		return num1/num2
	
	if n2 != 0:
		result = divOperator(n1, n2)
	elif n2 == 0:
		result = '0으둜 λ‚˜λˆŒ 수 μ—†μŠ΅λ‹ˆλ‹€.'
	
	return result
	
print(divFuntion(10, 0))
print(divFuntion(10, 2))	
print(divOperator(10, 2)) #쀑첩 ν•¨μˆ˜λ₯Ό μ™ΈλΆ€μ—μ„œ 호좜

πŸ’‘ 0으둜 λ‚˜λˆŒ 수 μ—†μŠ΅λ‹ˆλ‹€.

      5.0

      Error

 

μž¬κ·€(Recursive) ν•¨μˆ˜

  • ν•¨μˆ˜ μ•ˆμ—μ„œ μžμ‹ μ„ λ‹€μ‹œ ν˜ΈμΆœν•˜λŠ” ν•¨μˆ˜
  • μž¬κ·€ ν•¨μˆ˜λŠ” μžμ‹  μ•ˆμ—μ„œ 자기 μžμ‹ μ„ 계속 ν˜ΈμΆœν•˜λ―€λ‘œ ν•¨μˆ˜ ν˜ΈμΆœμ„ μ’…λ£Œν•  수 μžˆλŠ” μ½”λ“œκ°€ ν•„μˆ˜
def add(num):
	if num > 0:
		print('num: ', num)
		add(num - 1) #자기 μžμ‹ μ„ λ‹€μ‹œ 호좜
	
add(3)

πŸ’‘ num: 3

      num: 2

      num: 1

 

λ§€κ°œλ³€μˆ˜μ˜ κ°œλ…

  • ν•¨μˆ˜λŠ” μ •μ˜λΆ€(ν•¨μˆ˜λ₯Ό μ •μ˜ν•˜λŠ” μͺ½)와 ν˜ΈμΆœλΆ€(ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λ €κ³  ν˜ΈμΆœν•˜λŠ” μͺ½)둜 λ‚˜λ‰œλ‹€.
  • 인수: ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  λ•Œ λ„˜κ²¨μ£ΌλŠ” 데이터(=λ§€κ°œκ°’)
  • λ§€κ°œλ³€μˆ˜: ν•¨μˆ˜ ν˜ΈμΆœλΆ€μ—μ„œ λ„˜κΈ΄ 인수λ₯Ό ν•¨μˆ˜ μ •μ˜λΆ€μ—μ„œ λ°›μ•„ μ €μž₯ν•˜λŠ” λ³€μˆ˜
  • ν•¨μˆ˜ ν˜ΈμΆœλΆ€μ—μ„œ μ „λ‹¬ν•œ μΈμˆ˜κ°€ 두 개 이상일 μ‹œ, λ§€κ°œλ³€μˆ˜λŠ” ν˜ΈμΆœλΆ€μ—μ„œ μ „λ‹¬ν•˜λŠ” 인수의 κ°œμˆ˜μ™€ μˆœμ„œμ— λ§žμΆ°μ„œ μ„ μ–Έ
def plus(n1, n2): #n1, n2λŠ” λ§€κ°œλ³€μˆ˜
	result = n1 + n2
	print(result)
	
plus(100, 200) #100, 200은 각각 n1, n2에 λŒ€μ‘ν•˜λŠ” 인수

πŸ’‘ 300

 

νŒŒμ΄μ¬μ—μ„œ 인수 μ‚¬μš© 방법

  1. ν‚€μ›Œλ“œ 인수: λ§€κ°œλ³€μˆ˜μ˜ λ³€μˆ˜λͺ…을 μ‚¬μš©ν•˜μ—¬ ν•¨μˆ˜μ˜ 인수λ₯Ό μ§€μ •ν•˜λŠ” 방법
def divide(n1, n2):
	result = n1/n2
	print(result)

divide(100, 200)
divide(200, 100)
divide(n2=200, n1=100)

πŸ’‘ 0.5

      2.0

      0.5

 

2. λ””ν΄νŠΈ 인수: 별도 μΈμˆ˜κ°€ μž…λ ₯λ˜μ§€ μ•Šμ„ λ•Œ 미리 μ§€μ •ν•œ μ΄ˆκΉƒκ°’ μ‚¬μš©ν•˜λŠ” 방법

  • 단 λ””ν΄νŠΈ λ§€κ°œλ³€μˆ˜ λ’€μ—λŠ” 일반 맀개 λ³€μˆ˜κ°€ 올 수 μ—†μŒ
def divide(n1, n2 = 200):
	result = n1/n2
	print(result)

divide(100, 200)
divide(100)

πŸ’‘ 0.5

      0.5

 

3. κ°€λ³€ 인수: 미리 μ§€μ •ν•œ λ³€μˆ˜ 이외 μΆ”κ°€λ‘œ 인수λ₯Ό μ›ν•˜λŠ” 만큼 μž…λ ₯ν•  수 있게 함

  • ‘*’ 기호 μ΄μš©ν•¨.
  • 단 κ°€λ³€ λ§€κ°œλ³€μˆ˜ λ’€μ—λŠ” 일반 λ§€κ°œλ³€μˆ˜κ°€ 올 수 μ—†μŒ
  • κ°€λ³€ λ§€κ°œλ³€μˆ˜λŠ” ν•˜λ‚˜λ§Œ μ‚¬μš©ν•  수 있음
def plus(n1, n2, *num): #num이 κ°€λ³€ 인수
	result = n1 + n2 + sum(num) #sum() ν•¨μˆ˜: 리슀트의 합을 ꡬ함
	print(result)
	
plus(1, 2, 3, 4, 5)

πŸ’‘ 15

 

4. ν‚€μ›Œλ“œ κ°€λ³€ 인수: λ§€κ°œλ³€μˆ˜μ˜ 이름을 λ”°λ‘œ μ§€μ •ν•˜μ§€ μ•Šκ³  μž…λ ₯ν•˜λŠ” 방법

def introduce(**name):  #name이 ν‚€μ›Œλ“œ κ°€λ³€ 인수
    print(name)
    print("my name is {my_name}".format(**name))
    print("your name is {your_name}".format(**name))

introduce(my_name = "Kim", your_name = "Lee")

πŸ’‘ {'my_name': 'Kim', 'your_name': 'Lee'}

      my name is Kim

      your name is Lee

  • λ””ν΄νŠΈ λ§€κ°œλ³€μˆ˜κ°€ κ°€λ³€ λ§€κ°œλ³€μˆ˜λ³΄λ‹€ μ•žμ— 올 λ•Œ: λ””ν΄νŠΈ λ§€κ°œλ³€μˆ˜μ˜ μ˜λ―Έκ°€ 사라짐
  • κ°€λ³€ λ§€κ°œλ³€μˆ˜κ°€ λ””ν΄νŠΈ λ§€κ°œλ³€μˆ˜λ³΄λ‹€ μ•žμ— 올 λ•Œ: κ°€λ³€ λ§€κ°œλ³€μˆ˜κ°€ μš°μ„ λ¨

 

πŸ“š λ‚΄μš©μ΄ λ§Žμ€ κ΄€κ³„λ‘œ μ€„μž…λ‹ˆλ‹€. λ‚˜λ¨Έμ§€ λ‚΄μš©μ€ μ²¨λΆ€ν•œ κ°•μ˜μ•ˆ pdf 파일둜 ν™•μΈν•΄μ£Όμ‹œκΈΈ λ°”λžλ‹ˆλ‹€.