Day16. 파이썬 중급문풀 (3)_1

Junghwan Park·2023년 4월 23일
0

스터디노트

목록 보기
17/54

[연습문제] 모듈(01)

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

import passOrFail as pf

if __name__ == '__main__':  # 사용법 복습
    sub1 = int(input('과목1 점수 입력 : '))
    sub2 = int(input('과목2 점수 입력 : '))
    sub3 = int(input('과목3 점수 입력 : '))
    sub4 = int(input('과목4 점수 입력 : '))
    sub5 = int(input('과목5 점수 입력 : '))

    pf.exampleResult(sub1, sub2, sub3, sub4, sub5)
    
    
# 모듈파일    
    
 def exampleResult(s1, s2, s3, s4, s5):      # *s 로 사용자가 몇개를 입력해도 계산할 수 있도록 해보기

    passAvgScore = 60; limitScore = 40

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

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

    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 getAverage() >= 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 Fail!!')

    getAverage()
    printPassOrFail()
    printFinalPassOrFail()

*s 로 사용자가 몇개를 입력해도 계산할 수 있도록 해보기!!


[연습문제] 모듈(02)

  • 상품 구매 개수에 따라 할인율이 결정되는 모듈을 만들고, 다음과 같이 계산 결과가 출력되는 프로그램을 만들어보자.
    구매 개수 1개 2개 3개 4개 5개이상
    할인율(%) 5 10 15 20 25

실행파일

import discount as dc

if __name__ == '__main__':

    flag = True
    gs = []

    while flag:

        selectNumber = int(input('1.구매, 2.종료'))

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

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

    print(f'할인율 : {result[0]}%')
    print(f'합계 : {dc.formatNumber(result[1])}원')

모듈파일

def calculatorTotalPrice(gs):

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

    rate = 25   # 할인율 최대값   5개 이상은 모두 25퍼센트이므로 기본값으로 해둔다!
    totalPrice = 0

    rates = {1:5, 2:10, 3:15, 4:20}  # 복습해볼것

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

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

    return [rate, int(totalPrice)]

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

꼭 복습해볼 것 아직 오류 남


[연습문제] 모듈(03)

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

실행파일

import lotto as lt

lt.startlotto()  # starlotto를 실행하면 모두 실행된다

모듈파일

# 난수로 7개 뽑기 (보너스 숫자 포함)

import random

userNums = []
randNums = []
collNums = []   # 사용자와 기계가 몇개 맞는지 숫자 넣는 곳

def setUserNums(ns):    # userNums에 숫자 담는 함수
    global userNums
    userNums = ns

def getUserNums():
    return userNums

def setRandNums():
    global randNums
    randNums = random.sample(range(1, 46), 6)   # 1~45 숫자중 6개 뽑아냄

def setBonuNum():   # 보너스 숫자
    global randBonuNum

    while True:
        randBonuNum = random.randint(1, 45)
        if randBonuNum not in randNums:
            break

def getBonuNum():
    return randBonuNum

def lottoResult():
    global userNums
    global randNums
    global collNums

    collNums = []
    for un in userNums:     # userNums에서 숫자를 꺼내와서
        if un in randNums:  # un이 randNums에 있으면
            collNums.append(un) # collNums에 넣어줌

    if len(collNums) == 6:  # 일치하는 번호가 6개면
        print('1등 당첨!!')
        print(f'번호 : {collNums}')

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

    elif len(collNums) == 5:    # 2등과 조건 다른것 잘 확인!!
        print('3등 당첨!!')
        print(f'번호 : {collNums}')

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

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

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

def startlotto():
    n1 = input('번호(1~45) 입력 : ')
    n2 = input('번호(1~45) 입력 : ')
    n3 = input('번호(1~45) 입력 : ')
    n4 = input('번호(1~45) 입력 : ')
    n5 = input('번호(1~45) 입력 : ')
    n6 = input('번호(1~45) 입력 : ')

    selectNums = [n1, n2, n3, n4, n5, n6]

    setUserNums(selectNums)
    setRandNums()
    setBonuNum()

    lottoResult()

[연습문제] 모듈(04)

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

실행파일

import permu as pt

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

# print(f'{numN}P{numR} : {pt.getPermutationCnt(numN, numR, logPrint = False)}')

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

모듈파일

# def getPermutationCnt(n, r, logPrint = True):

# 수학적 공식을 사용한 방법
    # result = 1
    # for n in range(n, (n-r), -1):  # n에서 n-r까지
    #     if logPrint : print('n:{}'.format(n))
    #     result = result * n
    #
    # return result

# 모듈을 사용한 방법

from itertools import permutations

def getPermutations(ns, r):

    pList = list(permutations(ns, r))
    print(f'{len(ns)}P{r} 개수 : {len(pList)}')

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

이 글은 제로베이스 데이터 취업 스쿨의 강의자료 일부를 발췌하여 작성되었습니다.

profile
안녕하세요 반갑습니다^^

0개의 댓글