[Python] 함수 - return 값 반환. 기본값 설정. asterisk

2023. 1. 3. 18:29파이썬(Python)

반응형

1. return

- 함수가 값을 반환하기 위해 사용.

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

a,b=map(int,input().split())
sum_val=add(a,b)
print(sum_val)

- add 함수는 두 수의 합을 반환하는 함수.

- add 함수를 호출 이후 입력한 두 수의 합을  sum_val 변수에 넣어 출력.


Q) 1부터 N까지 합

- 정수 n을 입력하면 1부터 n까지 더한 값을 반환하는 함수 작성.

 

def sum1toN(n):
    sum_val=0
    for i in range(1,n+1):
        sum_val+=i
    return sum_val

n=int(input())
print(sum1toN(n))

결과

>> 10
55

2. 기본값 인자 설정

- 함수에 설정인자 개수실행할 때 넣은 인자 개수가 다르면 오류가 발생.

def add(a,b,c):
    return a+b+c

print(add(3,4))

 

결과

TypeError: add() missing 1 required positional argument: 'c'

 

- 오류를 방지하기 위해서는 기본값을 설정한다.

- a, b, c가 채워져 오는 경우는 a+b+c를 계산.

- a, b만 채워져 오는 경우는 c에 2를 넣어 a+b+c를 계산.

- 이때 함수에 c=2라고 적어주면 결과를 얻을 수 있다.

def add(a,b,c=2):
    return a+b+c

print(add(3,4))
print(add(3,4,5))

결과

9
12

3. asterisk

- 인자 개수에 상관없이 tuple 형태로 값들을 받아올 수 있음.

def number(*args):
    return args

print(number(1,2,3,4,5))

결과

(1, 2, 3, 4, 5)

 

- tuple 안에 있는 수의 합을 구하기 위해서는 sum을 사용하면 된다.

def number(*args):
    return sum(args)

print(number(1,2,3,4,5))

결과

15

Q) 세 수의 최대 최소

- 세 수를 입력받아 최소를 구하는 함수와 최대를 구하는 함수를 작성.

- 세 수의 최솟값최댓값을 반환하여 출력

 

풀이 1) 

def min_number(a,b,c):
    return min(a,b,c)

def max_number(a,b,c):
    return max(a,b,c)

a,b,c=map(int,input().split())
print(min_number(a,b,c))
print(max_number(a,b,c))

결과

>> 10 20 30
10
30

 

풀이 2)

def min_number(*args):
    return min(args)

def max_number(*args):
    return max(args)

a,b,c=map(int,input().split())
print(min_number(a,b,c))
print(max_number(a,b,c))

결과

>> 10 20 30
10
30

Q) 조건에 맞는 숫자들 개수 찾기

- 정수 n을 입력

- 1부터 n까지 수 중 홀수이면서 각 자리 숫자의 합이 10의 배수인 숫자를 출력

- 출력은 번호해당 조건에 맞는 수.

- 마지막은 조건에 맞는 숫자의 총개수를 출력.

 

def isNumber(n):
    sum_num=sum(list(map(int,str(n))))
    return n%2==1 and sum_num%10==0

n=int(input())

cnt=0
for i in range(1,n+1):
    if isNumber(i):
        cnt+=1
        print(cnt,i)       
print(f'1부터 {n}까지의 수 중 조건에 맞는 숫자는 {cnt}개이다.')

결과

100
1 19
2 37
3 55
4 73
5 91
1부터 100까지의 수 중 조건에 맞는 숫자는 5개이다.

Q) 369 숫자 체크

- 정수 n을 입력. 

- n에 숫자 3 또는 6 또는 9가 있으면 Yes. 없으면 No를 출력

def is_369_number(n):
    while n>0:
        if n%10==3 or n%10==6 or n%10==9: return True
        n//=10
    return False

n=int(input())

if is_369_number(n): print('Yes')
else: print('No')

- n을 10씩 나눠주며 1의 자리가 3, 6, 9 중에 하나라도 있으면 True를 반환

- return을 하면 값을 반환하면서 함수가 종료.


Q) 소수의 합

- 정수 a, b를 입력 (a <b)

- a와 b 사이의 소수들을 출력소수들의 합을 출력

 

def isPrimeList(a,b):
    primenum=[]
    for i in range(a,b+1):
        if i==1: continue
        isPrime=True
        for j in range(2,i):
            if i%j==0:
                isPrime=False
                break
        if isPrime:
            primenum.append(i)
    return primenum

def PrintPrimeNum(a,b,prime_list):
    print(f'{a}와 {b} 사이의 소수들은',end=' ')
    for i in prime_list:
        print(f'{i} ',end='')
    print()

def PrimeSum(a,b,prime_list):
    sum_val=0
    for i in prime_list:
        sum_val+=i
    print(f'{a}와 {b} 사이에 있는 소수들의 합은 {sum_val}입니다.')

a,b=map(int,input().split())
prime_list=isPrimeList(a,b)
PrintPrimeNum(a,b,prime_list)
PrimeSum(a,b,prime_list)

결과

>> 10 30
10와 30 사이의 소수들은 11 13 17 19 23 29 
10와 30 사이에 있는 소수들의 합은 112입니다.

isPrimeList

- 1은 소수가 아니므로 1일 때는 실행을 하지 않는다.

- n이 소수인지 판단하기 위해 2부터 n-1까지 나눈다.

- 한 번이라도 나누어 떨어지면 isPrime을 False로 하여 소수가 아님을 증명한다.

- isPrime이 True이면 나누어 떨어지는 수가 없기 때문에 소수이다.

- 소수인 숫자들은 리스트에 삽입하여 함수가 끝나면 리스트를 반환한다.

 

PrintPrimeNum

- a와 b 사이의 소수들을 출력하는 함수

 

PrimeSum

- a와 b 사이의 소수들의 합을 구하는 함수


Q) 윤년 판별

- 정수 y1과 y2를 입력하여 y1년과 y2년 사이에 윤년윤년의 개수를 출력

 

def isLeapYear(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 MakeLeapYearList(y1,y2):
    LeapYearList=[]
    print(f'{y1}과 {y2} 사이의 윤년은 ',end='')
    for year in range(y1,y2+1):
        if isLeapYear(year):
            print(f'{year} ',end='')
            LeapYearList.append(year)
    print()
    return LeapYearList

def CountLeapYear(LeapYearList):
    print(f'{y1}과 {y2} 사이의 윤년은 총 {len(LeapYearList)}개 이다.')

y1,y2=map(int,input().split())
LeapYearList=MakeLeapYearList(y1,y2)
CountLeapYear(LeapYearList)

결과

>> 2000 2050
2000과 2050 사이의 윤년은 2000 2004 2008 2012 2016 2020 2024 2028 2032 2036 2040 2044 2048
2000과 2050 사이의 윤년은 총 13개 이다.

 

isLeapYear

- 윤년의 조건 3가지

1. 4의 배수

2. 4의 배수이면서 100의 배수가 아님.

3. 4의 배수이면서 100의 배수이지만 400의 배수.

 

MakeLeapYearList

- y1과 y2 사이에 isLeapYear가 True이면 리스트에 삽입한다.

- 동시에 isLeapYear를 만족하는 연도를 출력한다.

- 리스트를 반환한다.

 

CountLeapYear

- 리스트의 길이를 구해 y1과 y2 사이의 윤년의 개수를 출력한다.