중급 파이썬 문제풀이 Part 1 - 함수

2023. 3. 15. 17:33카테고리 없음

# 40강. 다음과 같이 출력될 수 있도록 산술연산 계산기를 함수를 이용해서 만들어보자.

def add(n1, n2):
    return n1 + n2

def sub(n1, n2):
    return n1 - n2

def mul(n1, n2):
    return n1 * n2

def div(n1, n2):
    return n1 / n2

def mod(n1, n2):
    return n1 % n2

def flo(n1, n2):
    return n1 // n2

def exp(n1, n2):
    return n1 ** n2

while True:
    print('-'*60)
    selectNum = int(input('1. 덧셈, 2.뺄셈, 3.곱셈, 4.나눗셈, 5.나머지, 6.몫, 7.제곱승, 8.종료: '))
    if selectNum == 8:
        print('Bye~')
        break

    num1 = float(input('첫 번째 숫자 입력: '))
    num2 = float(input('두 번째 숫자 입력: '))
    if selectNum == 1:
        print(f'{num1} + {num2} = {add(num1, num2)}')

    elif selectNum == 2:
        print(f'{num1} - {num2} = {sub(num1, num2)}')

    elif selectNum == 3:
        print(f'{num1} * {num2} = {mul(num1, num2)}')

    elif selectNum == 4:
        print(f'{num1} / {num2} = {div(num1, num2)}')

    elif selectNum == 5:
        print(f'{num1} % {num2} = {mod(num1, num2)}')

    elif selectNum == 6:
        print(f'{num1} // {num2} = {flo(num1, num2)}')

    elif selectNum == 7:
        print(f'{num1} ** {num2} = {exp(num1, num2)}')

    else:
        print('잘못 입력했습니다. 다시 입력하세요.')

    print('-' * 60)

 

#41강. 다음과 같이 출력될 수 있도록 이동거리와 이동시간을 반환하는 함수를 만들어보자.

# 거리(km) = 속도(km/h) * 시간(h)

def get_Distance(speed, hour, minute):
    distance = speed * (hour + minute/60)
    return distance

# 100:75 = 60 : x --> x = 75 * 60 / 100
def get_Time(speed, distance):
    time = distance / speed
    print(f'time: {time}')
    h = int(time)
    m = int((time - h) * 100 * 60 / 100)

    return [h,m]



print('-' * 60)
s = float(input('속도(km/h) 입력: '))
h = float(input('시간(km) 입력: '))
m = float(input('시간(m) 입력: '))
d = get_Distance(s,h,m)
print(f'{s}(km/h)속도로 {h}(h)시간 {m}(m)분 동안 이동한 거리: {d}(km)')

print('-'*60)
s = float(input('속도(km/h) 입력: '))
d = float(input('거리(km) 입력: '))
t = get_Time(s,d)
print(f'{s}(km/h)속도로 {d}(km) 이동한 시간: {t[0]}(h)시간 {t[1]}(m)분')

 

# 42강. 다음과 같이 출력될 수 있도록 비행기 영수증 출력 함수를 만들어 보자.

child_Price = 18000
infant_Price = 25000
adult_Price = 50000
special_dc = 50

def formated_num(n):
    return format(n,',')


def airplane_receipt(c1,c2,i1,i2,a1,a2):

    cp = c1 * child_Price
    cp_dc = int(c2 * child_Price * 0.5)
    print(f'유아 {c1}명 요금: {formated_num(cp)}원')
    print(f'유아 할인 대상 {c2}명 요금: {formated_num(cp_dc)}원')

    ip = i1 * infant_Price
    ip_dc = int(i2 * infant_Price * 0.5)
    print(f'소아 {i1}명 요금: {formated_num(ip)}원')
    print(f'소아 할인 대상 {i2}명 요금: {formated_num(ip_dc)}원')

    ap = a1 * adult_Price
    ap_dc = int(a2 * adult_Price * 0.5)
    print(f'성인 {a1}명 요금: {formated_num(ap)}원')
    print(f'성인 할인 대상 {a2}명 요금: {formated_num(ap_dc)}원')
    
    print('='*50)
    print(f'Total : {c1+c2+i1+i2+a1+a2}명')
    print(f'TotalPrice : {formated_num(cp+cp_dc+ip+ip_dc+ap_dc)}원')
    print('=' * 50)
    
child_cnt = int(input('유아 입력: ')) #c1
special_dc_child_cnt = int(input('할인 대상 유아 입력: ')) #c2

infant_cnt = int(input('소아 입력: ')) #i1
special_dc_infant_cnt = int(input('할인 대상 소아 입력: ')) #i2

adult_cnt = int(input('성인 입력: ')) #a1
special_dc_adult_cnt = int(input('할인 대상 성인 입력: ')) #a2
print('='*50)
airplane_receipt(child_cnt, special_dc_child_cnt,
                 infant_cnt, special_dc_infant_cnt,
                 adult_cnt, special_dc_adult_cnt)

#43강. 다음과 같이 출력될 수 있도록 재귀함수를 이용해서 팩토리얼 함수를 만들어보자.

def recusion_Fun(n):
    if n == 1:
        return n

    return n * recusion_Fun(n-1)

input_Number = int(input('input number: '))
print(format(recusion_Fun(input_Number),','))

Q) 다음과 같이 출력될 수 있도록 단리/ 월복리 계산기 함수를 만들어보자.

def formated_number(n):
    return format(n, ',')

# 단리 계산기
def single_rate_calculator(m,t,r): # m=예치금, t = 예치기간, r = 연 이율

    totalMoney = 0  # 최후에 받는 전체 수령액
    total_Rate_Money = 0  # 이자금액

    for i in range(t):
        total_Rate_Money += m * (r*0.01)  #최초 원금에 대해서만 이자붙음

    totalMoney = m + total_Rate_Money  # 예치금 + 최초원금에 대한 이자금액
    return int(totalMoney)

# 월복리 계산
def multi_rate_calculater(m,t,r):   # 원금, 거치기간, 연 이율

    t = t*12  # 예치기간(년)을 월단위로 환산
    rpm = (r/12) * 0.01  # 월이자(rpm)는 (r/12) * 0.01(백분율 표시)

    for i in range(t):
        totalMoney = m

        for i in range(t):  # 월단위만큼 누적 합계를 구한다.
            totalMoney += totalMoney * rpm #최후에 받는 전체 수령액 = 기존 원금*월이자 (for문으로 반복)

        return int(totalMoney)

money = int(input('예치금(원): '))
term = int(input('기간(년): '))
rate = int(input('연 이율(%): '))
print(' ')
print('[단리 계산기]')
print('='*30)
print(f'예치금 \t : {formated_number(money)}원')
print(f'예치기간\t: {formated_number(term)}년')
print(f'연 이율\t: {formated_number(rate)}%')
print('-'*30)
print(f'{term}년 후 총 수령액 : {formated_number(single_rate_calculator(money,term,rate))}원')
print(' ')
print('[복리 계산기]')
print('='*30)
print(f'예치금 \t : {formated_number(money)}원')
print(f'예치기간\t: {formated_number(term)}년')
print(f'연 이율\t: {formated_number(rate)}%')
print('-'*30)
print(f'{term}년 후 총 수령액 : {formated_number(multi_rate_calculater(money,term,rate))}원')
print('='*30)

#44강. 다음과 같이 출력될 수 있도록 등차 수열의 n번째 값과 합을 출력하는 함수를 만들어보자

# 등차수열의 n번째 값과 합을 출력하는 함수를 만들어보자
# 등차수열 공식: an = a1 + (n-1)*d
# 등차수열 합 공식 : sn = n*(a1 + an) / 2
def sequence_cal(n1, d, n):  # 초항, 공차, n항
    valueN = 0; sumN = 0;    # n항의 값, n항까지 합의 값

    i = 1
    while i <= n:  # i가 n보다 작거나 같을 때까지

        if i == 1:  # n =1 첫항인 경우
            valueN = n1  # 초항부터 시작
            sumN += valueN
            print(f'{i}번째 항의 값: {valueN}')
            print(f'{i}번째 항까지의 합: {sumN}')

            i += 1
            continue
        #while의 조건문 내에서 i가 1이 아닌경우
   # while i <= n: 
        valueN += d     #이전항에서 계속해서 공차 d를 더해줌~
        sumN += valueN  #n항의 값을 계속해서 더해줌
        print(f'{i}번째 항의 값: {valueN}')
        print(f'{i}번째 항까지의 합: {sumN}')

        i += 1 # 무한 반복에 빠지지 않게 함

inputN1 = int(input('a1 입력: '))
inputD = int(input('공차 입력: '))
inputN = int(input('n 입력: '))

sequence_cal(inputN1,inputD, inputN)

#45강. 다음과 같이 출력될 수 있도록 등비 수열의 n번째 값과 합을 출력하는 함수를 만들어보자.

# 등비수열 (일반항) 공식 : an = a1 * 4^(n-1)
# 등비수열 (합) 공식 : sn = a1 * (1-r^n) / (1-r)

def sequence(n1, r, n):
    valueN = 0; sumN = 0

    i = 1
    while i <= n:

        if i == 1:
            valueN = n1
            sumN = valueN
            print(f'{i}번째 항의 값: {valueN}')
            print(f'{i}번째 항까지의 합: {sumN}')

            i += 1
            continue

        valueN *= r
        sumN += valueN
        print(f'{i}번째 항의 값: {valueN}')
        print(f'{i}번째 항까지의 합: {sumN}')
        i += 1

inputN1 = int(input('a1 입력: '))
inputR = int(input('공비 입력: '))
inputN = int(input('n 입력: '))

sequence(inputN1,inputR,inputN)

 

※ 이 게시물은 제로베이스 취업 스쿨 강의를 참고하여 작성된 스터디 노트입니다.