상세 컨텐츠

본문 제목

[Python 파이썬 독학 5일차]

파이썬 스터디/파이썬-Python 기본편

by 후즈테크 2020. 9. 23. 22:59

본문

반응형

1. 함수

: 사전에 정의된 함수에 따라 정의된 코딩을 실행하는 코딩 (묶음?) 이라는 표현이 맞을지 모르겠다...ㅋ

​# 은행에서...

# 처음 방문하여 계좌를 생성할 경우, 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 원입니다.
반응형

 

 

2. 기본 값

: 각 항목에 입력하지 않아도 사용 가능하도록 적용되는 기본 값 설정

# 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 자바

 

3. 가변 인자

: 인자의 입력 갯수가 다르거나, 구조가 바뀔 수 있을 경우 사용이 용의

 

# 가변인자를 사용하지 않을 경우.

# 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개로 다를 경우에도 정상적으로 출력 가능

 

4. 지역변수, 전역변수

: 지역변수 - 함수 내에서만 적용됨, 전역변수 - 전체에서 적용됨

 

# 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시간이면 된다고 하셨지만........전 늦었습니다. 먼저가세요 ㅋㅋㅋㅋㅋ

반응형

관련글 더보기

댓글 영역