[8일차] 파이썬 중급문풀1~2

하은·2023년 10월 25일
0
post-thumbnail

함수

- 함수를 이용한 프로그래밍

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

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('-' * 40)
    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('-' * 40)
    
-->
----------------------------------------
1. 덧셈, 2. 뺄셈, 3. 곱셈, 4. 나눗셈, 5. 나머지, 6. 몫, 7. 제곱셈, 8. 종료1
첫번째 숫자 입력: 10
두번째 숫자 입력: 20
10.0 + 20.0 = 30.0
----------------------------------------
----------------------------------------
1. 덧셈, 2. 뺄셈, 3. 곱셈, 4. 나눗셈, 5. 나머지, 6. 몫, 7. 제곱셈, 8. 종료3
첫번째 숫자 입력: 10
두번째 숫자 입력: 20
10.0 * 20.0 = 200.0
----------------------------------------
----------------------------------------

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

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

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

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)


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

    return [h, m]

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)

-->
------------------------------------------------------------
속도(km/h) 입력: 90
시간(h) 입력: 2
시간(m) 입력: 45
90.0(km/h)속도로 2.0(h)시간 45.0(m)분 동안 이동한 거리: 247.5(km)
------------------------------------------------------------
------------------------------------------------------------
속도(km/h) 입력: 90
거리(km) 입력: 247.5
time: 2.75
90.0(km/h)속도로 247.5(km) 이동한 시간: 2(h)시간 45.0(m)분
------------------------------------------------------------

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

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

print('=' * 40)
def formatedNumber(n):
    return format(n, ',')
def printAirplaneReceipt(c1, c2, i1, i2, a1, a2):
    cp = c1 * childPrice
    cp_dc = int(c2 * childPrice * 0.5)
    print(f'유아 {c1}명 요금: {formatedNumber(cp)}원')
    print(f'유아 할인대상 {c2}명 요금: {formatedNumber(cp_dc)}원')

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

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

    print('=' * 40)

    print(f'Total: {c1 + c2 + i1 + i2 + a1 + a2}명')
    print(f'TotalPrice: {formatedNumber(cp + cp_dc + ip + ip_dc + ap + ap_dc)}명')

    print('=' * 40)

childInt = int(input('유아 입력: '))
specialChildInt = int(input('할인대상 유아 입력: '))

infantInt = int(input('소아 입력: '))
specialInfantInt = int(input('할인대상 소아 입력: '))

adultInt = int(input('성인 입력: '))
specialAdultInt = int(input('할인대상 성인 입력: '))

printAirplaneReceipt(childInt, specialChildInt,
                     infantInt, specialInfantInt,
                     adultInt, specialAdultInt)


-->
========================================
유아 입력: 1
할인대상 유아 입력: 1
소아 입력: 2
할인대상 소아 입력: 1
성인 입력: 2
할인대상 성인 입력: 0
유아 1명 요금: 18,000원
유아 할인대상 1명 요금: 9,000원
소아 2명 요금: 50,000원
소아 할인대상 1명 요금: 12,500원
성인 2명 요금: 100,000원
성인 할인대상 0명 요금: 0원
========================================
Total: 7명
TotalPrice: 189,500명
========================================

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

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

    if n == 1 : # n이 1 될때까지 돌려야 ! 구할 수 있음
        return  n

    return n * recursionFun(n-1)

inputNumber = int(input('input number: '))
#print(format(recursionFun(inputNumber), ',')
print(formatedNumber(recursionFun(inputNumber)))

-->
input number: 10
3,628,800

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

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

#단리: 최초 원금에 대해서만 이자붙는 것
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 + (totalMoney * rpm)
        totalMoney += totalMoney * rpm

    return int(totalMoney)

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

print('[단리 계산기]')
print(f'{term}년 후 총 수령액: {formatedNumber(singleRateCalculator(money, term, rate))}')

print('[월복리 계산기]')
print(f'{term}년 후 총 수령액: {formatedNumber(multiRateCalculator(money, term, rate))}')

-->
예치금(원): 20000000
기간(년): 5
연 이율(%): 5
[단리 계산기]
5년 후 총 수령액: 25,000,000
[월복리 계산기]
5년 후 총 수령액: 25,667,173

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

#등차수열 공식: an = a1 + (n-1) * d
#등차수열 합 공식: sn = n*(a1 + an) / 2
def sequenceCal(n1, d, n): #초항, 공차, n까지

    valueN = 0; sumN = 0; #n항의 값, n항까지의 값

    i = 1
    while i <= n:

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

            i += 1
            continue

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

        i += 1

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

sequenceCal(inputN1, inputD, inputN)

-->
a1 입력: 2
공차 입력: 3
n 입력: 7
1번째 항의 값: 2
1번째 항까지의 값: 2
2번째 항의 값: 5
2번째 항까지의 값: 7
3번째 항의 값: 8
3번째 항까지의 값: 15
4번째 항의 값: 11
4번째 항까지의 값: 26
5번째 항의 값: 14
5번째 항까지의 값: 40
6번째 항의 값: 17
6번째 항까지의 값: 57
7번째 항의 값: 20
7번째 항까지의 값: 77

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

# 등비수열 공식: an = a1 * r^(n-1)
# 등비수열 합 공식: sn = a1 * (1-r^n) / (1-r)
def sequenceCal(n1, r, n): #초항, 공비, 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 입력: '))

sequenceCal(inputN1, inputR, inputN)

-->
a1 입력: 2
공비 입력: 3
n 입력: 5
1번째 항의 값: 2
1번째 항까지의 값: 2
2번째 항의 값: 6
2번째 항까지의 값: 8
3번째 항의 값: 18
3번째 항까지의 값: 26
4번째 항의 값: 54
4번째 항까지의 값: 80
5번째 항의 값: 162
5번째 항까지의 값: 242

0개의 댓글