18.[python중급 문제풀이]함수(6.12)

Sooyeon·2023년 6월 12일

Python

목록 보기
18/22
post-thumbnail

[Python 중급 문제풀이]
함수 01-06

함수(01)
산술연산 계산기를 함수를 이용해서 만들어 보자.



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 flordiv(n1,n2):
    return n1 // n2

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


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

    n1 = float(input('첫번째 숫자 입력:'))
    n2 = float(input('두번째 숫자 입력:'))

    if numberInput==1:
        print(f'{n1}+{n2} = {add(n1,n2)}')

    elif numberInput==2:
        print(f'{n1}-{n2} = {sub(n1,n2)}')

    elif numberInput==3:
        print(f'{n1}*{n2} = {mul(n1,n2)}')

    elif numberInput==4:
        print(f'{n1}/{n2} = {div(n1,n2)}')

    elif numberInput==5:
        print(f'{n1}%{n2} = {mod(n1,n2)}')

    elif numberInput==6:
        print(f'{n1}//{n2} = {flordiv(n1,n2)}')

    elif numberInput==7:
        print(f'{n1}**{n2} = {pow(n1,n2)}')

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

---------------------------------------------------------------------------
1.덧셈,   2.뺄셈,   3.곱셈,   4.나눗셈,   5.나머지,   6.,   7.제곱승,   8.종료   1
첫번째 숫자 입력:10
두번째 숫자 입력:20
10.0+20.0 = 30.0
--------------------------------------------

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

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


def getTime(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('시간(h) 입력: '))
m=float(input('시간(m) 입력: '))
d=getDistance(s,h,m)
print(f'{s}(km/h)속도로 {h}(h)시간 {m}(m)분 동안 이동한 거리: {d}(km)')
print('-'*60)

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

함수(03)
다음과 같이 출력 될 수 있도록 비행기 티켓 영수증 출력 함수를 만들어 보자.


childPrice=18000
infantPrice=25000
adultPrice=50000
specialDc=50

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

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

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

    ap=a1*adultPrice
    ap_dc=int(a2*adultPrice*0.5)
    print(f'성인 {a1}명 요금 : {ap}원')
    print(f'성인 할인 대상 {a2}명 요금 : {ap_dc}원')

childCnt=int(input('유아 입력: '))
specialDCCchildCnt=int(input('할인 대상 유아 입력: '))
infantCnt = int(input('소아 입력: '))
specialDCinfantCnt=int(input('할인 대상 소아 입력: '))
adultCnt = int(input('성인 입력: '))
specialDCadultCnt=int(input('할인 대상 성인 입력: '))

printAirPlaneReceipt(childCnt,specialDCCchildCnt,infantCnt,specialDCinfantCnt,adultCnt,specialDCadultCnt)

유아 입력: 1
할인 대상 유아 입력: 1
소아 입력: 2
할인 대상 소아 입력: 1
성인 입력: 2
할인 대상 성인 입력: 0
유아 1명 요금 : 18000원
유아 할인 대상 1명 요금 : 9000원
소아 2명 요금 : 50000원 
소아 할인 대상 1명 요금 : 12500원
성인 2명 요금 : 100000원
성인 할인 대상 0명 요금 : 0

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

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


def recursionFun(n):
# 팩토리얼 함수 
    if n == 1:
        return n
    return n * recursionFun(n - 1)

inputNumber = int(input('input number: '))
inputNumberFormated = formatedNumber(recursionFun(inputNumber))
print(inputNumberFormated)


# 단리 계산기
def singleRateCalculator(m, t, r):
    totalMoney = 0
    totalRateMoney = 0

    for i in range(t):
        totalRateMoney += m * (r * 0.01)

    totalMoney = m + totalRateMoney
    return int(totalMoney)


# 월복리 계산기
def multiRateCalculator(m, t, r):

    t = t * 12
    rpm = (r / 12) * 0.01
    totalMoney = m

    for i in range(t):
        totalMoney += totalMoney * rpm

    return int(totalMoney)


money = int(input('예치금(원): '))
term = int(input('기간(년): '))
rate = int(input('연 이율(%): '))

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


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

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

def sequenceCal(n1, d, n):

    valueN = 0
    sumN = 0
    i = 1
    while i <= n:

        if i == 1:
            valueN = n1
            sumN += valueN
            print('{}번째 항의 값: {}'.format(i, valueN))
            print('{}번째 항까지의 합: {}'.format(i, sumN))
            i += 1
            continue

        valueN += d
        sumN += valueN
        print('{}번째 항의 값: {}'.format(i, valueN))
        print('{}번째 항까지의 합: {}'.format(i, sumN))
        i += 1

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

sequenceCal(inputN1, inputD, inputN)
print('-' * 50)

➜ 등차 수열 공식 : an=a1+(n-1) d
➜ 등차 수열 합 공식: sn=n
(a1+an) /2

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

def sequenceCal(n1, r, n):

    valueN = 0
    sumN = 0
    i = 1

    while i <= inputN:

        if i == 1:
            valueN = n1
            sumN += valueN
            print('{}번째 항의 값: {}'.format(i, valueN))
            print('{}번째 항까지의 합: {}'.format(i, sumN))
            i += 1
            continue

        valueN *= r
        sumN += valueN
        print('{}번째 항의 값: {}'.format(i, valueN))
        print('{}번째 항까지의 합: {}'.format(i, sumN))
        i += 1
>➜ 등비 수열(일반항) 공식: an = a1 * r^(n-1)
>➜ 등비 수열(합) 공식: sn = a1 * (1 - r^n) / (1-r)

0개의 댓글