19.[python중급 문제풀이]모듈(6.13)

Sooyeon·2023년 6월 13일

Python

목록 보기
19/22
post-thumbnail

[Python 중급 문제풀이]
모듈(01-07)

모듈01


과목별 점수를 입력하면 합격 여부를 출력하는 모듈을 만들어보자. (평균 60이상 합격, 과락 40으로 한다.)



def exampleResult(s1,s2,s3,s4,s5):

    passAvgscore=60
    limitScore=40

    def getTotal():
            totalScore=s1+s2+s3+s4+s5
            print(f'총점: {totalScore}')
            return totalScore

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

    def printPassOrFail():
            print(f'{s1} :Pass') if s1 >=limitScore else print(f'{s1} :Fail')
            print(f'{s2} :Pass') if s2 >=limitScore else print(f'{s2} :Fail')
            print(f'{s3} :Pass') if s3 >=limitScore else print(f'{s3} :Fail')
            print(f'{s4} :Pass') if s4 >=limitScore else print(f'{s4} :Fail')
            print(f'{s5} :Pass') if s5 >=limitScore else print(f'{s5} :Fail')

    def printFinalPassOrFail():

            if getAvgScore() >=passAvgscore:
               if s1>=limitScore and s2>=limitScore and s3>=limitScore and s4>=limitScore and s5>=limitScore:
                    print('Final pass!!')
                else:
                    print('Final Fail!!')

            else:
                print('Final Faill!!')

   
    getAvgScore()
    printPassOrFail()
    printFinalPassOrFail()
  
과목 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!!

모듈02


상품 구매 개수에 따라 할인율이 결정되는 모듈을 만들고, 다음과 같이 계산 결과가 출력되는 프로그램을 만들어보자.



def calculatorTotalPrice(gs):

    if len(gs) <=0:
        print('구매 상품이 없습니다.')
        return

    rate=25
    totalPrice=0

    rates={1:5, 2:10 , 3:15 , 4:20 , 5:25}

    if len(gs) in rates:
        rate= rates[len(gs)]

    for g in gs:
        totalPrice+= g*(1-rate*0.01)

    return[rate,totalPrice]

def formatedNumvber(n):
    return format(int(n),',')


import modtest as ca


if __name__ == '__main__':
    flag=True
    gs=[]

    while flag:
        selectNumber=int(input('상품을 구매 하시겠어요? 1.구매 2.종료'))

        if selectNumber ==1:
            price=int(input('상품 가격 입력: '))
            gs.append(price)

        elif selectNumber==2:
            result=ca.calculatorTotalPrice(gs)
            flag=False

    print(f'할인율 : {result[0]}')
    print(f'합계 : {ca.formatedNumvber(result[1])}원')
   
상품을 구매 하시겠어요? 1.구매 2.종료1
상품 가격 입력: 1000
상품을 구매 하시겠어요? 1.구매 2.종료2
할인율 : 5
합계 : 950

모듈03


로또 모듈을 만들고 다음과 같이 로또 결과가 출력될 수 있도록 프로그램을 만들어보자.


import random

userNums=[] ; randNums=[] ; collNums=[]
randBonusNum=0


def setUserNums(ns):
    global userNums
    usernums=ns

def getUserNums():
    return userNums

def setRandNums():
    global randNums
    randNums=random.sample(range(1,46),6)

def getRandNums():
    return randNums

def setBonusNum():
    global  randBonusNum
    while True:
        randBonusNum=random.randint(1,45)
        if randBonusNum not in randNums:
            break

def getBonusNum():
    return randBonusNum

def lottoResult():
    global userNums
    global  randNums
    global collNums

  collNums=[]
    for un in userNums:
        if un in randNums:
            collNums.append(un)

    if len(collNums)==6:
        print(f'1등 당첨!!')
        print(f'번호 : {collNums}')

    elif len(collNums)==5 and (randBonusNum in userNums):
        print(f'2등 당첨!!')
        print(f'번호 : {collNums},보너스 번호 : {randBonusNum}')

    elif len(collNums) == 5:
        print(f'3등 당첨!!')
        print(f'번호 : {collNums}')

    elif len(collNums) == 4:
        print(f'4등 당첨!!')
        print(f'번호 : {collNums}')

    elif len(collNums) == 3:
        print(f'5등 당첨!!')
        print(f'번호 : {collNums}')

    else:
           print('아쉽습니다. 다음 기회에~')
           print(f' 기계 번호 : {randNums}')
           print(f' 보너스 번호 : {randBonusNum}')
           print(f' 선택 번호 : {randNums}')
           print(f' 일치 번호 : {randNums}')

def startLotto():
    n1=int(input('번호(1~45) 입력: '))
    n2=int(input('번호(1~45) 입력: '))
    n3=int(input('번호(1~45) 입력: '))
    n4=int(input('번호(1~45) 입력: '))
    n5=int(input('번호(1~45) 입력: '))
    n6=int(input('번호(1~45) 입력: '))
    selectNums=[n1,n2,n3,n4,n5,n6]

    setUserNums(selectNums)
    setRandNums()
    setBonusNum()

    lottoResult()


번호(1~45) 입력: 5
번호(1~45) 입력: 15
번호(1~45) 입력: 25
번호(1~45) 입력: 30
번호(1~45) 입력: 45
번호(1~45) 입력: 9
아쉽습니다. 다음 기회에~
가게 번호 : [22, 27, 21, 15, 35, 36]
보너스 번호 : 34
선택 번호 : [22, 27, 21, 15, 35, 36]
일치 번호 : [22, 27, 21, 15, 35, 36]

모듈04


순열 계산 모듈을 만들고 다음 순열 계산 결과를 출력해 보자.

모듈05


조합 계산 모듈을 만들고 다음 조합 계산 결과를 출력해 보자.


def getCombinationCnt(n,r,logPrint=True):

    resultP=1
    resultR=1
    resultC=1

    for n in range(n,(n-r),-1):
       resultP=resultP*n
    if logPrint:print(f'resultP: {resultP}')

    for n in range(r,0,-1):
            resultR=resultR*n
    if logPrint: print(f'resultR: {resultR}')

    resultC=int(resultP/resultR)
    if logPrint: print(f'resultC: {resultC}')

    return resultC

from itertools import combinations

def getCombinations(ns,r):
    cList=list(combinations(ns,r))
    print(f'{len(ns)}C{r}개수 : {len(cList)}')

    for n in combinations(ns,r):
        print(n,end=', ')

if __name__== '__main__':
    numN=int(input('numN입력:'))
    numR=int(input('numR입력:'))

    print(f'{numN}C{numR} : {getCombinationCnt(numN,numR,logPrint=False)}')

    ns=[1,2,3,4,5,6,7,8]
    getCombinations(ns,3)

import modtest as ct

numN=int(input('numN 입력:'))
numR=int(input('numR 입력:'))

print(f'{numN}C{numR}:  {ct.getCombinationCnt(numN,numR,logPrint=False)}')

listVar=[1,2,3,4,5,6,7,8]
rVar=3
ct.getCombinations(listVar,rVar)

numN 입력:8
numR 입력:3
8C3:  56
8C3개수 : 56
(1, 2, 3), (1, 2, 4), (1, 2, 5), (1, 2, 6), (1, 2, 7), (1, 2, 8), (1, 3, 4), (1, 3, 5), (1, 3, 6), (1, 3, 7), (1, 3, 8), (1, 4, 5), (1, 4, 6), (1, 4, 7), (1, 4, 8), (1, 5, 6), (1, 5, 7), (1, 5, 8), (1, 6, 7), (1, 6, 8), (1, 7, 8), (2, 3, 4), (2, 3, 5), (2, 3, 6), (2, 3, 7), (2, 3, 8), (2, 4, 5), (2, 4, 6), (2, 4, 7), (2, 4, 8), (2, 5, 6), (2, 5, 7), (2, 5, 8), (2, 6, 7), (2, 6, 8), (2, 7, 8), (3, 4, 5), (3, 4, 6), (3, 4, 7), (3, 4, 8), (3, 5, 6), (3, 5, 7), (3, 5, 8), (3, 6, 7), (3, 6, 8), (3, 7, 8), (4, 5, 6), (4, 5, 7), (4, 5, 8), (4, 6, 7), (4, 6, 8), (4, 7, 8), (5, 6, 7), (5, 6, 8), (5, 7, 8), (6, 7, 8), 

모듈06


수입과 공과금을 입력하면 공과금 총액과 수입 대비 공과금 비율을 계산하는 모듈을 만들어보자.

Income=0
waterPrice=0;electricPrice=0;gasPrice=0

def setIncome(ic):
    global Income
    Income=ic
def getIncome():
    return Income
def setWaterPrice(wp):
    global waterPrice
    waterPrice=wp
def getWaterPrice():
    return waterPrice
def setElectricPrice(ep):
    global electricPrice
    electricPrice=ep
def getElectricPrice():
    return electricPrice
def setGasPrice(gp):
    global gasPrice
    gasPrice=gp
def getGasPrice():
    return gasPrice

def getUtilityBill():
    result=waterPrice+electricPrice+gasPrice
    return result
def getUtilityBillRate():
    result= getUtilityBill() / getIncome()*100
    return round(result,2)
def formatedNumber(n):
    return format(n,',')


import modtest as ut

Income=int(input('수입 입력 :'))
ut.setIncome(Income)

waterPrice=int(input('수도요금 입력 :'))
ut.setWaterPrice(waterPrice)

electricPrice=int(input('전기요금 입력 :'))
ut.setElectricPrice(electricPrice)

gasPrice=int(input('가스요금 입력 :'))
ut.setGasPrice(gasPrice)

print(f'공과금: {ut.formatedNumber(ut.getUtilityBill())}원')
print(f'공과금: {ut.formatedNumber(ut.getUtilityBillRate())}%')

수입 입력 :3000000
수도요금 입력 :15000
전기요금 입력 :17500
가스요금 입력 :125000
공과금: 157,500원
공과금: 5.25%

모듈07


다음과 같이 패키지와 모듈을 만들고 연산 결과를 출력해 보자.

#basic_operator.py

def add(n1,n2):
    return round(n1+n2,2)
def sub(n1,n2):
    return round(n1-n2,2)
def mul(n1,n2):
    return round(n1*n2,2)
def div(n1,n2):
    return round(n1/n2,2)

#develpoer_operator.py

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

def flordiv(n1,n2):
    return round(n1 //n2,2)

def pow(n1,n2):
    return round(n1**n2,2)
#circle_area.py
def squarArea(r):
    return round(r**2 *3.14,2)
#trianlge_square_area.py

def triangleArea(w,h):
    return round(w*h /2,2)

def spuareArea(w,h):
    return round( w*h,2 )


from arithmetic import basic_operator as bo
from arithmetic  import  developer_operator as do
from shape import circle_area as ca
from shape import triangle_square_area as tsa

num1=float(input('숫자1 입력 :'))
num2=float(input('숫자2 입력: '))

print(f'{num1} + {num2} = {bo.add(num1,num2)}')
print(f'{num1} - {num2} = {bo.sub(num1,num2)}')
print(f'{num1} * {num2} = {bo.mul(num1,num2)}')
print(f'{num1} / {num2} = {bo.div(num1,num2)}')
print(f'{num1} % {num2} = {do.mod(num1,num2)}')
print(f'{num1} // {num2} = {do.flordiv(num1,num2)}')
print(f'{num1} ** {num2} = {do.pow(num1,num2)}')

width=float(input('가로 길이 입력: '))
height=float(input('세로 길이 입력: '))
print(f'삼각형 넓이 : {tsa.triangleArea(num1,num2)}')
print(f'사각형 넓이 : {tsa.spuareArea(num1,num2)}')

r=float(input('반지름 입력 :'))
print(f'원의 넓이 : {ca.squarArea(r)}')

0개의 댓글