: 사전에 정의된 함수에 따라 정의된 코딩을 실행하는 코딩 (묶음?) 이라는 표현이 맞을지 모르겠다...ㅋ
# 은행에서...
# 처음 방문하여 계좌를 생성할 경우, oepn_account() 함수를 생성
def open_account():
print("새로운 계좌가 생성되었습니다.")
open_account() #oepn_account 함수 호출
# 결과 값 : 새로운 계좌가 생성되었습니다.
# 함수 응용, 강의 보다 생각나서, 사용자 정보를 받아봄
def open_account_cus(cus):
print("{0}님의 새로운 계좌가 생성되었습니다.".format(cus))
open_account_cus("유재석") #oepn_account_cus 함수 호출
# 결과 값 : 유재석님의 새로운 계좌가 생성되었습니다.
# 입금 함수, 'deposit' 이라는 입금 함수를 생성. 해당 함수는 잔액(balance) 와 입금금액(money)을 변수로 받고,
입금이 진행되면 잔액(balance) 와 입금금액(money)를 합하여 값을 반환(return)해주는 것으로 정의
def deposit(balance, money) : # 입금 함수
print("입금이 완료되었습니다. 잔액은 {0} 원입니다." .format(balance + money))
return balance + money
balance = 0 # 잔액 초기 값
balance = deposit(balance, 1000) # deposit 함수 호출 1000 입금
# 결과 값 : 입금이 완료되었습니다. 잔액은 1000 원입니다.
print(balance) # 1000
# 출금 함수, 'withdraw' 라는 출금 함수를 생성. 해당 함수는 잔액과 출금액을 변수로 받고, 조건문에 따라 잔금>출금액 일 경우, 출금 진행, 잔금 < 출금액 일 경우 출금 진행하지 않는 것으로 정의. 잔액값 반환
def withdraw(balance, money): #출금 함수
if balance >= money : # 잔액이 출금보다 많으면
print("출금이 완료되었습니다. 잔액은 {0}원 입니다." .format(balance - money))
return balance - money
else :
print("출금이 완료되지 않았습니다. 잔액은 {0}원 입니다." .format(balance))
return balance
balance = 1000 #잔액 초기 값
print("잔액은 {0}원 입니다.".format(balance))
# 결과 값 : 잔액은 1000원 입니다.
balance = withdraw(balance, 2000)
# 결과 값 : 출금이 완료되지 않았습니다. 잔액은 1000원 입니다.
balance = withdraw(balance, 500)
# 결과 값 : 출금이 완료되었습니다. 잔액은 500원 입니다.
# 야간 수수료가 발생할 경우.(잔액 비교 없이 단순 출력만 테스트)
def withdraw_night(balance, money): # 저녁에 출금하는 함수(수수료 추가)
commission = 100 # 수수료 100 원
return commission, balance - money - commission # 튜플 형식으로 값 반환
balance = 1000 #잔액
print("잔액은 {0}원 입니다.".format(balance))
# 결과 값 : 잔액은 1000 원입니다.
commission, balance = withdraw_night(balance,500)
print("수수료 {0} 원이며, 잔액은 {1} 원입니다. ".format(commission, balance))
# 결과 값 : 수수료 100 원이며, 잔액은 400 원입니다.
: 각 항목에 입력하지 않아도 사용 가능하도록 적용되는 기본 값 설정
# profile 함수 정의, (이름, 나이, 주언어) 를 value로 갖는 함수.
def profile(name, age, main_lang) :
print("이름 : {0} \t나이 : {1}\t주 사용 언어 : {2}" \
# 탈출문자 이용하여 내용 표기 \t :Tab , \Enter : 줄바꿈
.format(name, age, main_lang))
# 기존에 사용하던 방법 처럼 기본 값을 사용하지 않고 개별 입력
def profile(name, age, main_lang) :
print("이름 : {0} \t나이 : {1}\t주 사용 언어 : {2}" \
# 탈출문자 이용하여 내용 표기 \t :Tab , \Enter : 줄바꿈
.format(name, age, main_lang))
profile("유재석", 20, "파이썬")
# 결과 값 : 이름 : 유재석 나이 : 20 주 사용 언어 : 파이썬
profile("김태호", 25, "자바")
# 결과 값 : 이름 : 김태호 나이 : 25 주 사용 언어 : 자바
# 공통된 값을 가질 경우, 기본 값을 설정하면 유용하게 사용할 수 있음.
# 같은 학교, 같은 학년, 같은 반, 같은 수업 으로 나이, 사용 언어 가 같은 경우, 공통된 age, main_lang을 입력하지 않아도 기본 값으로 입력이 가능하다. 별도로 입력할 경우 기본 값 외 별도 값이 입력됨.
def profile_def(name, age=17, main_lang="파이썬") :
print("이름 : {0} \t나이 : {1}\t주 사용 언어 : {2}" \
.format(name, age, main_lang))
profile_def("유재석")
# 결과 값 : 이름 : 유재석 나이 : 17 주 사용 언어 : 파이썬
profile_def("김태호")
# 결과 값 : 이름 : 김태호 나이 : 17 주 사용 언어 : 파이썬
profile_def("조세호",20,"자바")
# 결과 값 : 이름 : 조세호 나이 : 20 주 사용 언어 : 자바
profile_def("정형돈",age=15)
# 결과 값 : 이름 : 정형돈 나이 : 15 주 사용 언어 : 파이썬
# 키워드 값 : 순서에 상관없이 키워드 입력하여 결과 값 출력시에도 정상적으로 확인 가능.
def profile(name, age, main_lang):
print(name, age, main_lang)
profile(name = "유재석", main_lang ="파이썬", age=20)
# 결과 값 : 유재석 20 파이썬
profile(main_lang ="자바", age=25, name = "김태호")
# 결과 값 : 김태호 25 자바
: 인자의 입력 갯수가 다르거나, 구조가 바뀔 수 있을 경우 사용이 용의
# 가변인자를 사용하지 않을 경우.
# 5개의 language 를 입력할 수 있는 형태로 정의하였을 때, 사람마다 1~5개 중 입력 할 수 있는 항목 갯수가 다른 경우가 발생함. 항목의 갯수를 맞추기 위해 "" 을 입력하는 불편함이 있음.
def profile(name, age, lang1, lang2, lang3, lang4, lang5):
print("이름 : {0}\t나이 : {1}\t" .format(name, age), end =" ") # end =" " 줄바꿈을 하지 않고, 띄어쓰기 1칸이 나오고 아래 문장 출력
print(lang1, lang2, lang3, lang4, lang5)
profile("유재석", 20, "Python","Java","C","C++","C#")
# 결과 값 : 이름 : 유재석 나이 : 20 Python Java C C++ C#
profile("김태호", 25, "Kotlin","Swift","","","")
# 결과 값 : 이름 : 김태호 나이 : 25 Kotlin Swift
# lang의 사용 갯수가 바뀌거나 사람마다 사용가능한 인자수가 다를 경우, 수정 소요가 많음.
# 가변 인자 사용 할 경우,
def profile(name, age, *language):
print("이름 : {0}\t나이 : {1}\t" .format(name, age), end =" ") # end =" " 줄바꿈을 하지 않고, 띄어쓰기 1칸이 나오고 아래 문장 출력
for lang in language :
print(lang, end= " ")
print()
profile("유재석", 20, "Python","Java","C","C++","C#","JavaScript") # lang 6개 입력
# 결과 값 : 이름 : 유재석 나이 : 20 Python Java C C++ C# JavaScript
profile("김태호", 25, "Kotlin","Swift") # lang 2개 입력
# 결과 값 : 이름 : 김태호 나이 : 25 Kotlin Swift
# lang 항목 갯수가 6개, 2개로 다를 경우에도 정상적으로 출력 가능
: 지역변수 - 함수 내에서만 적용됨, 전역변수 - 전체에서 적용됨
# Case 1. gun =10 이라는 변수가 함수 전체에서 사용 할 수 있는 전역 변수로 선언 되었으나, checkpoint 함수내(지역)에서는 gun에 대한 입력 값이 없어 Error가 발생함.
gun = 10
def checkpoint(soldiers): # 경계근무
gun = gun - soldiers
print("[함수 내] 남은 총 : {0}" .format(gun))
print("전체 총 : {0}" .format(gun))
checkpoint(2) # 2명이 경계 근무를 나감 , 함수 내에 gun이 선언되지 않았기 때문에 오류가 발생
print("남은 총 : {0}" .format(gun))
# Case 2.
전역 변수로 선언된 gun 10 과 checkpoint 내 선언된 지역변수 20에 따른 결과 값이 상이함을 확인 할 수 있음.
print("전체 총~ : 부분에서 전역 변수 값 10을 불러오고
checkpoint(2) 에서 정의된 함수에 따라 18을 불러온 이후에도 해당 gun =18 이라는 값은 함수 내에만 존재하므로
다시 gun 값을 출력하여도 처음 정의된 변수 10을 출력하게 된다.
gun = 10
def checkpoint(soldiers): # 경계근무
gun = 20 # 지역 변수
gun = gun - soldiers
print("[함수 내] 남은 총 : {0}" .format(gun)) # 출력 값 : 18
print("전체 총 : {0}" .format(gun)) # 출력 값 : 10
checkpoint(2) # 2명이 경계 근무를 나감, 출력 값 18
print("남은 총 : {0}" .format(gun)) # 출력 값 : 10
# Case 3. 해결방법 1, 전역 변수를 함수내에 호출하는 방법
# 전역 변수 선언 후, 지역변수 앞에 global 이라 명시하면 전역변수 값을 사용가능 하나, 코드 관리가 어려워 권장하는 방법은 아님.
gun = 10
def checkpoint(soldiers): # 경계근무
global gun # 전역 변수, 코드 관리가 어려워 권장하는 방법이 아님.
gun = gun - soldiers
print("[함수 내] 남은 총 : {0}" .format(gun))
print("전체 총 : {0}" .format(gun)) # 결과 값 : 10
checkpoint(2) # 2명이 경계 근무를 나감 # 결과 값 : 8
print("남은 총 : {0}" .format(gun)) # 결과 값 : 8
# Case 4. 해결방법 2, 지역변수를 사용하며, 해당 값을 튜플 형태로 반환하는 방법. 권장 사항
# return 을 이용하여 지역 변수 내에서 처리되었던 값을 다시 반환하여 전달함.
gun=10
def checkpoint_ret(gun, soldiers):
gun = gun - soldiers
print ("[함수 내] 남은 총 : {0}" .format(gun))
return gun
print("전체 총 : {0}" .format(gun)) # 결과 값 10
gun = checkpoint_ret(gun,2) # checkpoint 함수 처리, 결과 값 : 8
print("남은 총 : {0}" .format(gun)) # checkpoint 함수 처리 후, return 된 gun 값 8을 다시 받음, 결과 값 : 8
-----------------------------------------------------------------------------------------------
# Quiz 6. 표준 체중을 구하는 프로그램을 작성하시오.
* 표준 체중 : 각 개인의 키에 적당한 체중
(성별에 따른 공식)
남자 : 키(m) X 키(m) X 22
여자 : 키(m) X 키(m) X 21
조건 1 : 표준 체중은 별도의 함수 내에서 계산
* 함수명 : std_weight
* 전달값 : 키(height), 성별(gender)
조건 2 : 표준 체중은 소수점 둘째자리까지 표시
(출력 예제)
# 키 175cm 남자의 표준 체중은 67.38kg 입니다.
-----------------------------------------------------------------------------------------------
Ans 1. 내가 작성한 코딩
def std_weight(height, gender) :
if gender == 1 :
weghit = round( height * height * 0.0001 * 22, 2 )
print("{0}cm 남자의 표준 체중은 {1}kg 입니다." .format(height, weghit))
else :
weghit = round( height * height * 0.0001 * 21, 2 )
print("{0}cm 남자의 표준 체중은 {1}kg 입니다." .format(height, weghit))
weight = std_weight(175,1)
weight = std_weight(170,2)
weight = std_weight(int(input("키 입력하세요?")), int(input("성별? 남자는 1, 여자는 2 입력하세요.")))
''' 결과 값 출력 시, 남자, 여자 및 입력 받은 값으로 반환 하는 방식으로도 작성해봄
175cm 남자의 표준 체중은 67.38kg 입니다.
170cm 남자의 표준 체중은 60.69kg 입니다.
키 입력하세요?175
성별? 남자는 1, 여자는 2 입력하세요.1
175cm 남자의 표준 체중은 67.38kg 입니다.
'''
-----------------------------------------------------------------------------------------------
Ans 2. 나도코딩 님 답안
def std_weight(height, gender):
if gender =="남자" :
return height * height * 22
else :
return height * height * 21
height = 175 # cm 단위
gender = "남자"
weight = round(std_weight(height /100 , gender),2)
print("키 {0}cm {1}의 표준 체중은 {2}kg 입니다. ".format(height, gender, weight))
# 결과 값 : 키 175cm 남자의 표준 체중은 67.38kg 입니다.
-----------------------------------------------------------------------------------------------
FeedBack
if 문 안에 결과 값을 출력 하는 내용 까지 입력하였으나,
나도코딩님은 return 으로 값을 반환하여 좀 더 깔끔한 코딩이 가능했음.
유튜버 '나도코딩' 님의 영상을 보며 공부 및 노트 작성합니다.
함께 공부해 나가실 분은
www.youtube.com/watch?v=kWiCuklohdY&feature=youtu.be
6시간이면 된다고 하셨지만........전 늦었습니다. 먼저가세요 ㅋㅋㅋㅋㅋ
[Python 파이썬 독학 자가 점검] (0) | 2020.09.26 |
---|---|
[Python 파이썬 독학 6일차] (0) | 2020.09.25 |
[Python 파이썬 독학 4일차] (0) | 2020.09.22 |
[Python 파이썬 독학 3일차] (0) | 2020.09.22 |
[Python 파이썬 독학 2일차] (0) | 2020.09.22 |
댓글 영역