선미 파이썬 0328 13일차
azuremei
노트
#함수에서 여러개의 값 반환 def clac(a, b) : return a+b, a-b, a*b, a/b #사칙연산의 네 가지 결과를 바환하겠다 print(clac(5, 3)) #clac함수는 리턴을 하니까 반환되는 값을 출력(사용) #반환된 값 : (8, 2, 15, 1.6666666666666667) #>>값이 여러개이면 튜플로 반환된다. >>> 튜플 '하나'로 반환 ####모든 프로그래밍 언어에서 함수가 반환하는 값은 절대로 여러개일 수 없음, 오직 하나 또는 none print(clac(5, 3)[0]) # >>인덱싱 가능!! print() print() #매개변수가 없으면 단순개행 print(1) # 매개변수로 전달한 값 : 1 print(1, 2, 3) # 정수 1, 2, 3 출력(매개변수로 값이 3개출력) #함수는 정의해놓은대로 사용하는데 print만 매개변수가 달라도 사용이 가능하다. >왜? # 전달되는 값이 몇 개인지 모르거나 몇 개이던 받아야 할 때는 '가변인수'를 사용한다. #가변인수 >>> *args(arguments : 입력 인자'들') ''' def add(a, b) : return a+b print(add(1, 2)) ''' #만약 이 두 개보다 더 많은 값을 구하고 싶다면?? 프린트처럼 def add( *args ) : # args라는 이름도 일종의 변수이기 때문에 변경이 가능하다. print("add의 args : ", args) # args에는 튜플로 전달된 모든 값들이 나열됨 >>>> * = 패킹/언패킹 my_sum=0 # 덧셈의 결과를 누적할 변수 생성 for i in args : # 튜플(전달된 값)의 모든 요소를 대입 my_sum+=i return my_sum print(add(1, 2, 3, 4, 5)) #프린트도 동일한 가변인수를 사용한것(print(v, ....... )) #print()에서 아무것도 넣지 않았는데 개행이 되는 이유는 print 안에 end="\n"가 적용되어 있기 때문 print() #매개변수 이름을 '키워드'로 사용하여 함수 호출 def print_info(name, age, phone) : print("이름 : ", name) print("나이 : ", age) print("전화번호 : ", phone) #반환없음 print_info("쿠로코", 18, "010-0415-0411") print_info(age=18, name="쿠로코", phone="010-0415-0411") # 매개변수를 알면 순서와 상관 없이 수행할 수 있다. #문자열 포매팅과 비슷 print("{a}, {b}".format(b=2245, a=588)) print(1, 2, 3, sep="") #sep에는 원래 ' '공백이 있었는데 빈 문자를 전달함, 즉 sep나 end도 매개변수이다. #매개변수에 초기값(기본값) 넣기 #기본값 넣는것은 매개변수 뒤에 대입을 해주면 됨, ㅁ는 ㅇ 이런식으로... def print_info(name, age, phone="010-xxxx-xxxx") : print("이름 : ", name) print("나이 : ", age) print("전화번호 : ", phone) print_info("쿠로코", 18) #이런식으로 매개변수를 입력하지 않으면 기본값이 전달된다. 이 때 폰 부분에 "zzzzz"를 치면 기본값을 덮고 "ㅋㅋㅋㅋ"가 출력된다. #print()함수의 정의된 구조 예쌍 #def print(sep="", end="\n", .....) # 기본값을 적용할 매개변수를 맨 뒤에 위치시켜야 한다. (print처럼???) ''' def test(a=1, b) : print(a, b) test(2) ''' #오류! 컴파일 오류 : 실행하려 했는데 문법오류가 난 것, 실행하기도 전에 오류가 났다.(파이썬에는 없는 개념이지만 문법적 오류로 실행조차 되지 않는 것이 컴파일 오류이다.) /실행 도중에 오류가 난 것(런타임 오류) def test(a, b=1) : print(a, b) test(2) #전역변수, 지역변수 #전역변수 : 전체 영역 >>전체 영역에서 사용 가능한 변수이다. #지역변수 : 특정 지역에서만 사용 가능 #특정 지역이란? : 어떠한 문법의 수행문 예) (:) 이후의 들여쓰기 구문 # 전역변수는 우리가 여태 사용하던 형태 #전역이냐 지역이냐에 따른 사용을 논하는 것 >>>> 변수 위치! 정확히는 변수의 생성 위치에 따라 사용하느냐 마느냐 value = "전역변수" # 우리가 사용하는 위치, 제일 앞 들여쓰기 def fun1() : print(value) fun1() #코드의 흐름상 위에만 있으면 사용이 가능하다. ''' def fun2(): val_fun2 = "fun2의 지역변수" print(val_fun) fun2() ''' #print(val_fun2) # 오류! 이때는 존재하지 않는 지역변수이기 때문에 사용할 수 없다. def fun2(): val_fun2 = "fun2의 지역변수" print(val_fun2) value="fun2의 벨류" print(value) # 이 때의 벨류는 새로 생성된 지역변수로 위의 벨류 변수와는 이름만 같다. #fun2에서 벨류 변수를 주석했을때와 하지 않았을 때를 비교해보자 fun2() def fun3(): #지역변수를 전역변수로 만들기 global val_fun3 val_fun3 = "fun3의 지역변수" print(val_fun3) print("====3===") fun3() print(val_fun3) # global로 호출하면 지역변수를 전역변수로 전환되어 밖에서도 사용할 수 있음. 그러나 파이썬은 위에서부터 아래로 연산하는 프로그램이므로 호출은 반드시 출력 전에 해야 한다. #재귀함수 ㅣ 함수의 수행문에서 자기 자신 함수를 다시 호출하는것 >>>나를 다시 호출 : 재귀호출(명칭) #명칭일 뿐이고 특별한 기술이 들어가는 것은 아님 #함수에 대한 이해가 선행되어야 함 # >함수는 호출하면, 함수의 수행문으로 점프(이동)하고 수행문이 끝나면 호춯했던 위치로 다시 돌아오는것 ''' def count_down(count) : print("카운트다운 : ", count) print("함수호출 전") count_down(2) print("함수호출 후") ''' def count_down(count) : print("카운트다운 : ", count) #이렇게 하면 숫자가 점점 작아지다 오류가 난다. #재귀함수는 나 자신을 반복해서 호출하기 때문에 반복문과 유사함.(반복문도 수행 코드를 반복 수행) >> 반복문처럼 반복이 끝나는 시점을 만들어줘야 한다. if count ==0 : return # 이렇게 리턴을 뒤에 값 없이 그냥 쓰면 함수를 끝내라, 아무 값 없이 변환할 수 있다. ######카운트를 이프 위에 쓰면 오류남... count_down(count-1) # 나 자신을 다시 호출(재귀호출) print("함수호출 전") count_down(2) print("함수호출 후") print() def func(n) : print("fonc({}) 시작".format(n)) if n==0 : print("n==0 이때부터 끝") return func(n-1) # 재귀함수 print("fonc({}) 끝".format(n)) #(1) f2 를 호출 (2) f2함수 내부에서 f1을 호출 ㄹ2는 끝난게 아님 (3) ㄹ1함수 내부에서 ㄹ0을 호출 (4)ㄹ0은 조건식에 만족해서 리턴(종료) (5)ㄹ0을 호출했던 ㄹ1로 돌아간다>>>func(n-1)>>>f1끝 출력됨 (6) ㄹ1을 호출한ㄹ2로 돌아간다(>>>>려ㅜ(ㅜ-1)>>펑2끝이 출력됨 (7)ㄹ2를 호출했던 바깥의 ㄹ2로 돌아간다.) #>>>어느 코드에서 함수를 호출했는지에 따라 돌아가는 위치가 다르다 print("func(2)호출 전") func(2) print("func(2)호출 후") #함수는 호출되면 stack이라는 메모리(기억공간)에 정보가 쌓이고 수행이 완료되면 stack의 정보가 삭제됨 # stack의 자료구조는? : 한 쪽이 막혀있기 때문에 나중에 들어온 자료가 먼저 나감 예) 1. 2. 3 이 쌓인다면 3. 2. 1로 나감. # [참고] queue자료구조도 있음 아래가 뚫혀있기 때문에 먼저 들어온 자료가 먼저 나감 예) 1, 2, 3이 있다면 1, 2, 3 순으로 #함수 연습 2 ''' 4. 소수 출력하기 소수(prime no.) : 1 혹은 자신으로만 나눠떨어지는 수 (1은 소수가 아니다.) 1)1부터 입력받은 수 까지 소수 출력 함수 >>이름 :is_prime_number >>기능 : 매개변수 전달받은 1개의 숫자가 소수인지 아닌지 판별하여 그 결과를 반환 소수ㅇ : True 소수x : False is_prime_number(10) --> return false is_prime_number(11) --> return true [출력 결과] 숫자 입력 : 20 소수 : 2 3 5 7 11 13 17 19 힌트 : 1~입력받은 수까지 반복수행하는 for문이 잇어야 함, for문 수행은 안에서 함수를 호출하여 하나씩 확인 5. 재귀함수를 이용하여 팩토리얼 구하기 팩토리얼이란 : 1부터 특정 수까지 모든 숫자를 곱한 결과 값(5!=5*4*3*2*1) 함수 이름 : get_factorial 기능 : 매개변수로 전달 받은 숫자의 팩토리얼 결과값 구해서 반환 [결과값] 숫자 입력 ! 5 5!=120 힌트 : 3! = 3*2*1 = 3*2! = 3*2*1! 1! = 1 ''' input_num = int(input("숫자 입력 : ")) def is_prime_number(input_num) :
강의내용
[펼치기]