전달값, 변환값- 새로운 계좌 생성하고 입금,출금,수수료
def open_account():
print("새로운 계좌가 생성되었습니다.")
open_account()
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 #tuple 형식으로
1. 함수 정의할 때는 def를 쓰며 이전과는 다르게 print를 해도 바로 출력이 되지 않는다.
- 세 번째줄 open_account() 하고 정의된 함수를 호출했을 때 " 새로운 계좌가 생성되었습니다" 하고 출력됨.
2. 입금 함수는 두 번째 문단
첫 번째줄 deposit(계좌 총 금액, 넣는 금액) 을 입력했을 때
두 번째 줄 "입금이 완료되었습니다. 잔액은 _원입니다."라고 출력되며
세 번째 줄 계좌 총 금액+넣는 금액이 반환됨을 정의함.
3. 출금 함수는 세 번째 문단
첫 번째줄 withdraw(계좌 총 금액, 빼는 금액) 을 입력했을 때
두 번째 줄 "출금이 완료되었습니다. 잔액은 _원입니다."라고 출력되며
세 번째 줄 계좌 총 금액-빼는 금액이 반환됨을 정의함.
4. 수수료 함수는 네 번째 문단
withdraw_night(계좌 총 금액, 빼는 금액) 을 입력했을 때
첫 번째 줄에 수수료 commission을 정해준다
두 번째 줄 수수료, 총 금액 - 빼는 금액- 수수료가 결과로 반환됨을 정의함.
balance = 0 #잔액
balance = deposit(balance, 1000)
balance = withdraw(balance,2000)
print(balance)
commission, balance = withdraw_night(balance,500)
print("수수료는 {0}원이며, 잔액은 {1}원입니다".format(commission,balance))
1. 총 계좌가 0원으로 시작했다고 치면,
2. 1000원 입금하겠다는 deposit 함수 써서 출력 됨.
3. 2000원 출금하겠다는 withdraw 함수 씀
4. 그래서 지금 총 얼마가 있는지 보겠다
5. withdraw_night 함수에서 print 하는 것까지 정의했으면 좋았을 듯
terminal>>
입금이 완료되었습니다. 잔액은 1000원 입니다.
출금이 완료되지 않았습니다.잔액은 1000원 입니다.
1000
수수료는 100원이며, 잔액은 400원입니다
기본값 설정
def profile(name, age, main_lang):
print("이름:{0}\t나이:{1}\t주 사용 언어:{2}"\
.format(name,age,main_lang))
profile("유재석",20,"파이썬")
profile("김태호",25,"자바")
1. profile함수는 def profile(요소1,요소2, ...)
2. 글자 간 간격 띄울 땐 \t (역슬래쉬 t)
3. 글씨체 크기가 커서 같은 줄이지만 밑으로 내리고 싶을 땐 \ + c
Terminal>>
이름:유재석 나이:20 주 사 용 언어:파이썬 이름:김태호 나이:25 주 사 용 언어:자바
# 같은 학교 같은 학년 같은 반 같은 수업.(이름만 다름)
def profile(name, age=17, main_lang="파이썬"):
print("이름:{0}\t나이:{1}\t주 사용 언어:{2}"\
.format(name,age,main_lang))
profile("유재석")
profile("김태호")
1. 만약 특정 정보 빼고 같은 값을 주려면 그 안에 기본값을 입력
- age=17, main_lang="파이썬"
Terminal>>
이름:유재석 나이:17 주 사 용 언어:파이썬 이름:김태호 나이:17 주 사 용 언어:파이썬
def profile(name, age, main_lang):
print(name,age,main_lang)
profile(name="유재석",main_lang="파이썬",age=25)
1. 키워드값을 이용하는 경우 순서가 뒤바뀌어 함수가 입력되어도 정상 출력됨.
-세번째 줄 profile(name="유재석",main_lang="파이썬",age=25)
가변인자 *
# def profile(name, age, lan1,lang2,lan3,lan4,lan5):
# print("이름:{0}\t나이 :{1}\t".format(name,age), end=" ")
# print(lan1,lang2,lan3,lan4,lan5)
def profile(name, age,*language): #서로 다른 개수의 값 입력 시 가변인자*를 사용한 매개변수 이용
print("이름:{0}\t나이 :{1}\t".format(name,age), end=" ")
for lang in language:
print(lang,end=" ") #end는 줄바꿈 없이
print() #줄바꿈
profile("유재석",20,"파이썬","자바","씨","씨쁠쁠","씨샾")
# profile("김태호",25,"kotlin","swift","","","") #가변인자 사용 안할 때
profile("김태호",25,"kotlin","swift")
1. 첫 번째 문단에서는 def profile(이름,나이, 사용언어1,사용언어2...사용언어5) 모두 입력하는 함수 설정
2. 이때 .format(name,age), end =" " 의 뜻은 다음 줄에 있는 출력값도 같은 줄에 출력하겠다는 뜻.
원칙상 print는 한줄 한줄 입력시 한줄 한줄 출력됨.
3. 두 번째 문단에서는 사용 언어가 5개 이상 이거나 5개 미만인 경우를 위한 함수 설정
->def profile(이름,나이, *사용언어) 가변인자*를 사용한 매개변수 '사용언어'를 입력 !
4. for in 함수를 사용하여 변하는 값을 출력함.
5. print() 는 줄바꿈을 위한 것.
Terminal>>
이름:유재석 나이 :20 파이썬 자바 씨 씨쁠쁠 씨샾 이름:김태호 나이 :25 kotlin swift
지역변수(함수 내에서만 사용 가능) 과 전역변수(프로그램 내에서 언제든 불러옴)
-지역변수 예시
gun=10 #지역변수
def checkpoint(soldiers): #경계근무
gun=20
gun = gun-soldiers #checkpoint안에서 정의된 gun
print("[함수 내]남은 총:{0}.".format(gun))
print("전체 총:{0}".format(gun)) #지역변수 출력
checkpoint(2) #2명이 경계 근무 나감
print("남은 총:{0}".format(gun)) #지역변수 출력
terminal>>
전체 총:10
[함수 내]남은 총:18.
남은 총:10
1. checkpoint(soldiers)라는 함수 정의, 총이 20자루 있고 남은 총의 개수를 출력하겠다는 것.
2. 그런데 함수 밖에 있는 gun=10과 함수 안에 있는 gun=20, gun= gun-soldiers는 무엇이 다르냐!
-> 출력값에서 확인가능. 마지막 문단 첫 번째와 세 번째 print는 함수 밖의 gun=10이 출력,
두 번째줄 checkpoint(2)에서 함수 안의 20-2=18이 출력됨.
-전역변수 예시
gun=10
def checkpoint(soldiers): #경계근무
global gun #전역 공간에 있는 gun 사용하겠다
gun = gun-soldiers #checkpoint안에서 정의된 gun
print("[함수 내]남은 총:{0}.".format(gun))
print("전체 총:{0}".format(gun))
checkpoint(2) #2명이 경계 근무 나감
print("남은 총:{0}".format(gun))
Terminal>>
전체 총:10
[함수 내]남은 총:8.
남은 총:8
1. checkpoint 함수 설정 후 gun 앞에 global이라는 것을 붙여서 전역 변수로 만들어 버림.
2. 출력값의 gun에 전역변수 사용되어 밖에 있는 gun을 사용한 결과값 10-2=8나옴.
**하지만 전역변수의 경우 오만데서 다 사용하기 때문에 자칫하면 오류를 많이 일으킴.
-전역변수를 보완할 수 있는 방법
gun=10
def checkpoint_ret(gun,soldiers): #여기서의 gun도 함수 내 지역변수 됨.
gun=gun-soldiers
print("[함수 내]남은 총:{0}.".format(gun))
return gun #return을 해줌으로써 지역변수의 gun을 밖으로 던질 수 있음
print("전체 총:{0}".format(gun))
gun= checkpoint_ret(gun,2) #두 명이 경계근무 나간 경우
print("남은 총:{0}".format(gun))
Terminal>>
전체 총:10
[함수 내]남은 총:8.
남은 총:8
1. 외부에서 gun=10이라는 변수 지정하고 checkpoint라는 함수 호출하고(두번째 문단 뒤에서 두번째줄)
외부의 gun을 그 함수안에 넣어서 계산한 후 그 값을 return 해준다.
함수 관련한 문제
내가 쓴 답안
print("당신의 성별은?")
input=(gender)
print("당신의 키는?")
input=(height)
def std_weight(height,gender):
if gender == "남자":
good_weight = height*height*22
print("키 {0}cm 남자의 표준 체중은 {1}kg 입니다.".format(height,good_weight))
elif gender == "여자":
good_weight = height*height*21
print("키 {0}cm 여자의 표준 체중은 {1}kg 입니다.".format(height,good_weight))
강사님 답안
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)
print("키 {0}cm {1}의 표준 체중은 {2}kg 입니다.".format(height,gender,weight))
1. stand weight라는 함수의 변수는 2가지 height, gender 그래서 함수 값 리턴하도록 정의
-> 함수 안에서 다 하려고 했던 것을 반성.. 함수는 일단 간단히 세우고 밖에서 출력할 것을 유념!
2. 밖에서 변수 3가지 정의하기 height,gender,weight. 마지막 weight 변수에는 함수값 출력하도록.
3. 이때, 표준체중은 m 단위이므로 키 변수 cm 단위를 바꾸는 작업을 함. height/100으로!
4. 소수점 둘째 자리 까지 이므로 반올림 함수 round(요소, 몇째자리까지 보일건지)를 입력
'Python' 카테고리의 다른 글
[파이썬] 클래스class Ⅲ ( pass, super ) (1) | 2024.11.09 |
---|---|
[파이썬]클래스class Ⅱ (상속, 다중상속, 메소드오버라이딩) (0) | 2024.11.09 |
[파이썬] 클래스class (__init__,멤버변수, 메소드) (1) | 2024.11.09 |
[파이썬] 파일 입출력(write, read, pickle, with) (4) | 2024.11.09 |
[파이썬] 입력, 출력 포맷(sep, end, items, ljust,rjust,zfill, input) (2) | 2024.11.08 |