Rylah's Study & Daily Life

[Python Basic] 07. 함수(Funciton), 전달값, 반환값(Return), 기본값, 키워드 값, 가변 인자, 지역 변수, 전역 변수 본문

Study/Python Basic

[Python Basic] 07. 함수(Funciton), 전달값, 반환값(Return), 기본값, 키워드 값, 가변 인자, 지역 변수, 전역 변수

Rylah 2022. 1. 19. 13:32
# 1. 함수
def open_account():
    print("새로운 계좌가 생성 되었습니다.")

open_account()

# 2. 전달 값과 반환 값

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)
balance = withdraw(balance, 2000)
balance = withdraw(balance, 500)
print(balance)

commission, balance = withdraw_night(balance, 100)
print("수수료 {0}원이며 잔액은 {1}원 입니다.".format(commission, balance))

# 3. 기본 값
def profile(name, age, main_lang):
    print("이름 : {0}\t나이 : {1}\t주 사용 언어: {2}\t"\
        .format(name, age, main_lang))

profile("유재석", 20, "Python")
profile("김태호", 25, "Java")

#같은 학교 같은 학년 같은 반 같은 수업.

def profile(name, age = 17, main_lang="Python"):
    print("이름 : {0}\t나이 : {1}\t주 사용 언어: {2}\t"\
        .format(name, age, main_lang))
profile("유재석")
profile("김태호")

# 4. 키워드 값
def profile(name, age, main_lang):
    print(name, age, main_lang)

profile("유재석", 20, "Python")
profile(main_lang="Go", name="길", age=25)

#5. 가변 인자
def profile(name, age, lang1, lang2, lang3, lang4, lang5):
    print("이름 : {0}\t나이 : {1}\t".format(name, age), end= " ") # end 부분이 있으면 줄바꿈 하지 않고 end 부분처럼 빈칸 하나만 진행
    print(lang1, lang2, lang3, lang4, lang5)


profile("유재석", 20, "Python", "Java", "C", "C++", "C#")
profile("김태호", 25, "Kotlin", "Swift", "", "", "")



def profile(name, age, *language):
    print("이름 : {0}\t나이 : {1}\t".format(name, age), end= " ") # end 부분이 있으면 줄바꿈 하지 않고 end 부분처럼 빈칸 하나만 진행
    for lang in language:
        print(lang, end=" ")
    print()




profile("유재석", 20, "Python", "Java", "C", "C++", "C#", "JavaScript")
profile("김태호", 25, "Kotlin", "Swift")

# 6. 지역변수와 전역변수

gun = 10

def checkpoint(soldiers): # 경계 근무
    global gun # 전역 변수 gun을 함수 내에서 사용
    gun = gun - soldiers
    print("[함수 내] 남은 총 : {0}".format(gun))


def checkpoint_ret(gun, soldiers): # 경계 근무
    gun = gun - soldiers
    print("[함수 내] 남은 총 : {0}".format(gun))
    return gun


print("전체 총 : {0}".format(gun))
checkpoint(2) # 2명이 경계 근무를 나감
gun = checkpoint_ret(gun, 3)
print("남은 총 : {0}".format(gun))

global 전역변수 선언을 하지 않으면 함수 내에서 gun이 없다고 나오거나 return 되는 것이 없기에 숫자가 그대로인게 정상이다. 하지만 수정한 코드로 전역 변수 자체를 수정해버리거나, return으로 반환값을 대입하는 형식을 취하면 반영이 된다.

 

Quiz) 표준 체중을 구하는 프로그램을 작성하시오

* 표준 체중 : 각 개인의 키에 적당한 체중

(성별에 따른 공식)
 남자 : 키(m) X 키(m) X 22
 여자 : 키(m) x 키(m) X 21

 조건 1. 표준 체중은 별도의 ㅎ마수 내에서 계싼
   * 함수명 : std_weight
   * 전달값 : 키(height), 성별(gender)
 조건 2. 표준 체중은 소수점 둘쨰자리까지 표시

 (출력 예제)
 키 175cm 남자의 표준 체중은 67.38kg 입니다.

# Quiz) 표준 체중을 구하는 프로그램을 작성하시오

# * 표준 체중 : 각 개인의 키에 적당한 체중

# (성별에 따른 공식)
#  남자 : 키(m) X 키(m) X 22
#  여자 : 키(m) x 키(m) X 21

#  조건 1. 표준 체중은 별도의 ㅎ마수 내에서 계싼
#    * 함수명 : std_weight
#    * 전달값 : 키(height), 성별(gender)
#  조건 2. 표준 체중은 소수점 둘쨰자리까지 표시

#  (출력 예제)
#  키 175cm 남자의 표준 체중은 67.38kg 입니다.

def std_weight(height, gender):
    weight = 0
    if gender == "남자":
        weight = (height / 100) * (height / 100) * 22
    if gender == "여자":
        weight = (height / 100) * (height / 100) * 21
    return weight

height = 175
gender = "남자"
print("키 {0}cm {1}의 표준 체중은 {2:.2f}kg 입니다.".format(height,gender,std_weight(height,gender)))
gender = "여자"
weight = round(std_weight(height, gender),2)
print("키 {0}cm {1}의 표준 체중은 {2}kg 입니다.".format(height,gender, weight))
height = 165
gender = "여자"
weight = std_weight(height, gender)

#f-string
print(f"키 {height}cm {gender}의 표준 체중은 {weight:.2f}kg 입니다.")

새롭게 안 사실은 F.String이라는 파이썬의 새로운 문법이다.

 

이는 강의에서 알려주지 않았으며 링크에서 정보를 얻었다. https://blockdmask.tistory.com/429

 

[python] 파이썬 f-string (문자열 포매팅 방법 3)

안녕하세요. BlockDMask 입니다. 오늘은 파이썬 문자열 포매팅 방법 % 서식문자, str.format, f-string 이 세개 중 마지막인 f-string에 대해서 알아보려고 합니다. % 서식문자 [바로가기] str.format [바로가기].

blockdmask.tistory.com

파이썬만 하는 사람에게는 f string이 불편할 수도 있으나 명시적으로 코드를 읽기에는 fstring이 나쁘지 않은거 같았다.

 

그 외에도 소수점 precision을 정하는 다양한 Python의 방법을 알 수 있었다.