PYTHON/기본 문법

PYTHON 기본 문법 (함수)

seongjin08 2022. 11. 8. 10:35

함수 사용 해보기

 

def test():               # 함수를 선언 하는 부분 
    print('hellow world!')  # 함수 실행시 실행되는 명령문
    
test()                     # 함수 사용하는 부분

 

연습 문제 

구구단 출력하기

def test():
    for i in range(2,10):
        for v in range(1,10):
            print(f'{i} * {v} = {i*v:2d}')
        print()

test()

 

def multi(m):
    for n in range(1, 10):
        print(f'{m} * {n} = {m*n:2d}')

if __name__ == '__main__':
    for i in range(2, 10):
        multi(i)
        print()

__name__ 의 의미?

__name__  는 숨겨진 변수 이다. 모듈의 이름을 가지고 있는 변수로 실행한 파일의 이름을

가지고 있는 변수 이다.

if __name__ == '__main__'  는 왜 사용 할까?

파이썬은 최초로 시작한 스크립트 파일과 모듈의 차이가 없기 때문에 어떤 스크립트 파일이든 시작점도 될 수 있고 모듈도 될 수 있다.

그래서 name 변수를 통해 현재 스크립트 파일이 시작점인지 모듈인지 판단한다.

 

예를 들어 

app.py 라는 파일에 아래 코드를 작성하고 app.py를 실행하면 __main__ 이라고 찍히는걸 확인 할 수 있다.

print(__name__)

app2.py 라는 파일에 아래 코드를 작성 하고 실행 시키면 app 이라고 찍히는걸 확인 할 수있다.

import app

즉 import 로 다른 파일을 불러올 경우 if __name__ == '__main__' 의 조건문을 달아서  함수가 바로 실행되는 걸 막을 수 있다.

 

 

숫자 읽기 함수 - 매개변수는 정수 1이상 10 이하의 정수 

def korean_number(num):
    if num == 1:
        return '일'
    elif num == 2:
        return '이'
    elif num == 3:
        return '삼'
    elif num == 4:
        return '사'
    elif num == 5:
        return '오'
    elif num == 6:
        return '육'
    elif num == 7:
        return '칠'
    elif num == 8:
        return '팔'
    elif num == 9:
        return '구'
    elif num == 10:
        return '십'
        
print(korean_number(3))

# 삼

 

태어난 해를 네 자리 숫자로 입력하면 한국 나이를 반환화는 함수 

from datetime import datetime

def korean_age(age):
    year = datetime.today().year
    reutnr year - age + 1
    
print( korean_age(1995) )

# 28

 

이자 (단리) 계산

원금(Principal) , 이율(rate) , 기간(time) 주어 줬을 때, 이자(Interest) 구하는 공식

I = Prt

원리금(Amount) 구하는 식

A = P(1+rt)

 

# 이자 구하는 함수
def simple_interest(p,r,t):
    return p * r * t

print( simple_interest(10000000, 0.03875, 5) )
# 1937500.0

# 원리금 구하는 함수
def simple_interest_amount(p,r,t):
    return p*(1+r*t)
    # return p + (p * r * t)

print( simple_interest_amount(10000000, 0.03875, 5) )
# 11937500.0

 

이자 (복리) 계산 

 

P' = 원리금

P = 원금

r = 연이율

t = 기간

n = 복리 횟수

p = 1500000
r = 0.043
t = 6
n = 4
p * (1 + r / n) ** (n * t)

#1938836.8221341055

 

def compound_interest_amount(p,r,t,n):
    return p * (1 + r /n) ** (n * t)

print( compound_interest_amount(1500000,0.043,6,4) )

# 1938836.8221341055

 

lambda 매개변수 : 표현식

(lambda x,y:x+y)(10,20)

30

 

map( 함수,리스트 )

map( lambda x: x ** 2 , range(5) )   # 파이썬 2

[ 0 , 1 , 4 , 9 , 16 ]

list( map( lambda x: x ** 2 , range(5) ) )  # 파이썬 2 or 파이썬 3

[ 0 , 1 , 4 , 9 , 16 ]

 

reduce( 함수 , 시퀀스 )

from functools import reduce
test = reduce(lambda x,y : x+y,range(5))
print(test)

# 10

 

filter( 함수 , 리스트 )

filter(lambda x: x % 2, range(10))        # 파이썬 2
[1, 3, 5, 7, 9]  

list(filter(lambda x: x % 2, range(10)))  # 파이썬 2 및 파이썬 3
[1, 3, 5, 7, 9]

 

연습 문제 

놀이공원 - 놀이기구의 이름과 키 제한을 나타낸 문자열을 입력 받아 놀이 기구의 이름,탑승 가능한 키의 하한,상한을 각 행에 출력

split 메서드를 써서 , 구분자 기준으로 문자열을 분할 

text = 'test : www'
text = text.split(':')

# ['test ',' www']

str.strip 으로 문자열 앞뒤의 공백을 제거 할 수 있다.

str.strip("  I am a boy. ")
# 'I am a boy.'

replace 매서드는 구분자를 원하는 문자열로 변경 할 수 있다.

text = '100cm'
text.replace('cm','')

# 100
def read(text):
    ridename, limit = map(str.strip, text.split(':'))

    cmmin = cmmax = None
    if '~' in limit:   # 문자열에 '~' 가 있다면 실행
        cmmin, cmmax = map(lambda x: int(x.replace('cm', '')), limit.split('~'))
    elif "이상" in limit:   # 문자열에 '이상' 이 있다면 실행 
        cmmin = int(limit.split("cm")[0])

    return ridename, cmmin, cmmax


if __name__ == "__main__":
    ridename, cmmin, cmmax = read(input())
    print("이름:", ridename , '\n')
    print("하한:", cmmin)
    print("상한:", cmmax)

ex )  

입력

와일드 윙: 110cm 이상

출력

이름: 와일드 윙
하한: 110
상한: None

입력

플라이벤처: 140cm~195cm

출력

이름: 플라이벤처
하한: 140
상한: 195