파이썬 중급 문제 풀이(함수~모듈)

문제1.

#계산기 함수를 이용해서 계산기 만들기

def add(n1,n2):
    print(f'{n1}+{n2}={n1+n2}')

def sub(n1,n2):
    print(f'{n1}-{n2}={n1-n2}')

def mul(n1,n2):
    print(f'{n1}*{n2}={n1*n2}')

def div(n1,n2):
    print(f'{n1}/{n2}={n1/n2}')

def mod(n1,n2):
    print(f'{n1}%{n2}={n1%n2}')

def floor(n1,n2):
    print(f'{n1}//{n2}={n1//n2}')

def pow(n1,n2):
    print(f'{n1}**{n2}={n1**n2}')


flag = True
while flag:
    print('-' * 60)
    select1 = int(input('1.덧셈, 2.뺼셈, 3.곱셈, 4.나눗셈, 5.나머지, 6.몫, 7.제곱승, 8.종료 '))
    if select1 ==8:
        print('Bye~~')
        break
    num1 = float(input('첫번째 숫자 입력: '))
    num2 = float(input('두번째 숫자 입력: '))

    if select1 == 1:
        add(num1,num2)
    elif select1 ==2:
        sub(num1,num2)
    elif select1 ==3:
        mul(num1,num2)
    elif select1 ==4:
        div(num1,num2)
    elif select1 ==5:
        mod(num1,num2)
    elif select1 ==6:
        floor(num1,num2)
    elif select1 ==7:
        pow(num1,num2)
    else:
        print('잘못입력')
    print('-' * 60)

문제2

2_1번

def getDistance(n1,n2,n3):
    return n1*(n2+(n3/60))

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)
------------------------------------------------------------
속도(km/h) 입력: 90
시간(h) 입력: 2
시간(m) 입력: 45
90.0(km/h)속도로 2.0(h)시간 45.0(m)분 동안 이동한 거리:247.5(km)
------------------------------------------------------------

2_2번

#시간 구하기  시간 = 거리 / 속도
#시간의 분을 환산하는 방법은 100:75 = 60:x --> x = 75*60 / 100

def getTime(distance, speed):
    time = distance/speed
    h = int(time)
    m = int((time - h) *100* 60 /100)

    # return받을게 2개 이상이면 리스트로 반환해라
    return [h,m]

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

문제3

childPrice = 18000
infantPrice = 25000
adultPrice = 50000
disCountPrice = 0.5

#요금에 3자리 마다 ','붙여주는 함수 정의
def formatation(n):
    return format(n,',')
    
    
#입력 값들에 따른 비행기표 영수증 출력 함수 정의
def printAirplaneReceipt(c1,c2,i1,i2,a1,a2):

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

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

    ap = adultPrice*a1
    ap_dc = int(adultPrice * disCountPrice * a2)
    print(f'성인 {a1}명 요금: {formatation(ap)}원')
    print(f'성인 할인 대상 {a2}명 요금: {formatation(ap_dc)}원')
    print('='*60)
    totalCnt = a1 + a2 + c1 + c2 + i1 + i2
    print(f'Total: {formatation(totalCnt)}명')
    print(f'TotalPrice : {formatation(cp + cp_dc + ip + ip_dc + ap + ap_dc)}원')
    print('='*60)


#입력값들
childNum = int(input('유아 입력:'))
childDiscountNum = int(input('할인대상 유아 입력:'))
infantNum = int(input('소아 입력:'))
infantDiscountNum = int(input('할인대상 소아 입력:'))
adultNum = int(input('성인 입력:'))
adultDiscountNum = int(input('할인대상 성인 입력:'))


#비행기표영수증 출력 함수 호출
printAirplaneReceipt(childNum,childDiscountNum,infantNum,infantDiscountNum,\
adultNum,adultDiscountNum)
유아 입력: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

4_1

재귀함수 : 내가 나를 다시 호출 하는 함수

#재귀함수 이용한 팩토리얼
def recrusionFun(n):
    if n == 1:
        return n
    return n*recrusionFun(n-1)
    
inputNum = int(input('input number : '))
print(format(recrusionFun(inputNum),','))
input number : 10
3,628,800

4_2

  • 단리 : 정해진 기간 동안 원금에 동일안 이자를 더한 값
  • 복리 : 정해진 기간 동안 원금에 이자의 이자의 이자의 ...
#단리, 월복리 계산기
#복리계산은 원금 + 이자 로 함수를 만드는 것이 최적

# 3자리 숫자 마다 , 찍어주는 함수 정의
def formatedNumber(n):
    return format(n,',')

#함수 매개변수는 입력받거나 변할 수 있는 수로 한다.
#단리 계산 함수
def singleRateCalculator(m, t, r):

    totalMoney = 0
    totalRateMoney = 0

    for i in range(t):
                            #r*0.01은 이자율을 백분율로 변환하기 위해
        totalRateMoney += m* (r*0.01)

    totalMoney = m + totalRateMoney
    return int(totalMoney)

#월복리 계산 함수
def mulitRateCalculator(m,t,r):

    #연이율을 월로 계산
    t = t*12
    #월이자
    rpm = (r/12) *0.01

    totalMoney = m

    for i in range(t):
        #t는 월수로 변환 되었고 t월동안 원금에 이자 원금+이자 에 이자 ....t월 동안
        #totalMoney = totalMoney + (totalMoney*rpm)
        totalMoney +=totalMoney*rpm

    return int(totalMoney)

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

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


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


[복리계산기]
==============================
예치금 	: 10000000
예치기간 	: 3
연 이율 	: 3
------------------------------
3년 후 총 수령액: 10,940,514원
==============================

문제5

def sequenceCal(n1,d,n):
    #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 += 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

문제6

def sequenceCal(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 입력: '))
inputD = int(input('공차 입력: '))
inputN = int(input('n 입력: '))

sequenceCal(inputN1,inputD,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

문제7

  • moduel.py
def passOrfail(n1,n2,n3,n4,n5):
    passAvgScore = 60; limitScore=40
    def getTotal():
        totalScore = n1+n2+n3+n4+n5
        print(f'총점 : {totalScore}')
        return totalScore

    def getAveragr():
        totalAvg = getTotal()/5
        print(f'평균 : {totalAvg}')
        return totalAvg

    def printPassOrFail():
        print(f'{n1}: pass') if n1>=40 else print(f'{n1}: fail')
        print(f'{n2}: pass') if n2>=40 else print(f'{n2}: fail')
        print(f'{n3}: pass') if n3>=40 else print(f'{n3}: fail')
        print(f'{n4}: pass') if n4>=40 else print(f'{n4}: fail')
        print(f'{n5}: pass') if n5>=40 else print(f'{n5}: fail')


    def printFinalPassOrFail():
        if getAveragr()>=passAvgScore:
            if n1>=limitScore and n2>=limitScore and n3>=limitScore and n4>=limitScore and n5 >= limitScore:
                print('Final Pass!!')
            else:
                print('Final Fail!!')
        else:
            print('Final Fail!!')


    getAveragr()
    printPassOrFail()
    printFinalPassOrFail()
  • main.py
import moduel
if __name__ == '__main__':
    sub1 = int(input('과목1 점수 입력: '))
    sub2 = int(input('과목2 점수 입력: '))
    sub3 = int(input('과목3 점수 입력: '))
    sub4 = int(input('과목4 점수 입력: '))
    sub5 = int(input('과목5 점수 입력: '))

    moduel_01.passOrfail(sub1,sub2,sub3,sub4,sub5)
과목1 점수 입력: 100
과목2 점수 입력: 35
과목3 점수 입력: 85
과목4 점수 입력: 45
과목5 점수 입력: 90
총점 : 355
평균 : 71.0
100: pass
35: fail
85: pass
45: pass
90: pass
총점 : 355
평균 : 71.0
Final Fail!!
profile
취업공부

0개의 댓글