함수처리

함수 정의

# 함수 하나 정의, 사용
def deposit(balance, money):  		# 함수 정의, 전달값
	print("입금 완료! 잔액은 {0}원 입니다.".format(balance + money))
    return balance + money			# 반환값
    
balance = 0
balance = deposit(balance , 1000)   # 함수 사용
print(balance)  ->   입금 완료! 잔액은 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
    
def withdraw_night(balance, money):
    commission = 100  # 수수료
    return commission, balance - money - commission
    
balance = 0
balance = deposit(balance , 1000)   # 함수 사용
balance = withdraw(balance, 500) 	# 함수 사용
commission, balance = withdraw_night(balance, 200)
print("수수료 {0}원, 잔액은 {1}원입니다.".format(commission, balance))
	 ->   입금 완료! 잔액은 1000원입니다.
	 ->   출금 완료! 잔액은 500원입니다.
     ->	  수수료 100, 잔액은 200원입니다.

기본값

# 기본값 : 호출 시 지정해놓으면 기본으로 설정됨
def profile(name, age = 17, main_lang = "python"):
	print("이름 : {0}\t나이 : {1}\t주 사용 언어 : {2}"\
    	.format(name, age, main_lang))
profile("유재석")
profile("김태호")
		-> 이름 : 유재석		나이 : 17		주 사용 언어 : python
        -> 이름 : 김태호		나이 : 17		주 사용 언어 : python
	

키워드 인자

# 키워드로 작성시 순서 바껴도 상관없음
def profile(name, age, main_lang): # 키워드 인자 : name, age, main_lang
    print(name, age, main_lang)

profile(name="유재석", main_lang="파이썬", age=20)
profile(main_lang="자바", age=25, name="김태호")

가변인자

def profile(name, age, lang1, lang2, lang3, lang4, lang5):
    print("이름 : {0}\t나이 : {1}\t".format(name, age), end = " ")
    print(lang1, lang2, lang3, lang4, lang5)

profile("유재석", 20, "python", "java", "c", "c++", "c#")
profile("김태호", 25, "kotlin", "swift", "", "", "")
	-> 이름 : 유재석		나이 : 20		python, java, c, c++,c c#
    -> 이름 : 김태호		나이 : 25		kotlin, swift
    									# 언어의 개수가 달라지는 경우
 
 
# 가변인자 설정
def profile(name, age, *language): # 언어 정보를 전달하고 싶은 갯수 만큼 전달 가능    
    print("이름 : {0}\t나이 : {1}\t".format(name, age), end=" ")
    for lang in language:
        print(lang, end=" ") # 언어들을 모두 한 줄에 표시
    print() # 줄바꿈 목적

profile("유재석", 20, "python", "java", "c", "c++", "c#")
profile("김태호", 25, "kotlin", "swift")
	-> 이름 : 유재석		나이 : 20		python, java, c, c++,c c#
    -> 이름 : 김태호		나이 : 25		kotlin, swift
    
# end = " "   -> # 문장 출력 후 줄바꿈 대신 띄어쓰기
				 # 다음 문장과 연결 가능

지역변수와 전역변수

# 지역변수 : 함수 내에서 쓸 수 있는 변수
# 전역변수 : 모든 곳에서 쓸 수 있는 변수

# 총이 10자루 있을 때 총을 들고나간 군인 수 만큼의 총 수를 빼 남은 총 개수 구하기 
gun = 10  # 전역변수 선언

def checkpoint(soldiers):
    gun = gun - soldiers  # 지역변수 gun이 선언된 적 없음
    print("[함수 내] 남은 총 : {0}".format(gun))

print("전체 총 : {0}".format(gun))
checkpoint(2)
print("남은 총 : {0}".format(gun))       -> 오류 뜸, 변수오류


# 1) global 키워드로 전역변수를 함수 내에서도 사용하기
gun = 10  # 전역변수 선언

def checkpoint(soldiers):
	global gun # 전역공간의 gun이라는 변수 사용
    gun = gun - soldiers  # 지역변수 gun이 선언된 적 없음
    print("[함수 내] 남은 총 : {0}".format(gun))

print("전체 총 : {0}".format(gun))     -> 전체 총 : 10
checkpoint(2)						 -> [함수 내] 남은 총 : 8
print("남은 총 : {0}".format(gun))	 -> 남은 총 : 8



# 2) 전달값과 반환값 활용
gun = 10

def checkpoint_ret(gun, soldiers): # 전체 총 수와 군인 수를 전달받음
    gun = gun - soldiers           # 전달받은 gun 사용
    print("[함수 내] 남은 총 : {0}".format(gun))

print("전체 총 : {0}".format(gun))     
gun = checkpoint(gun, 2)	 # gun 값을 함수에 전달	     
print("남은 총 : {0}".format(gun))	 
	-> 전체 총 : 10
    -> [함수 내] 남은 총 : 8
    -> 남은 총 : 8

# global 선언보다는 전달값과 반환값을 활용하여 
# 전체적인 상황을 몰라도 전달받은 값만 이용하게끔 작성하는 것이 간결!


숫자함수

함수이름의미예제
abs절대값abs(-5)
pow제곱pow(4, 2)
max가장 큰 값max(5, 12)
min가장 작은 값min(5, 12)
round반올림round(3.14)
print(abs(-5)) 	 	 # -5 의 절대값 = 5
print(pow(4, 2)) 	 # 4의 2제곱 = 4 * 4 = 16
print(max(5, 12)) 	 # 5 와 12 중 큰 값 = 12
print(min(5, 12)) 	 # 5 와 12 중 작은 값 = 5
print(round(3.14))	 # 3.14 의 반올림 = 3
print(round(4.99)) 	 # 4.99 의 반올림 = 5

* math 모듈을 활용하면 보다 다양한 숫자 처리 가능
함수 이름의미예제
floor내림floor(4.99)
ceil올림ceil(3.14)
sqrt제곱근sqrt(14)
# math 모듈사용
from math import * # math 모듈 내의 모든 내용을 가져다 쓰겠다는 의미

print(floor(4.99)) 	# 4.99 의 내림 = 4
print(ceil(3.14)) 	# 3.14 의 올림 = 4
print(sqrt(16)) 	# 16 의 제곱근 = 4
 

# 다른 방법
import math     # 모듈이름과 점(.) 을 반드시 적어야 함.

print(math.floor(4.99)) # math. 과 함께 사용
print(math.ceil(3.14))
print(math.sqrt(16))

random 함수

from random import * 

print(random()) 	# 0.0 이상 1.0 미만의 임의의 값 생성   


# 다양한 방법
print(random() * 10) # 0.0 이상 10.0 미만의 임의의 값 생성
print(int(random() * 10)) # 0 이상 10 미만의 임의의 정수 값 생성
print(int(random() * 10) + 1) # 1 이상 10 이하 (11 미만) 의 임의의 정수 값 생성

# 로또번호를 1-45에서 구하는 방법
print(int(random() * 45) + 1) # 1 이상 46 미만의 임의의 정수 값 생성

# 추가 함수
randrange	주어진 범위 내의 임의의 정수 값 생성	
randint		주어진 범위 내의 임의의 정수 값 생성(마지막 값 포함)

print(randrange(1, 46)) # 1 이상 46 미만의 임의의 정수 값 생성
print(randint(1, 45)) # 1 이상 45 이하(45를 포함해요!!)의 임의의 정수 값 생성


# 무작위로 데이트 날짜 구하기
from random inport *

date = randint(1, 30)
print("데이트 날짜는 " + str(date) + "일 입니다.")
	# -> 데이트 날짜는 15일 입니다. 
    # (1 - 30 중에 무작위, date는 정수라 str로 문자로 변환하여 함께 출력)

문자열 함수

# len. replace
python = "Python is Amazing"

print(len(python))   # 띄어쓰기를 포함한 문자열의 전체 길이 (length)
print(python.replace("Python", "Java")) # Java is Amazing

# index, find
# index는 찾는 문자열이 없으면 오류남! (find는 -1 처리)
index = python.index("n") # 처음으로 발견된 n 의 인덱스
print(index) # 5 : Python 의 n
index = python.index("n", index + 1) # 6 번째 인덱스 이후에 처음으로 발견된 n 의 인덱스 
print(index) # 15 : Amazing 의 n

find = python.find("n") # 처음으로 발견된 n 의 인덱스
print(find) # 5 : Python 의 n
find = python.find("n", find + 1) # 6 번째 인덱스 이후에 처음으로 발견된 n 의 인덱스 
print(find) # 15 : Amazing 의 n

# count
print(python.count("n")) # 2 : 문자열 내에서 n 이 나온 횟수

예시

# 1.사이트 별로 비밀번호를 만들어주는 프로그램을 작성하시오.) http://naver.com
규칙1 : http:// 부분은 제외 → naver.com
규칙2 : 처음 만나는 점(.) 이후 부분은 제외 → naver
규칙3 : 남은 글자 중 처음 세 자리 + 글자 갯수 + 글자 내 'e'의 갯수 + '!'로 구성
                      (nav)    (5)          (1)             (!)

url = "http://naver.com"

my_str = url.replace("http://", "")
my_str = my_str[:my_str.index(".")]
password = my_str[:3] + str(len(my_str)) + str(my_str.count("e")) +"!"
print("{0}의 비밀번호는 {1}입니다.".format(url, password))
  #    -> http://naver.com의 비밀번호는 nav51!입니다.

좋은 웹페이지 즐겨찾기