[PY4E] 파이썬 함수; def max min void fruitful
1. 함수
- 매크로와 비슷
- 반복실행을 빠르게 하기 위해 미리 저장해두고 필요할 때 꺼내쓰는 코드 조각
- 내장 함수: 예약어 - print(), int(), max(), min()···.
- 직접 정의하는 함수 : def 예약어 사용해서 새롭게 예약어를 만드는 코드
- python의 모든 함수는 반드시 return을 함
BUT 명시적 리턴X = None 리턴
2. max()
- 최댓값을 계산하는 함수
- 문자열, 숫자 모두 사용가능
nbig = max(1, 2, 3, 4, 5, 6) #() 안의 값이 "인자"
sbig = max('hello world')
print(nbig) # 6 출력
print(sbig) # w 출력
3. min()
- 최솟값을 계산하는 함수
- 문자열, 숫자 모두 사용가능
nsmall = min(1, 2, 3, 4, 5, 6)
ssmall = min('hello world')
print(nsmall) # 1 출력
print(ssmall) # ' '(스페이스, 빈칸) 출력
4. 직접 정의 def
- 들여쓰기로 블럭 나뉨
- def 키워드(매개변수 ≒ 파라미터 ≒ 형식매개 변수) : 매개변수는 여러개 지정 가능
- 정의 · 저장만 할 뿐 함수의 본문은 실행X
- void 함수 : 값을 반환X, 하지만 실제로는 print함수로 반환한 것이나 마찬가지
def name():
first = input("Your first name: ")
second = input("Your second name: ")
print(first, second)
name()
- fruitful 함수 : 값을 반환O
def computepay(fhours, frate):
if fhours > 40:
pay = 40*frate + (fhours-40) * frate*1.5
else:
pay = fhours * frate
return pay #pay 값만 반환
hours = input('Enter Hours: ')
rate = input('Enter Rate: ')
fhours = float(hours)
frate = float(rate)
computepay(fhours, frate)
try:
print('Pay:', str(pay)) # NameError: name 'pay' is not defined
except:
print('error')
# pay는 함수 안에서만 정의됨
# 실제로는 pay가 나오지 않아서 정의X
def computepay(fhours, frate):
if fhours > 40:
pay = 40*frate + (fhours-40) * frate*1.5
else:
pay = fhours * frate
return pay
hours = input('Enter Hours: ')
rate = input('Enter Rate: ')
fhours = float(hours)
frate = float(rate)
#type_1
print('Pay:', str(computepay(fhours, frate)))
#type_2
pay = computepay(fhours, frate) #실제로 pay를 정의
print('Pay:', str(pay))
# pay 값을 지정하거나 바로 사용함으로써 해결 가능
Q. 주민번호 유효성 체크하는 코드 만들기
[사용자로부터 주민번호 입력 받음]
000000-0000000 문자열로 읽어드리고, - 제외 후 한문자 한문자를 정수로 변환해서 int[] 에 저장 (배열의 크기는 13)
[주민번호 체크]
주민번호 앞에서부터 12자리의 각 자리의 수에 가중치 { 2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5 }를 곱하고, 곱한 수를 모두 더하여 총합을 구하고, 그 총합을 11로 나눈 나머지를 구함.
그 나머지를 11에서 뺀 결과가 CHECK DIGIT.
뺀 결과가 2자리수인 경우에는 2자리수를 10으로 나눈 나머지가 CHECK DIGIT.
CHECK DIGIT의 값이 입력 숫자 스트링의 13번째 숫자와 같으면 "CORRECT", 다르면 "INCORRECT"를 출력.
### 함수부
def input_jumin(): #주민번호 입력받음
print('주민번호 유효성 체크하는 프로그램입니다.')
print('입력예시 : 123456-1234567')
jumin = input('주민번호 입력 : ')
jumin_nums = []
for i in jumin:
if '-' == i:
continue
else:
jumin_nums.append(int(i))
return check_jumin(jumin_nums)
def check_jumin(jumin_nums): #주민번호 체크
digit = 2
total = 0
for idx in jumin_nums:
if digit == 10: #가중치 ~2, 3, 4, 5 }
digit = 2
total += jumin_nums[idx]*digit #곱한수를 모두 더하여 총합을 구합니다.
digit += 1 #{ 2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5 }를 곱합니다.
check_digit = (11 - total%11)%10
if check_digit == jumin_nums[12]:
print("CORRECT")
else:
print("INCORRECT")
## 실행부
input_jumin()
* 함수 지정할 때는 오타 및 지정된 변수 확인 필수 *
* 짧은 코드의 경우는 사용하는 것이 비효율적 *
* 반복적인 행위로 필요한 순간올 때 사용 *
* 내용참고&출처 : 태그의 수업을 복습 목적으로 정리한 내용입니다.