[Python] 함수 - return 반환 값을 이용한 예제 프로그램 작성 (연산, 연속 부분 수열, 날짜 및 날씨)

2023. 1. 4. 00:21파이썬(Python)

Q) 연산 함수

- 연산 6개의 함수 +, -, *, /, %, ^ 를 작성.

- 2개의 정수1개의 연산자를 입력

- 연산 결과는 정수로 출력

 

def plus(a,b):
    return a+b

def minus(a,b):
    return a-b

def multiple(a,b):
    return a*b

def divide(a,b):
    return a//b

def modular(a,b):
    return a%b

def square(a,b):
    return a**b

def operator(a,o,b):
    if o=='+':
        return plus(a,b)
    if o=='-':
        return minus(a,b)
    if o=='*':
        return multiple(a,b)
    if o=='/':
        return divide(a,b)
    if o=='%':
        return modular(a,b)
    if o=='^':
        return square(a,b)
    else:
        return False


inp=input().split()
inp[0],inp[2]=int(inp[0]),int(inp[2])
print(operator(inp[0],inp[1],inp[2]))

결과

>> 8 + 5
13
>> 9 - 19
-10
>> 7 * 6
42
>> 45 / 6
7
>> 11 ^ 4
14641
>> 45 % 4
1

Q) 연속 부분 수열 판단

- n1개의 원소를 가진 수열 A와 n2개의 원소를 가진 수열 B를 입력한다.

- n1 >= n2

- 수열 B는 수열 A의 연속 부분 수열이면 True, 아니면 False를 출력

- 수열 A의 원소들을 연속하게 뽑을 때 수열 B에서 나올 수 있는 수열이면 연속 부분 수열이다.

 

n1,n2=map(int,input().split())
a=list(map(int,input().split()))
b=list(map(int,input().split()))

def is_same(i):
    for j in range(n2):
        if b[j]!=a[i+j]:
            return False
    return True

def is_subsequence():
    for i in range(n1-n2+1):
        if is_same(i):
            return True
    return False

if is_subsequence(): print('Yes')
else: print('No')

 

 

결과

>> 6 3
>> 1 2 3 4 5 6
>> 3 4 5
Yes
>> 6 3
>> 1 2 3 4 5 6
>> 3 4 6
No

is_subsequence() 

- 연속 부분 수열인지 판별하는 함수

- 수열 B가 수열 A의 연속 부분 수열이어야 하므로

- 수열 B의 첫 번째 원소가 수열 A의 인덱스 범위는 0 ~ n2-n1이다.

- is_same() 함수가 True이면 연속 부분 수열이고 False면 연속 부분 수열이 아니다.

 

is_same()

- 수열 B가 수열 A의 부분 수열과 같은지 확인하는 함수

- for문을 사용해 수열 B의 길이(n2)만큼 반복하여 a와 b의 원소를 비교한다.

- 같으면 for문을 실행하고 한 번이라도 다르면 연속 부분 수열이 아니기 때문에 False를 반환한다.

- for문에서 비교한 원소가 모두 같으면 연속 부분 수열이기 때문에 True를 반환한다.


Q) 날짜와 계절

- 연도, 월, 일을 정수 형태로 입력

- 입력한 날짜가 존재하면 Yes. 존재하지 않으면 No를 출력

- 입력한 날짜의 계절을 출력

- 봄 (3~5). 여름 (6~8). 가을 (9~11). 겨울 (12~2) (월을 기준)

- 존재하지 않는 날짜는 None으로 출력

 

def leapyear(y):
    if y%4==0:
        if y%100==0:
            if y%400==0:
                return True
            else:
                return False
        else:
            return True
    else:
        return False

def range_day(a,b):
    if d>=a and d<=b: return True
    else: return False

def YesOrNo(y,m,d):
    if m==2:
        if leapyear(y): return range_day(1,29)
        else: return range_day(1,28)
    elif m in [4,6,9,11]:
        return range_day(1,30)
    elif m in [1,3,5,7,8,10,12]:
        return range_day(1,31)
    else:
        return False

def season(m):
    if m in [3,4,5]:
        return '봄'
    elif m in [6,7,8]:
        return '여름'
    elif m in [9,10,11]:
        return '가을'
    else:
        return '겨울'

y,m,d=map(int,input().split())

if YesOrNo(y,m,d): 
    print('Yes')
    print(f'계절은 {season(m)}')
else: 
    print('No')
    print('계절은 None')

 

결과

>> 2023 8 15
Yes
계절은 여름
>> 2020 2 29
Yes
계절은 겨울
>> 2023 9 31
No
계절은 None

 

leapyear()

- 윤년인지 판단하는 함수

- 4의 배수. 100의 배수가 아님. 400의 배수

 

range_day()

- 월에 따라 일이 정해진 범위에 있는지 판단하는 함수

 

YesOrNo()

- 입력한 날짜가 존재하는지 판단하는 함수

- 1~12월까지 2월은 윤년인 경우 29일까지, 아닌 경우 28일까지는 True

- 4, 6, 9, 11월 30일까지 True

- 나머지 월은 31일까지 True

- 월과 일이 범위 밖이면 False

 

Season()

- 입력한 날짜를 통해 계절을 출력하는 함수

- 입력한 날짜가 존재하지 않는 경우는 None을 출력

- 3~5월은 봄. 6~8월은 여름. 9~11월은 가을. 12~2월은 겨울 출력