함수 찐 찐 정복

도도요닝·2022년 9월 7일
0

return이 없는 함수

def selfintroduction(name, age, address):
    print(f"나는 {name}이고, {age}살이고 {address}에 거주합니다.")

selfintroduction("똑똑2", 24, "경기도")

>>>나는 똑똑2이고, 24살이고 경기도에 거주합니다. 

파라미터가 존재하지 않지만, return 함수

import random

def sundaySchedule():
    li = ["하루종일 공부하기","하루종일 놀기","털기춤","섹시 웨이븡"]
    tjob = random.choice(li)
    return tjob

x = sundaySchedule()
print("일요일인 오늘은 "+x+"를  하는 날로 당첨되었습니다.")
# print("일요일인 오늘은 "+sundaySchedule()+"를 하는 날로 당첨되었습니다. )

>>> 일요일인 오늘은 하루종일 공부하기를  하는 날로 당첨되었습니다.
#예시도 무슨 하루종일 공부야 !!!!!!!!! 어이없어

2개의 리스트를 인자로 받아서 동일한 인덱스에 위치한 원소들을 곱하여 새로운 리스트를 도출하는 프로그램 예제

def listMul(x1, x2): #입력으로 2개의 리스트를 받음
	tlist=[] #동일한 인덱스 두 원소를 곱한 결과를 저장할 리스트
    for i in range(len(x1)):
    	tlist.append(x1[i]*x2[i])
    return tlist #리스트로 값을 돌려줌
    
li1 = [2,4,6,8,10]
li2= [1,2,3,7,9]

newList = listMul(li1,li2) #함수의 리턴 값 list를 newList에 할당함

print(f"li1 = {li1}")
print(f"li2 = {li2}")
print(f"두 리스트의 동일 인데스 원소의 곱셈 결과:{newList}")

>>> 
li1 = [2, 4, 6, 8, 10]
li2 = [1, 2, 3, 7, 9]
두 리스트의 동일 인데스 원소의 곱셈 결과:[2, 8, 18, 56, 90]
def evOdGrouping(): #입력받은 데이터를 짝수와 홀수로 그룹핑하는 함수
    i=1 #함수 내에서 할당한 변수는 함수 내에서만 유효
    while i <= 10:
        in1 = int(input(f"{i}번째 값으로 -100 ~ 100 사이의 정수를 입력하세요. :"))
        if in1 % 2 == 0 : #짝수이면
            elist.append(in1) #짝수들
        else : #홀수이면
            olist.append(in1) #홀수들
        i += 1 #i값을 1씩 증가시킴

def mulElements(li):#리스트의 원소들을 모두 곱해 리턴
    mul =1 #곱셈의 결과 저장 변수
    for el in li:
        mul*=el
    return mul #return시 mul값을 돌려줌

elist = [] #짝수의 모음
olist = [] #홀수의 모음
 
evOdGrouping() #gkatnghcnf

print(f"elist = {elist}, olist ={olist}")
print(f"짝수들의 곱 :{mulElements(elist)}")
print(f"홀수들의 곱 :{mulElements(olist)}")

>>> 1번째 값으로 -100 ~ 100 사이의 정수를 입력하세요. : [입력창]
1번째 값으로 -100 ~ 100 사이의 정수를 입력하세요. :1
2번째 값으로 -100 ~ 100 사이의 정수를 입력하세요. :2
3번째 값으로 -100 ~ 100 사이의 정수를 입력하세요. :3
4번째 값으로 -100 ~ 100 사이의 정수를 입력하세요. :4
5번째 값으로 -100 ~ 100 사이의 정수를 입력하세요. :5
6번째 값으로 -100 ~ 100 사이의 정수를 입력하세요. :6
7번째 값으로 -100 ~ 100 사이의 정수를 입력하세요. :7
8번째 값으로 -100 ~ 100 사이의 정수를 입력하세요. :-8
9번째 값으로 -100 ~ 100 사이의 정수를 입력하세요. :-9
10번째 값으로 -100 ~ 100 사이의 정수를 입력하세요. :-10
elist = [2, 4, 6, -8, -10], olist =[1, 3, 5, 7, -9]
짝수들의 곱 :3840
홀수들의 곱 :-945

함수를 이용해서 평균과 분산 구하기

#variance 구하기_함수 응용
import random
li1 =[] #리스트
li1_avg = None #리스트 1의 평균값

for _ in range(50):#range에서 넘겨주는 값을 사용하지 않을 때 _를 사용함
    li1.append(random.randint(1,50))

print(f"li1 = {li1}")

#함수의 정의를 함수의 호출 이전에 하면 문제없음.
def average(li):
    sum = 0
    for i in li:
        sum += i 
        return (sum/len(li))

def variance(li,avg):
    squaredAdd = 0
    for i in li:
        squaredAdd += (i-avg)**2
    return squaredAdd/len(li)

li1_avg = average(li1)
li1_var = variance(li1, li1_avg)

print(f"li1의 평균 : {li1_avg}, li1의 분산 : {li1_var:.4f}")

람다함수

람다함수는 익명함수
def가 정상함수

lambda 넘겨줄 인자들 (arguments) : 표현식(expression)
lambda 함수는 return구문을 사용하지 않는다.

lambda 넘겨줄 인자들 (arguments) : 표현식(expression)
square = lambda a:a**2
x = square(3)
print(x)
#인자의 갯수는 일치해야 함(선언과 동시에 호출)
x = (lambda a,b : a+b)(3,5)
print(f"a+b의 결과는 {x}")
def power(n):
	return lambda x : x**n
    
 orderPower = power(4)
 print(f"3**4의 값은 : {orderPower(3)}")
 
 >> 3**4의 값은 : 81

map(function, iterable1, iterable2,...)

def mul(x,y):
	return x,y
x = map(mul,("orange",'banana','strawberry'),('노랗다',"길다","빨갛다"))

x=list(x)
print(f"x={x}")

y=map(lambda a,b : a+b,("orange",'banana','strawberry'),('노랗다',"길다","빨갛다"))
y = list(y)
print(f"y = {y}")
>>>
x=[('orange', '노랗다'), ('banana', '길다'), ('strawberry', '빨갛다')]
y = ['orange노랗다', 'banana길다', 'strawberry빨갛다']

filter(조건함수(function), iterable) 함수

def odd(x):
	return True if x %2 ==1 else False
    
li = list(range(1,11))
oddlterator = filter(odd, li)

oddList = list(oddlterator)
pritn(f"일반함수를 사용한 홀수 원소들의 필터링 결과 : {oddList}")
>>>일반함수를 사용한 홀수 원소들의 필터링 결과 : [1, 3, 5, 7, 9]

### 람다함수 이용
oddlter = filter(lambda x : x%2 == 1, li)
oddLi = list(oddlter)
print(f"람다함수를 사용한 홀수 원소들의 필터링 결과 : {oddLi}")
>>>람다함수를 사용한 홀수 원소들의 필터링 결과 : [1, 3, 5, 7, 9]

0개의 댓글