220905 Day10

유예지·2022년 9월 5일

(3) 반복문 while

  • for문 : 반복의 횟수가 정해져 있다
  • while문 : 반복의 횟수가 정해져있지 않다 (그때그때 다를 수 있다)
  • 조건문이 참인 동안 while문 아래의 문장이 반복해서 수행된다
>>> i = 0
    while i < 10:
        print(i, end = ", ")
        i += 1

* break : while문을 끝내는 방법

#while True : 무한루프
>>> import time
    i = 0
    while True:
        print(i, end = " ")
        i += 1
        time.sleep(1)
        if i == 10:
            break
    print("끝")
#1부터 10까지의 합
>>> i = 0
    sum = 0
    while i <= 10:
        sum += i
        #print(sum)
        i += 1
    print(sum)

#1부터 10까지 3의 배수들의 합
>>> i = 1
    sum = 0
    while i <= 10:
        if i%3 == 0:
            sum += i
            #print(sum)
        i += 1
    print(sum) 

* continue : while문의 맨 처음으로 돌아가기

-조건을 검사해서 조건에 맞지 않으면 while문의 맨 처음(조건문)으로 다시 돌아가게 만든다

#3의 배수가 아닌 것만 출력
>>> i = 0
    while i < 10:
        if i%3 == 0:
            continue
        print(i)

#3의 배수가 아닌 것의 합
>>> i = 0
    sum = 0
    while i < 10:
        if i%3 == 0:
            continue
        sum += i
        print(sum)
        i += 1
    print(sum)      
>>> import random
    random.randint(1, 10)   #1부터 10까지의 숫자가 랜덤으로 나온다
    
#7보다 작은 수들의 합
>>> sum = 0
    while True:
        i = random.randint(1, 10)
        if i < 7:
            print(i, end = " ")
            sum += i
        if sum > 50:
            break
    print(sum)
    
>>> sum = 0
    while True:
        i = random.randint(1, 10)
        if i > 7:
            break
        else:
            print(i, end = " ")
            sum += i
    print(sum)
    
#100 이하의 수에 대하여 3의 배수 또는 5의 배수의 합
>>> i = 1
    sum = 0
    while i < 100:
        if i%3 == 0 or i%5 == 0:
            #print(i)
            sum += i
        else:
            pass
        i += 1
    print(sum)
    
>>> i = 1
    sum = 0
    while i < 100:
        if i%3 == 0:
            sum += i
        elif i%5 == 0:
            sum += i
        i += 1
    print(sum)

5. 함수

  • 구조
def 함수이름( , ) :
    실행할 문장
    return 변수

* 입력값이 2개인 경우

>>> def add(a, b):
        c = a + b
        return c   #print(c)와는 다르다
        add(1, 2)
3

>>> def add(a, b):
        c = a + b
        print(c)
        add(10, 20)
30

* 입력값이 1개인 경우

#입력받은 것을 2배
>>> def twice(a):
        return a*2
    twice(4)
8

#입력값이 홀수이면 2배, 짝수이면 나누기 2
>>> def odd_even(a):
        if a%2 == 1:
            return a*2
        else:
            return a/2   #return이 실행되고 나면 함수는 끝난다
    odd_even(5)
10    

* 입력값이 없는 경우

>>> def add():
        a = 10
        b = 20
        return a + b
    add()
30    

* 리턴값이 "2개 이상"일 수도 있다

-여러개의 값을 동시에 리턴하는 것이 가능하다

>>> def add():
        a = 10
        b = 20
        return a + b, b - a
    add()
(30, 10)

>>> a = add()
    print(a)
    
    c, d = add()
    print(c)
    print(d)
(30, 10)
30
10

* 기본값(디폴트)이 있는 경우

>>> def add(a, b, c = 100):   #a,b,c의 기본값이 100
        result = a+b+c
        return result

>>> add(1)   #값을 1개만 지정하였으므로 실행되지 않는다

>>> add(1, 2)
103

>>> add(1, 2, 3)
6

>>> add(2, 1, 3)
    add(c=2, b=1, a=3)   
6    #변수 하나씩 값을 지정해준다면, 변수를 입력하는 순서는 꼭 지킬필요는 없다

>>> def add(a, b=10, c):
        result = a+b+c
        return result
SyntaxError:   #기본값은 항상 맨 마지막 값에 정의되어야 한다       

* 입력값이 여러개인 경우

>>> def add(*a):
        return a
>>> add(1,2,3,4)
(1,2,3,4)

>>> def add(*args):
    sum = 0
    for i in args:
        sum += i
    return sum
>>> add(1,2,3,4)
10
#1부터 입력받은 수 까지의 합
>>> num = int(input("숫자 입력: "))
    sum = 0
    for i in range(num+1):
        sum += i
    print(sum)
    
>>> def add(num):
        sum = 0
        for i in range(num+1):
            sum += i
        return sum
>>> add(10)        
        
#숫자 2개를 입력받고, 그 두 숫자 사이 값들의 합 구하기
>>> def two_num(a, b):
        sum = 0
        for i in range(a, b+1):
            sum += i
        return sum    #input()을 쓰지 않아도 입력값을 받을 수 있다
>>> two_num(5, 15)        

* return과 print의 차이

-출력되는 결과로 보기에는 큰 차이가 없어보이지만,
-print는 단지 코드를 수행하여 값을 '출력'만 해주는 것이고
-return은 코드가 수행되어 나온 값을 변수에 '받는다'

>>> def func_r(a):
        return(a*2)
        
    def func_p(a):
        print(a*2)
        
>>> func_r(3)
6
>>> func_p(3)
6

>>> b = func_r(3)
    print(b)
    b/2
6
3.0

>>> b = func_p(3)
    print("...")
    print(b)
    b/2
6
...
None

>>> type(b)
NoneType
  • 키워드 파라미터
>>> def kw_test(**kwargs):
        print(kwargs)
>>> kw_test(a=1, b=2)
{'a': 1, 'b': 2}   #딕셔너리의 형태로 나온다

>>> def kw_test(*kwargs):
        print(kwargs)
>>> kw_test(1,2,3,4)
(1,2,3,4)   #튜플의 형태로 나온다
>>> del myself(name, age):
        print(f"나의 이름은 {name}이고, 나이는 {age}세 입니다.")
>>> myself("홍길동", 20)  

>>> del myself(name, age):
        return f"나의 이름은 {name}이고, 나이는 {age}세 입니다."
>>> myself("홍길동", 20)  
>>> del(c)

>>> def add(a, b):
       c = a + b
       return c
    
    add(1, 2)       
    print(c)   #return 전까지는 c가 유효하나, return이 실행되고 나면 사라진다
#함수 안에서 만들어진 변수는 함수가 끝나고 나면 사라진다

>>> d = 5    #global 전역변수
    def add(a, b):
        c = a + b    #local 지역변수
    
        return c + d

    add(1, 2)
    #print(d)

* Lambda 함수

-함수를 한줄로 간결하게 만들 때 사용한다
-함수에 이름을 붙이지 않을 수 있다

>>> def add(a,b):
        return a + b
    add(1,2)
    
>>> (lambda a, b: a+b)(1, 2)

>>> f = lambda a, b: a+b
    f(1, 2)

* 재귀함수

-함수 안의 함수

>>> import time
    def hello():
        print("안녕하세요")
    time.sleep(1)
    hello()
>>> hello()

>>> import time
    def hello():
        print("안녕하세요")
    time.sleep(1)
    return
    hello()
#return의 위치에 따라 실행횟수가 다르다 (return이 들어가면 함수의 무한 반복을 끝낼 수 있다)    
>>> hello()   #'안녕하세요'가 1번만 출력된다

>>> def hello(count):
        if count == 0:
            return
        print("안녕하세요")
        #time.sleep(1)
        count -= 1
        hello(count)
>>> hello(5)        

0개의 댓글