039 함수 이해하기(def)
1. 오라클을 배울 때 함수를 다음과 같이 사용했었음.
select max(sal)
from emp;
2. 파이썬 문자열 메소드(함수) 사용하는 방법
'smith'.upper()
3. 파이썬 리스트 메소드(함수) 사용하는 방법
a = []
a.append(1)
a.append(2)
a
4. 외부 모듈의 함수
내장되어 있는 함수 말고 불러와야 쓸 수 있는 함수를 쓸 때 외부를 import해야함.
import math # math라는 모듈(module)을 불러오겠다.
math.sqrt(4)
모듈이란? 특정 목적을 가지고 만든 프로그램 코드들의 모음
math라는 모듈은 수학식을 파이썬으로 구현하고 싶을 때 필요한 함수들이 코딩되어 있음.
내게 필요한 함수를 사용하려면 직접 만들어야 함.
누군가가 만들어놓은 함수가 있다면 그냥 가져다 쓰면 제일 좋고 그렇지 않고 없다면 내가 직접 만들어야 함.
* 함수 생성 방법
def 함수명:
실행문
return 출력값이 있는 변수명
ㅁ파이썬에서 콜론(:)으로 끝을 맺는 경우 4가지
"""
1. if문 종료시
if 조건:
실행문
2. loop문 종료시
for i in range(1,11):
실행문
3. 함수 생성시
def 함수이름(입력매개변수):
함수 실행문
4. 클래스 생성시
class 클래스이름:
"""
예제. 함수만들기
def add_number(n1,n2):
result = n1 + n2
return result
print(add_number(1,2) )
문제148. 다음의 my_abs라는 함수를 생성하시오 (절대값을 출력하는 함수)
def my_abs(num):
if num < 0:
return (-1)*num
else:
return num
print(my_abs(-3)) #3
문제149. 유클리드 거리를 계산하는 함수를 distance_function이라는 이름으로 생성하시오.
A지점 : (2,3)
B지점 : (4,5)
위의 A지점과 B지점 사이의 유클리드 거리계산을 함수를 이용해 구하시오.
import math #보통 import는 함수 밖에서 씀.
def distance_function(x1,y1,x2,y2):
result1 = (x2-x1)**2
result2 = (y2-y1)**2
result3 = math.sqrt(result1+result2)
return result3
거리계산이 필요한 이유?
ex) 이 환자가 유방암 환자인지 아닌지를 조직검사 하기 전에 엑스레이 사진으로만 판별하고 싶다면 수많은 엑스레이 사진을 학습한 인공지능이 양성종양인지 악성종양인지 판별해줌. 판별할 때 바로 거리를 계산해서 알아냄.
문제150. 맨하탄 거리공식
def manhattan_distance(x1,y1,x2,y2):
result1 = (x2-x1)
result2 = (y2-y1)
result3 = my_abs(result1+result2)
return result3
print(manhattan_distance(2,3,4,5))
ㅇ함수를 만들어서 사용할 때 유의할 점
1. 반복되는 코드가 하나의 긴 코드에서 반복되어 사용하고 있다면 함수를 만들어서 코드를 간격하게 해야함.
2. 함수는 가급적 재사용이 가능해야함.
3. 함수는 가급적 기능이 하나여야 함.
(단순하게 만들어야 나중에 긴 코드를 작성할 때 이런 작은 함수들을 가져다가 레고 조립하듯이 조립해서 사용 가능)
문제151. 아래의 오라클 함수를 파이썬으로 구현하시오.
-- SQL
select initcap('smith')
from dual; # Smith
# 파이썬
def initcap(name):
result = name[0].upper() + name[1:].lower()
return result
print(initcap('smith'))
문제152. 키오스크 커피머신의 코드를 간결하게 하기 위해서 아래의 코드를 함수로 만들어서 코드에 추가하시오.
cafe_dict['주문번호'].append(order_no)
cafe_dict['커피종류'].append('아메리카노')
cafe_dict['수량'].append(cup)
def data_add(order_no,coffee_type,cup):
cafe_dict['주문번호'].append(order_no)
cafe_dict['커피종류'].append(coffee_type)
cafe_dict['수량'].append(cup)
040 함수 인자 이해하기
인자란 함수에서 사용한 입력 매개변수를 말함.
def add_text(t1,t2):
return t1 + ' '+ t2
# 이때 t1, t2를 입력매개변수라고 함
만약 매개변수에 아무것도 입력하지 않고 실행해도 실행되게끔 하려면 기본값이 출력되게끔 함수를 구성해야함.
def add_text(t1, t2 ='최고'):
return t1 + ' ' +t2
print(add_text('파이썬','데이터 분석'))
print(add_text('파이썬'))
#파이썬 데이터 분석
#파이썬 최고
문제153. 아래의 data_add 함수를 실행할 때 기본값을 할당하는 함수로 생성해서 아래와 같이 실행되게 하시오.
data_add('아메리카노')
data_add('카페라떼')
data_add('카페모카')
믄제154. 파이썬으로 현재 날짜와 현재 시간을 확인하시오.
from datetime import datetime
now = str(datetime.now())
print(now)
문제155. data_add 함수에 주문날짜를 추가하시오.
cafe_dict = {}
cafe_dict['주문번호'] = []
cafe_dict['주문시간'] =[]
cafe_dict['커피종류'] = []
cafe_dict['수량'] = []
def data_add(c_type):
from datetime import datetime
now = str(datetime.now())
cafe_dict['주문번호'].append(order_no)
cafe_dict['주문시간'].append(now)
cafe_dict['커피종류'].append(c_type)
cafe_dict['수량'].append(cup)
문제156. 아래의 SQL을 판다스로 구현하시오.
-- SQL
select max(sal)
from emp;
# 판다스
import pandas as pd
emp = pd.read_csv("c:\\data\\emp2.csv")
emp['sal'].max()
문제157. 아래의 SQL을 판다스로 구현하시오.
-- SQL
select sum(sal)
from emp;
# 판다스
import pandas as pd
emp = pd.read_csv("c:\\data\\emp2.csv")
emp['sal'].sum()
문제158. 아래의 SQL을 판다스로 구현하시오.
-- SQL
select sum(sal)
from emp
where deptno = 20;
# 판다스
import pandas as pd
emp = pd.read_csv("c:\\data\\emp2.csv")
emp['sal'][emp['deptno']==20].sum()
문제159. 아래의 SQL을 판다스로 구현하시오.
-- SQL
select deptno, sum(sal)
from emp
group by deptno;
# 판다스
import pandas as pd
emp = pd.read_csv("c:\\data\\emp2.csv")
result = emp.groupby('deptno')['sal'].sum().reset_index()
result
reset_index()를 쓰지 않으면 결과가 data frame형식으로 나오지 않음.
문제160. 아래의 SQL을 판다스로 구현하시오.
-- SQL
select job, sum(sal)
from emp
group by job;
import pandas as pd
emp = pd.read_csv("c:\\data\\emp2.csv")
result = emp.groupby('job')['sal'].sum().reset_index()
result
커피키오스크 최종
import pandas as pd
print('='*16,' CAFE ','='*16)
print('1번:아메리카노:1500원 \n2번:카페라떼:2500원 \n3번:카페모카:3500원 \n4번:결산(관리자용)')
print('='*40)
c_type = {1:'아메리카노',2:'카페라떼',3:'카페모카'}
c_stock = {1:20,2:10,3:30}
c_price = {1:1500,2:2500,3:3500}
coupon = 0
order_no = 1
cafe_dict = {}
cafe_dict['주문번호'] = []
cafe_dict['주문시간'] =[]
cafe_dict['커피종류'] = []
cafe_dict['수량'] = []
cafe_dict['가격'] = []
def data_add(c_type):
from datetime import datetime
now = str(datetime.now())
cafe_dict['주문번호'].append(order_no)
cafe_dict['주문시간'].append(now)
cafe_dict['커피종류'].append(c_type)
cafe_dict['수량'].append(cup)
cafe_dict['가격'].append(price)
while True:
# 전체 품절
if c_stock[1] == 0 and c_stock[2] == 0 and c_stock[3] == 0:
print('\n\n\n모든 커피가 품절입니다.')
print('='*40,'\n')
break
num = int(input('\n%d번손님,주문하시겠습니까? \n메뉴를 골라주세요. 번호를 눌러주세요.'%order_no))
# 주문
if num < 4:
print('%s를 선택하셨습니다.'%c_type[num])
if c_stock[num] == 0:
print('\n%s : 품절'%c_type[num])
print('\n다시 입력해주세요~')
continue
cup = int(input('몇 잔 주문하시겠습니까? '))
if cup > c_stock[num]:
print('\n죄송합니다. 주문량에 비해 %s가 부족합니다.'%c_type[num])
print('현재 주문 가능한 수량은 %d잔 입니다.' %c_stock[num], '다시 입력해주세요.')
cup = int(input('몇 잔 주문하시겠습니까? '))
price = c_price[num] * cup
print('\n결제하실 금액은 %d원 입니다.'%price)
money = int(input('돈을 입력해주세요 ~ '))
if c_stock[num] >= cup and money >= price:
print('\n[주문번호 %d]'%order_no)
print('%s가 나왔습니다. 거스름돈은 '%c_type[num],money - price,'원 입니다.')
print('쿠폰이 %d개 발급되었습니다.(20개 모으면 한잔 무료)'%cup)
c_stock[num] -= cup
coupon += cup
print('현재 쿠폰이 %d개 있습니다.'%coupon)
print('='*40,'\n')
data_add(c_type[num])
order_no += 1
elif c_stock[num] >= cup and money < price:
print('금액이 부족합니다. 돈을 반환합니다.')
print('='*40,'\n')
continue
# 결산(관리자용)
elif num == 4:
cafe = pd.DataFrame(cafe_dict)
print(cafe)
break
# 메뉴 없음
else:
print('메뉴가 없습니다.')
print('='*40,'\n')
continue
'Study > class note' 카테고리의 다른 글
python / 함수(지역변수, 전역변수, return값) (0) | 2021.12.15 |
---|---|
커피키오스크 최최종 (0) | 2021.12.15 |
python / 튜플형 , 사전형 자료 이해하기 (0) | 2021.12.14 |
python / 리스트 이해하기 (0) | 2021.12.13 |
python / 문자열, 이스케이프 문자 (0) | 2021.12.13 |