함수 정의
def open_account():
print("새로운 계좌가 생성되었습니다.")
open_account()
# 새로운 계좌가 생성되었습니다.
입금
def deposit(balance, money): #입금
print("입금이 완료되었습니다. 잔액은 {0} 원입니다.".format(balance + money))
return balance + money
balance = 0 # 잔액
balance = deposit(balance, 1000)
# 입금이 완료되었습니다. 잔액은 1000 원입니다.
# 1000
출금
def deposit(balance, money): #입금
print("입금이 완료되었습니다. 잔액은 {0} 원입니다.".format(balance + money))
return balance + money
def withdraw(balance, money): #출금
if balance >= money: #잔액이 출금보다 많으면
print("출금이 완료되었습니다. 잔액은 {0} 원입니다.".format(balance - money))
return balance - money
else:
print("출금이 완료되지 않았습니다. 잔액은 {0} 원입니다.".format(balance))
return balance
balance = 0 # 잔액
balance = deposit(balance, 1000)
balance = withdraw(balance, 2000)
# 입금이 완료되었습니다. 잔액은 1000 원입니다.
# 출금이 완료되지 않았습니다. 잔액은 1000 원입니다.
balance = 0 # 잔액
balance = deposit(balance, 1000)
balance = withdraw(balance, 500)
# 입금이 완료되었습니다. 잔액은 1000 원입니다.
# 출금이 완료되었습니다. 잔액은 500 원입니다.
수수료
def deposit(balance, money): #입금
print("입금이 완료되었습니다. 잔액은 {0} 원입니다.".format(balance + money))
return balance + money
def withdraw(balance, money): #출금
if balance >= money: #잔액이 출금보다 많으면
print("출금이 완료되었습니다. 잔액은 {0} 원입니다.".format(balance - money))
return balance - money
else:
print("출금이 완료되지 않았습니다. 잔액은 {0} 원입니다.".format(balance))
return balance
def withdraw_night(balance, money): #저녁에 출금
commission = 100 # 수수료 100원
return commission, balance - money - commission
balance = 0 # 잔액
balance = deposit(balance, 1000)
commission, balance = withdraw_night(balance, 500)
print("수수료는 {0} 원이며, 잔액은 {1} 원입니다.".format(commission, balance))
# 입금이 완료되었습니다. 잔액은 1000 원입니다.
# 수수료는 100 원이며, 잔액은 400 원입니다.
def profile(name, age, main_lang):
print("이름 : {0}\t나이 : {1}\t주 사용 언어: {2}"\
.format(name, age, main_lang))
profile("유재석", 20, "파이썬")
profile("김태호", 25, "자바")
# 이름 : 유재석 나이 : 20 주 사용 언어: 파이썬
# 이름 : 김태호 나이 : 25 주 사용 언어: 자바
# # 같은 학교 같은 학년 같은 반 같은 수업.
# # 이런 조건일 때 사용되는 것이 기본 값.
def profile(name, age = 17, main_lang = "파이썬"):
print("이름 : {0}\t나이 : {1}\t주 사용 언어: {2}"\
.format(name, age, main_lang))
profile("유재석")
profile("김태호")
profile("하하", 25, "자바")
# 이름 : 유재석 나이 : 17 주 사용 언어: 파이썬
# 이름 : 김태호 나이 : 17 주 사용 언어: 파이썬
# 이름 : 김태호 나이 : 25 주 사용 언어: 자바
def profile(name, age, main_lang):
print(name, age, main_lang)
# 키워드로 지정해서도 순서대로 입력하지 않아도 순서대로 출력이 가능하다.
profile(name = "유재석", main_lang = "파이썬", age = 20)
profile(main_lang= "자바", age = 25, name = "김태호")
# 유재석 20 파이썬
# 김태호 25 자바
def profile(name, age, lang1, lang2, lang3, lang4, lang5):
print("name : {0}\tage : {1}\t".format(name, age), end=" ")
# end = " " 는 프린트문이 끝날 때 줄바꿈을 하지않고, 이어서 밑에 있는 문장을 출력한다.
print(lang1, lang2, lang3, lang4, lang5)
profile("jay", 20, "Python", "Java", "C", "C++", "C#")
profile("chris", 25, "Kotlin", "Swift", "", "", "")
# name : jay age : 20 Python Java C C++ C#
# name : chris age : 25 Kotlin Swift
하지만,
만약에 빈값이 있을 때, 매번 빈값("")을 넣어줘야한다.
혹은 jay가 할줄 아는 언어가 추가된다면? (함수를 바꿔줘야하는 상황...)
함수를 바꾸지 않고, 이럴때 쓸 수 있는 것이 "가변인자"
def profile(name, age, *language):
print("name : {0}\tage : {1}\t".format(name, age), end=" ")
for lang in language:
print(lang, end=" ")
print()
profile("jay", 20, "Python", "Java", "C", "C++", "C#", "JavaScript")
profile("chris", 25, "Kotlin", "Swift")
# name : jay age : 20 Python Java C C++ C# JavaScript
# name : chris age : 25 Kotlin Swift
지역변수: 함수 내에서만 쓸수 있는거, 함수가 호출될때 만들어졌다가 함수 호출이 끝나면 사라지는 거
전역변수: 프로그램 내에서 어디서나 부를 수 있는 거
예제
gun = 10
def checkpoint(soldiers): # 경계근무
gun = gun - soldiers
print("[함수 내] 남은 총 : {0}".format(gun))
print("전체 총 : {0}".format(gun))
checkpoint(2) # 2명이 경계근무 나감
print("남은 총 : {0}".format(gun))
# 오류 발생
# UnboundLocalError: local variable 'gun' referenced before assignment
# "gun 이라는 함수는 할당이 안되었는데 사용되고 있다." 라는 오류
# checkpoint()라는 함수 내에서 만들어진 gun인데 초기화가 되지 않아서 사용이 불가능하다는 오류
gun = 10
def checkpoint(soldiers): # 경계근무
gun = 20
gun = gun - soldiers
print("[함수 내] 남은 총 : {0}".format(gun))
print("전체 총 : {0}".format(gun))
checkpoint(2) # 2명이 경계근무 나감
print("남은 총 : {0}".format(gun))
# 전체 총 : 10
# [함수 내] 남은 총 : 18
# 남은 총 : 10
gun = 10
def checkpoint(soldiers): # 경계근무
global gun # 전역 공간에 있는 gun을 사용
gun = gun - soldiers
print("[함수 내] 남은 총 : {0}".format(gun))
print("전체 총 : {0}".format(gun))
checkpoint(2) # 2명이 경계근무 나감
print("남은 총 : {0}".format(gun))
# 전체 총 : 10
# [함수 내] 남은 총 : 8
# 남은 총 : 8
일반적으로는 전역변수 많이 쓰게되면 코드 관리가 어려워서 권장되는 방법은 아님.
가급적 함수의 전달값 파라미터로 던져서 계산을 하고 반환값을 받아서 사용하는 방법을 사용해야함.
gun = 10
def checkpoint_return(gun, soldiers):
gun = gun - soldiers
print("[함수 내] 남은 총 : {0}".format(gun))
return gun
print("전체 총 : {0}".format(gun))
gun = checkpoint_return(gun, 2)
print("남은 총 : {0}".format(gun))
# 전체 총 : 10
# [함수 내] 남은 총 : 8
# 남은 총 : 8
표준 체중을 구하는 프로그램 작성
표준 체중: 각 개인의 키에 적당한 체중
성별에 따른 공식
- 남자: 키(m) x 키(m) x 22
- 여자: 키(m) x 키(m) x 21
조건1 : 표준 체중은 별도의 함수 내에서 계산
함수명 : std_weight
전달값 : 키(height), 성별(gender)
조건2 : 표준 체중은 소수점 둘째자리까지 표시
def std_weight(height, gender): # 키는 m 단위(실수), 성별은 "남자" / "여자"
if gender == "남자":
return height * height * 22
else:
return height * height * 21
height = 175 # cm 단위
gender = "남자"
weight = round(std_weight(height / 100, gender), 2) # 소수점 2째자리, round(, 2) 사용
print("키 {0}cm {1}의 표준 체중은 {2}kg 입니다.".format(height, gender, weight))
# 키 175cm 남자의 표준 체중은 67.38kg 입니다.