Search

함수

함수 내에서 또 다른 함수를 호출할 수 있음

def fun1(): print('fun1 호출!') fun2() def fun2(): print('fun2 호출!') fun3() def fun3(): print('fun3 호출!')
Python
복사
ex) 구구단을 연쇄해서 실행해보자.
def guguDan2(): for i in range(1,10): print('2 * {} = {}'.format(i, 2*i)) guguDan3() def guguDan3(): for i in range(1,10): print('3 * {} = {}'.format(i, 3*i)) guguDan4() def guguDan4(): for i in range(1,10): print('4 * {} = {}'.format(i, 4*i)) guguDan5() def guguDan5(): for i in range(1,10): print('5 * {} = {}'.format(i, 5*i)) guguDan2()
Python
복사

pass 를 이용해서 실행문을 생략할 수 있다

def printTodayWeather(): # 함수 선언부 pass # 함수 실행부
Python
복사

함수의 매개변수와 인수는 개수가 동일해야 한다

ex) 계산기 함수
def cal(n1,n2): print(f'{n1} + {n2} = {n1 + n2}') print(f'{n1} - {n2} = {n1 - n2}') print(f'{n1} / {n2} = {n1 / n2}') print(f'{n1} * {n2} = {n1 * n2}') cal(10,20)
Python
복사

매개변수의 개수가 정해지지 않은 경우에는 ‘*’ 를 매개변수 앞에 붙여준다.

이때 인수들의 타입은 튜플이다.
def printNumber(*numbers): for number in numbers: print(number, end='') print() printNumber() printNumber(1) printNumber(1,2) printNumber(1,2,3) printNumber(1,2,3,4)
Python
복사
# 국어,영어,수학 점수를 받고 총점, 평균을 출력하는 함수 def testResult(kor,eng,mat): sum = kor + eng + mat avg = sum / 3 print('총점 : {}'.format(sum)) print('평균 : {}'.format(round(avg,2))) korScore = int(input('국어 점수 입력: ')) engScore = int(input('영어 점수 입력: ')) matScore = int(input('수학 점수 입력: ')) testResult(korScore,engScore,matScore)
Python
복사

return 을 만나면 그 아래 코드는 실행되지 않는다

def calculator(n1,n2): result = n1 + n2 return result print('hello') # -> 앞에 return 이 있기때문에 실행되지 않는다. returnValue = calculator(10,20) print(f'returnValue: {returnValue / 2}') # 'returnValue / 2' 한 값을 출력
Python
복사
ex) 사용자가 길이(cm)를 입력하면 mm로 환산한 값을 반환하는 함수
def cmTomm(cm): result = cm * 10 return result length = float(input('길이(cm) 입력: ')) returnValue = cmTomm(length) print(f'returnValue: {returnVlaue}mm')
Python
복사
ex) 1 ~ 100 까지의 정수중 홀수인 난수를 반환하는 함수
# 1부터 100까지의 정수 중 홀수인 난수를 반환하는 함수 import random def getOddRandomNumber(): while True: num = random.randint(1,100) if num % 2 != 0: break return num print(f'returnValue: {getOddRandomNumber()}')
Python
복사

지역 변수 / 전역 변수

전역 변수 : 함수 밖에서 정의된 변수, 어디에서나 사용 가능. but 함수 안에서 수정 불가
무슨 말이냐?
함수 안에서 전역 변수와 동일한 이름의 변수를 정의해준다고 해도, 전역변수와는 별개라는 의미! 함수 안에서만 유효한 변수다.
# ex. 지역 변수를 함수 밖에서 사용하면 error def printNumbers(): num_in = 20 print(f'num_in : {num_in}') print(f'num_in : {num_in}') # -> error 발생
Python
복사
# 사용자가 가로, 세로 길이를 입력하면 사각형과 삼각형의 넓이를 출력하는 함수 # 전역 변수 이용하기 def squareTriangle(): square = width * height triangle = (width * height) / 2 print(f'사각형의 넓이 : {square}') print(f'삼각형의 넓이 : {triangle}') width = int(input('가로 길이: ')) height = int(input('세로 길이: ')) squareTriangle()
Python
복사
global 키워드 : 굳이 전역변수를 함수 안에서 수정하고 싶을 경우 사용한다.
num_out = 10 def printNumbers(): global num_out # 전역 변수를 갖고옴 num_out = 20 # 전역 변수 값을 변경 print(f'num_out: {num_out}') printNumbers() # 20 print(f'num_out: {num_out}') # 전역 변수값도 변경됨 # num_out: 20 # num_out: 20
Python
복사
# 방문객수를 카운트하는 함수를 만들자 # global 키워드 -> 함수를 호출할 때마다 누적될 수 있다 totalVisit = 0 def countTotalVisit(): global totalVisit # 전역변수 가져옴 totalVisit += 1 # 1씩 더함 print(f'누적 방문객 수 : {totalVisit}') # 값을 출력 countTotalVisit() countTotalVisit() countTotalVisit() countTotalVisit() countTotalVisit()
Python
복사

중첩 함수

함수 안에 또 다른 함수가 선언 되고 있는 형태
내부 함수는 함수 안에서 호출될수는 있지만 함수 밖에서 호출될 수는 없다.
def out_function(): print('out_function called!') def in_function(): print('in_function called!') in_function() # -> 가능!!! in_function() # -> error!
Python
복사
# calculator함수를 선언하고 안에 덧셈, 뺄셈, 곱셈, 나눗셈 함수를 선언하자 def calculator(x,y,operator): def add(): result = x + y print(f'덧셈 연산 : {result}') def sub(): result = x - y print(f'뺄셈 연산 : {result}') def mul(): result = x * y print(f'곱셈 연산 : {result}') def div(): result = x / y print(f'나눗셈 연산 : {result}') if operator == 1: add() elif operator == 2: sub() elif operator == 3: mul() else: div() while True: n1 = int(input('실수 n1 입력: ')) n2 = int(input('실수 n2 입력: ')) op = int(input('사용할 연산 입력(1:덧셈, 2:뺄셈, 3:곱셈, 4:나눗셈, 5:종료: ')) if op == 5: print('계산 종료!') break calculator(n1,n2,op)
Python
복사

lambda 함수

함수 선언을 보다 간결하게 할 수 있다.
예를 들어 아래의 def 함수 식을
def calculator(x,y): return x + y returnValue = calculator(10,20) print(f'returnValue: {returnValue}')
Python
복사
lambda 식을 활용하면 아래와 같다
calculator = lambda x,y : x + y returnValue = calculator(10,20) print(f'returnValue: {returnValue}')
Python
복사
ex) 삼각형, 사각형, 원의 넓이를 출력하는 함수를 lambda 식으로 만들어보자.
Triangle = lambda x,y : (x * y) / 2 Square = lambda x,y : x * y Circle = lambda r : r * r * 3.14 width = int(input('가로 길이 입력: ')) height = int(input('세로 길이 입력: ')) radius = int(input('반지름 길이 입력: ')) triangleValue = Triangle(width,height) squareValue = Square(width,height) circleValue = Circle(radius) print(f'삼각형의 넓이: {triangleValue}') print(f'사각형의 넓이: {squareValue}') print(f'원의 넓이: {circleValue}')
Python
복사

모듈

내부 모듈 : 파이썬 설치 시 기본적으로 사용할 수 있는 모듈
외부 모듈 : 별도 설치 후 사용할 수 있는 모듈 → import
random
random.randint : 정수 난수 1개를 발생
import random rNum = random.randint(1,100) # 1 ~ 100까지의 정수 중 난수 1개 발생
Python
복사
random.sample : 지정한 범위에서 지정한 개수만큼 난수 발생(2개의 매개변수)
 결과는 리스트
import random rNums = random.sample(range(1,101), 10) # 1 ~ 100까지의 값 중에서 10개의 난수 발생
Python
복사
사용자 모듈 : 사용자가 직접 만든 모듈

모듈 제작

내가 필요한 기능들을 넣어놓은 파이썬 파일을 만들어보자.
모듈은 파일이름.py 형태의 파이썬 파일이고
쓰고 싶을 때는 import 파일이름 으로 가져오면 된다.
ex) 로또 6개의 번호를 랜덤하게 추출해주는 py 모듈 만들기
# lottoMachine.py import random def getLottoNumbers(): result = random.sample(range(1,46),6) return result
Python
복사
import lottoMachine lottoNumbers = lottoMachine.getLottoNumbers() print(f'lottoNumbers: {lottoNumbers}')
Python
복사
ex ) 입력한 문자열을 거꾸로 출력해주는 py 모듈 만들기
# reverseStr.py def reverseStr(str): return str[::-1]
Python
복사
import reverseStr userInputStr = input('문자열 입력: ') reversedString = reverseStr.reverseStr(userInputStr) print(f'reversedString: {reversedString}')
Python
복사

중급 문제 풀이__함수

# 산술연산 계산기 def add(n1,n2): return n1 + n2 def sub(n1,n2): return n1 - n2 def mul(n1,n2): return n1 * n2 def div(n1,n2): return n1 / n2 def mod(n1,n2): return n1 % n2 def flo(n1,n2): return n1 // n2 def exp(n1,n2): return n1 ** n2 while True: cal = int(input('1.덧셈, 2.뺄셈, 3.곱셈, 4.나눗셈, 5.나머지, 6.몫, 7.제곱승, 8.종료')) if cal == 8: print('Bye ~') break n1 = int(input('첫 번째 숫자 입력: ')) n2 = int(input('두 번째 숫자 입력: ')) if cal == 1: print(add(n1,n2)) elif cal == 2: print(sub(n1,n2)) elif cal == 3: print(mul(n1,n2)) elif cal == 4: print(div(n1,n2)) elif cal == 5: print(mod(n1,n2)) elif cal == 6: print(flo(n1,n2)) elif cal == 7: print(exp(n1,n2))
Python
복사
# 이동 거리 반환 print('-'*60) s = float(input('속도(km/h) 입력: ')) h = float(input('시간(h) 입력: ')) m = float(input('시간(m) 입력: ')) def getDistance(s,h,m): return s * (h + (m/60)) d = getDistance(s,h,m) print(f'{s}(km/h)속도로 {h}(h)시간 {m}(m)분 동안 이동한 거리: {d}(km)')
Python
복사
# 이동 시간 반환 : 속도와 거리가 입력 def getTime(s,d): time = d / s print(f'time: {time}') h = int(time) # '시' m = int((time - h) * 100 * 60 / 100) # '분' return [h,m] s = float(input('속도(km/h) 입력: ')) d = float(input('거리(km) 입력: ')) t = getTime(s,d) print(f'{s}(km/h)속도로 {d}(km) 이동한 시간: {t[0]}(h)시간 {t[1]}(m)분 ')
Python
복사
# 비행기 티켓 영수증 출력 함수 childPrice = 18000 infantPrice = 25000 adultPrice = 50000 specialDc = 0.5 def formatedNumber(n): return format(n, ',') def printAirPlaneReceipt(c1,c2,i1,i2,a1,a2): cp = c1 * childPrice cp_dc = c2 * childPrice * specialDc print(f'유아 {c1}명 요금: {formatedNumber(cp)}원') print(f'유아 할인 대상 {c2}명 요금: {formatedNumber(cp_dc)}원') ip = i1 * infantPrice ip_dc = i2 * infantPrice * specialDc print(f'소아 {i1}명 요금: {formatedNumber(ip)}원') print(f'소아 할인 대상 {i2}명 요금: {formatedNumber(ip_dc)}원') ap = a1 * adultPrice ap_dc = a2 * adultPrice * specialDc print(f'성인 {a1}명 요금: {formatedNumber(ap)}원') print(f'성인 할인 대상 {a2}명 요금: {formatedNumber(ap_dc)}원') print(f'Total: {c1 + c2 + i1 + i2 + a1 + a2}명') print(f'TotalPrice: {formatedNumber(cp + cp_dc + ip + ip_dc + ap + ap_dc)}원') childCnt = int(input('유아 입력: ')) specialDcChildCnt = int(input('할인 대상 유아 입력: ')) infantCnt = int(input('소아 입력: ')) specialDcInfantCnt = int(input('할인 대상 소아 입력: ')) adultCnt = int(input('성인 입력: ')) specialDcadultCnt = int(input('할인 대상 성인 입력: ')) printAirPlaneReceipt(childCnt,specialDcChildCnt,infantCnt,specialDcInfantCnt,adultCnt,specialDcadultCnt)
Python
복사
# 재귀함수를 이용해서 팩토리얼 함수를 만들어보기 def factorial(n): if n == 1: return 1 return factorial(n-1) num = int(input('input number: ')) print(format(factorial(num),','))
Python
복사
# 단리/월복리 계산기 함수를 만들자 # 단리 함수 def singleRate(m,t,r): totalMoney = 0 totalRateMoney = 0 for i in range(t): totalRateMoney += m * (r * 0.01) totalMoney = m + totalRateMoney return int(totalMoney) # 소수점은 모두 제거 # 월복리 함수 def multiRate(m,t,r): totalMoney = m t = t * 12 mr = (r / 12) * 0.01 for i in range(t): totalMoney += totalMoney * mr return int(totalMoney) money = int(input('예치금(원): ')) term = int(input('기간(년): ')) rate = int(input('연이율(%): ')) print('단리 계산기') print(format(singleRate(money,term,rate),',')) print('복리 계산기') print(format(multiRate(money,term,rate),','))
Python
복사
# 등차수열의 n번째 값과 합을 출력하는 함수를 만들어보자. a1 = int(input('a1 입력: ')) d = int(input('공차 입력: ')) n = int(input('n 입력: ')) def sequence(a,d,n): valueN = 0; sumN = 0; i = 1 while i <= n: #n번째 항까지 수행 valueN = a + (i-1)*d sumN = sumN + valueN print(f'{i}번째 항의 값: {valueN}') print(f'{i}번째 항까지의 합: {sumN}') i += 1 sequence(a1,d,n)
Python
복사
# 등비수열의 n번째 값과 합을 출력하는 함수 a1 = int(input('a1 입력: ')) r = int(input('공비 입력: ')) n = int(input('n 입력: ')) def sequenceR(a,r,n): valueN = 0; sumN = 0; i = 1 while i <= n: #n번째 항까지 수행 valueN = a * r**(i-1) # 해당 항의 값을 구하고 sumN = sumN + valueN print(f'{i}번째 항의 값: {valueN}') print(f'{i}번째 항까지의 합: {sumN}') i += 1 sequenceR(a1,r,n)
Python
복사