파이썬을 공부해봅니다_5

파이썬의 기초과정
https://steemit.com/kufmba/@grooveflow/1

파이썬 구조 또는 명령어 익히기 시작
https://steemit.com/kufmba/@grooveflow/2

파이썬 Data type 의 이해
https://steemit.com/kufmba/@grooveflow/3

파이썬의 객체에 대한 이해 + 연습문제
https://steemit.com/kufmba/@grooveflow/4

앞시간까지 해서 파이썬의 객체에 대한 이해 및 배운 내용 기반의 연습문제를 풀어보았습니다.

이번 시간에는 파이썬의 함수에 대해 공부해봅니다.
기본을 어느 정도 다져놓았으니 쑥쑥 이해되길 바래봅니다.
(Lecture Note의 39페이지입니다.)

파이썬의 함수란, 수학의 함수와 비슷하며, 변수를 받지만 항상 그런 것은 아니고, 변수를 계산하는 과정 등 을 통해 결과값을 도출한다....라는 내용이네요.
함수를 만드는 방법은

> def 함수명(변수1, 변수2..)
      문장
      결과 도출 명령

예를 들면

> def sum(x,y):          #함수명 sum(x,y)를 정의합니다.
      s=x+y              #x와 y를 입력하면 s에 서로 더합니다.
      return s           #s를 결과값으로 도출합니다.

로 만들 수 있습니다.

즉 sum(x,y)라는 함수를 만들었습니다.
이 함수를 적용해보죠. sum(3,4)를 입력해봅니다.

결과값 7이 나오네요.

변수에 기본값을 넣어둘 수 도 있습니다.

> def sum(x,y=5):  #함수명 sum(x,y=5)를 정의합니다.
      s=x+y      #x와 y를 입력하면 s에 서로 더합니다.
      return s    #s를 결과값으로 도출합니다.
> sum(3,8)
> sum(3)


이 함수는 변수 y에 5라는 기본 값을 넣어두었습니다.
x와 y자리에 숫자를 입력하면 그 숫자들의 합이 계산되지만
y자리에 숫자를 입력하지 않으면 기본값 y=5를 불러와서 x+5의 결과값을 도출하게 되었습니다.

그리고 변수들간에 순서는 없습니다.예를 보겠습니다.

x를 먼저쓰고, y를 나중에 쓰고 하지 않는다는 거죠.
첫번째 자리(y)과 두번째 자리(x)만 있을 뿐입니다.
이 함수에서는 입력하지 않고 실행하면 기본값의 합이 나왔고
숫자를 입력하면 첫번째 자리로 인식, 두번째 자리의 기본값인 3을 적용해서 계산하였습니다.

그런데 이런 의문이 들 수 있습니다. 'sum이라는 명령어는 기본이 아니었나요?'

아니네요.
sum이라는 이름을 생성해서, 그 안의 규칙도 새로 만들어서 썼다는 거죠.

> def sum(x,y):
      z = 2*x+y
      return z
> sum(3,4)

어떻게 될까요?

네. 2*3+4의 값인 10이 나오게 됩니다.

그러니 sum이 아닌 어떤 이름도 가능합니다. 예를 들어 함수명을 f1으로 작성해보면

> def f1(x,*y):    #함수명 f1(x,*y)를 정의합니다.
      print(y)     #y값을 출력합니다.
      print(type(y))     #y의 유형을 출력합니다.
      z = x+y[0]    #z에 x+y의 값을 입력합니다.
      return z     #z를 결과값으로 도출합니다.

여기에 f1(2,3)을 입력해보겠습니다.

f2는 변수가 1개인 함수를 가정하여, 기본값으로 1을 넣어봅니다.
만든 후, 아무것도 안넣어보고, 1을 넣어보고, 3을 넣어봅니다.

결과값은

아무것도 안넣으면 1, 1을 넣으면 1, 3을 넣으면 3이 결과값으로 나오는 것을 볼 수 있습니다.

f3함수는 함수 안에서 정의한 내용들이 함수 밖의 변수들에게 영향을 주는지 살펴봅니다.

> def f3(n,l,k):        #함수명 f3(n,l,k)를 정의합니다.
      l.append(3)           # 변수 l에 3을 추가합니다.
      k = [4,5,6]           # 변수 k는 [4,5,6]의 리스트가 됩니다.
      n = n+1               # 변수 n에다 1이 더해집니다.
      return(n,l,k)         # n,l,k를 결과값으로 도출합니다.

위의 함수를 일단 실행(드래그해서 f9)시켜봅니다.

변수상태창을 보면 함수만 지정이 되어있고, l,k,n이라는 별도 지정된 변수는 없습니다.
즉 함수 안에서만 도는 변수인 셈입니다.
이제 함수에 변수값을 입력해봅니다.
n=1, l은 추가할 수 있어야 하니[1]이라는 리스트로, k도[1]이라는 리스트로 입력해봅니다.

> f3(1,[1],[1]) 


1을 입력해놓은 변수n은 1을 더해서 2가 되었고, [1]을 입력해놓은 리스트l는 3이라는 구성요소가 더해져서 [1,3]이 되었고, [1]을 입력해놓은 리스트 k는 [4,5,6]으로 바뀐 것을 볼 수 있습니다.

그런데 지금은 이 함수 안의 n,l,k이 외부에 영향을 주지 않는 것으로 보이는데
이미 외부에 n,l,k이라는 변수가 존재하면 어떻게 될까요?

n,l,k 변수를 입력하고, 함수를 다시 실행해봤습니다.
함수값은 달라진게 없습니다. 변수상태창은 어떨까요?

처음에 입력한 n,l,k가 그대로 유지됨을 볼 수 있습니다.

그렇다면, 함수에 n,l,k를 그대로 입력하면 어떻게 될까요?


외부 변수n의 값인 1에 함수에서 1을 더하니, 2가 됩니다. 외부 변수n에는 영향을 주지 않습니다.
외부 변수l의 값인 [1]에 함수에서 구성요소 3을 더하니 [1,3]이 됩니다. 외부변수 l의 값도 [1,3]으로 변합니다.
외부 변수 k의 값인 [1]을 함수에서 [4,5,6]으로 변환합니다. 외부 변수k에는 영향을 주지 않습니다.

즉, 함수 내부에서 외부에서 사용하는 변수와 같은 이름의 변수를 사용한다고 해도 외부의 변수에 영향을 주지는 않지만, 함수의 입력값에 외부의 변수를 입력하게 되면 외부에 영향을 줄 수 있습니다.
영향을 주는 것과 주지 않는 것은 data type에서 immutable와 mutable로 구분된다고 하나 배운것이 적으므로 일단 영향을 줄 수 도 있구나 라고 인지하고 넘어가겠습니다

자. 함수를 만드는 데 있어서 무엇을 입력하면 무엇을 도출한다무조건문입니다.
무엇을 입력할 때 조건이 충족되면 무엇을 도출하고, 조건이 미충족되면 무엇을 도출한다.조건문이 활용하기 좋을 것입니다. if ~ else 조건문이죠. 거기에 추가로 if + elif + else도 가능합니다.

> If <조건문>:
     <수행할 문장> 
     ...
  elif <조건문>:
     <수행할 문장>
    ...
  elif <조건문>:
      <수행할 문장>
      ...
      ...
  else:
     <수행할 문장>
     ... 

이와 같이 elif (else+if 이전 조건에 안맞지만 다른 조건을 걸 때 사용)을 사용하여 다중 조건 문장을 만들 수 도 있습니다.
직접 조건문을 만들어보면서 연습해봅시다.

> def comp(i,j):
       if i < j :
           print(i,"is less than",j)    #i는 j보다 작다
       elif i > j:
           print(i,"is larger than",j)    #i는 j보다 크다
       else:
           print(i,"is equal to",j)    #i는 j와 같다

위와 같이 두 숫자를 비교하는 함수를 만들어, 몇가지 숫자를 넣어 실행해봅니다.

이번에는 서로 포함한다 포함하지 않는다를 함수로 표현해보겠습니다.

> def isin(x,l):
      if x in l:
          print(x,"is in",l)    #x는 l 안에 있다.
      else:
          print(x,"is not in",l)    #x는 l안에 있지 않다.

여기에 몇가지 데이터를 넣어 실행해봅니다.

자. 이번에는 배운 내용으로 연습문제를 풀어봅니다.

> def score(i):
      if i<50:
          print ("F")
      elif 50<=i<60:
          print ("D")
      elif 60<=i<70:
          print ("C")
      elif 70<=i<80:
          print ("B")
      else :
          print ("A")

실행시켜보고 score에 90점 또는 다른 점수들을 넣어봅니다.

score를 input으로 바꿔도 같습니다.

이번에는 while 구문에 대해 공부해봅니다.
while 구문은 어느 조건을 만족할 때까지 반복해서 문장을 수행하는 반복문입니다.
기본구조는 이런식입니다.

> while <조건문>:
     <수행할 문장>

조건을 충족할 때까지 반복해서 수행하게 됩니다.
예를 들어 1부터 10까지의 합을 구하는 구문을 만들어봅니다.

> x = 1
> s = 0
> while x <= 10:
      s = s + x
      x = x+1

> print(x,s)

실행하면

x가 10이 될때까지 자신의 값을 s에 더하고, x 자신도 1씩 증가하는
s= 1+2+3+4+5+6+7+8+9+10 이 되었고
x= 1+1+1+1+1+1+1+1+1+1 이 되었습니다.

다시 연습문제를 풀어봅니다.

> score = 0
> while score <= 100:
      score = score + 1
      if score<50:
           print ("F")
      elif 50<=score<60:
           print ("D")
      elif 60<=score<70:
           print ("C")
      elif 70<=score<80:
           print ("B")
      else :
           print ("A")

점수가 0점부터 시작해서 해당 등급을 표시해주고, 100점이 넘어가면 끝나는 구조로 만들었습니다.
실행시키면

...
...
...

원하는대로 결과가 도출되었습니다.

이번시간에는 여기까지 하고, 다음시간에 for를 활용한 문장으로 이어서 공부하겠습니다.

H2
H3
H4
3 columns
2 columns
1 column
Join the conversation now
Logo
Center