함수(function)
- 함수 이름은 다른 함수와 중복되지 않아야 하며, 문장 들여쓰기에 유의해야하 함
- 호출 방식은 함수명(정의된 인수) 형태 또는 변수명 = 함수명(정의된 인수)로 가능
- 함수를 정의할 때 괄호안에 기술하는 변수가 매개변수
- 함수를 호출할 때 괄호안에 기술하는 변수는 인수
- 인수와 매개변수 명은 다를 수 있지만, 갯수는 같아야 함
- 함수 안에서 선언된 변수의 유효영역은 함수의 영역에 한정됨
- 스코핑 룰 : 지역 변수와 전역 변수의 이름이 같고 영역이 겹칠 때는 지역 변수 우선 적용
- default parameter : 함수 호출 시 사용한 인수가 함수 선언 시 매개변수 갯수보다 적을 때 사용
파라미터명 = "값" 형태
- arbitrary argument lists : 인수 개수의 변동이 잦을 경우 사용.
* 매개변수명 : 튜플 형식
** 매개변수명 : 딕셔너리 형식
- 리턴값이 여러개일 때는 리턴값을 컴마로 구분. 할당 시 튜플로 처리됨.
Q1. firstNum, secondNum 두개의 매개변수를 받는 mySum(), mySub(), myDiv(), myMul() 사칙연산 함수를 각각 작성.
단, 반드시 결과를 반환(return)해야하며 if ~ elif 대신 딕셔너리 case문을 활용
A.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | def mySum(Num1,Num2): # 덧셈연산 함수 return Num1 + Num2 # 덧셈연산 결과를 반환 def mySub(Num1,Num2): # 뺄셈연산 함수 return Num1 - Num2 # 뺄셈연산 결과를 반환 def myMul(Num1,Num2): # 곱셈연산 함수 return Num1 * Num2 # 곱셈연산 결과를 반환 def myDiv(Num1,Num2): # 나눗셈연산 함수 return Num1 / Num2 # 나눗셈연산 결과를 반환 # num1 = int(input("첫번째 정수를 입력 : ")) oop = input("부호를 입력하세요 : ") num2 = int(input("두번째 정수를 입력 : ")) expr={"+" : mySum(num1,num2), "-" : mySub(num1,num2), "*" : myMul(num1,num2), "/" : myDiv(num1,num2)} result = expr.get(oop,'연산자가 오류입니다.') print(num1,oop,num2,'=',result) | cs |
Q2. 두 수를 입력받은 후, B, S 중 하나를 입력받아 B 이면 두 수 중 최대값을 출력하고, S면 최소값을 출력.
단, 함수에 인수를 전달하고 함수는 결과는 리턴하는 방식으로 코딩
A.
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 29 30 31 32 33 34 35 | # ver.1 (딕셔너리 케이스 사용 시 중복 코드 단축 가능) import os # 화면을 클리어 하는 도스명령어 cls를 사용하기 위한 함수 system( )을 사용하기 위함 def myMax(firstNum, secondNum): # 최대값 if firstNum > secondNum: return firstNum else: return secondNum def myMin(firstNum, secondNum): #최소값 if firstNum < secondNum: return firstNum else: return secondNum while (True) : os.system('cls') print("최대값 / 최소값 판단 프로그램입니다.") su1,op,su2 = int(input("숫자:")),input("최대값은 B 최소값은 S 종료는 x 입력 :"),int(input("숫자:")) if op=='X' or op == 'x': print('종료합니다.') break elif su1 == su2 : print("최대값, 최소값이 같습니다.") input("앤터키를치세요") elif op == 'B' or op == 'b': result=myMax(su1, su2) print(su1,'와',su2,'중 최대값은 ',result,'입니다.') input("앤터키를치세요") elif op=='S' or op == 's': result=myMin(su1, su2) print(su1,'와',su2,'중 최소값은 ',result,'입니다.') input("앤터키를치세요") else : print("최대값, 최소값 선택 입력이 오류입니다.") input("앤터키를치세요") | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | # ver.2 def myMax(num1,num2): if num1 > num2: return ['최대값',num1] # 리스트형으로 반환함 elif num1 < num2: return ['최대값',num2] def myMin(num1,num2): if num1 > num2: return ['최소값',num2] elif num1 < num2: return ['최소값',num1] firnum, bs, secnum = int(input("숫자 : ")), input("최대값은 B 최소값은 S 입력 : "), int(input("숫자 : ")) ex = {"B" : myMax(firnum,secnum),"S" : myMin(firnum,secnum)} # 딕셔너리 활용, 리스트형으로 반환받음 result = ex.get(bs,"잘못 입력했습니다.") # 입력 오류 처리 print(f"{firnum}와 {secnum}중 {result[0]}은 = {result[1]}") # 딕셔너리이기 때문에 인덱스 활용하여 출력 | cs |
Q3. List Comprehension을 활용하여 함수 세 개를 작성하고, 엔터키를 누르면 출력창이 clear 되고 다음으로 넘어가도록 코딩.
x = [2, 4, 1, 5, 7, 3, 9, 10, 8, 6]
1 입력 : 리스트의 각 수를 자기 자신만큼 제곱한 리스트를 반환. (2는 2의 2제곱, 4는 4의 4제곱...)
2 입력 : 리스트에서 홀수만을 추출한 리스트를 반환
message = ['spam', 'ham','spam', 'ham', 'spam', 'spum', 'stam', 'spam']
3 입력 : 리스트에서 'spam'만 추출하여 반환
0 입력 : 종료
A.
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 29 30 31 32 33 34 35 36 37 38 39 40 41 | import os def func1(): ls1=[2, 4, 1, 5, 7, 3, 9, 10, 8, 6] # list comprehension print('제곱 프로그램을 수행합니다\n','원본:',ls1) ls2=[i*i for i in ls1] return ls2 def func2(): x =[2, 4, 1, 5, 7, 3, 9, 10, 8, 6] # list comprehension print('홀수 프로그램을 수행합니다\n','원본:',x) ls2=[i for i in x if i % 2!=0] return ls2 def func3(): message = ['spam', 'ham','spam', 'ham', 'spam', 'spum', 'stam', 'spam'] print('스팸 프로그램을 수행합니다\n','원본:',message) spam_list = [ spam_txt for spam_txt in message if spam_txt == "spam" ] # list comprehension return spam_list while True: # 종료 요청시까지 반복 os.system('cls') # 화면 clear sel = int(input("1, 2, 3 중 한 개를 입력하세요. 종료는 0 을 입력하세요 : ")) if sel == 0: print("프로그램을 종료합니다.") input('엔터키를 누르세요') break elif sel == 1: result= func1() print('제곱:',result) input('제곱프로그램이 모두 실행되었습니다. 엔터키를 누르세요') elif sel == 2: result=func2() print('홀수:',result) input('홀수프로그램이 모두 실행되었습니다. 엔터키를 누르세요') elif sel == 3: result=func3() print('스팸:',result) input('스팸프로그램이 모두 실행되었습니다. 엔터키를 누르세요') else: print("입력값이 오류입니다. 다시 입력하세요.") input('엔터키를 누르세요') | cs |
'study > python' 카테고리의 다른 글
파이썬 클래스(class) - 캡슐화, 상속, 메서드 오버라이딩 (0) | 2022.06.09 |
---|---|
파이썬 클래스(class) - 클래스 멤버 (0) | 2022.06.07 |
파이썬 셋(set) 예제 (0) | 2022.06.02 |
파이썬 문자열(string type) 입력, 출력, 추출 예제 (0) | 2022.05.31 |
파이썬 딕셔너리(Dictionary) 예제 (0) | 2022.05.31 |
댓글