[Python] 중급 문제 풀이 - 단리, 복리, 등비수열, 등차수열, 로또

박미영·2023년 3월 10일
0

📍함수 연습 문제1

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

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 * rpm)

    return int(totalMoney)


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



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


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

  • 출력결과



📍함수 연습 문제2

등차 수열의 n번째 값과 합을 출력하는 함수를 만들어보자.

def sequenceCal(n1, d, n):

    valueN, sumN = 0, 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)
  • 출력결과

등차 수열 공식: an = a1 + (n-1) * d

등차 수열 합 공식: sn = n * (a1 + an) / 2



📍모듈 연습 문제1

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


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

    rate = 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 formatedNumber(n):
    return format(n, ',')
  • test.py
import discount as dc

if __name__ == '__main__':

    flag = True
    gs = []

    while flag:

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

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

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

    print(f'할인율: {result[0]}%')
    print(f'합계: {dc.formatedNumber(result[1])}원')
  • 출력결과














📍모듈 연습 문제2

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

  • lotto.py
import random

lottoNums, choseNums, sameNums = [], [], []
bonusNum = 0

def setUserNums(ns):
    global choseNums    # 값을 수정하기위해 global 사용
    choseNums = ns

def getUserNums():    # 사용자가 입력한 것을 가져오는 함수 - 모듈이기 때문
    return choseNums

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

def getRandNums():
    return lottoNums

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

def getBonusNum():
    return bonusNum

def lottoResult():
    global choseNums
    global lottoNums
    global sameNums

    sameNums = []
    for un in choseNums:
        if un in lottoNums:
            sameNums.append(un)

    if len(sameNums) == 6:
        print('1등 당첨!!')
        print(f'번호: {sameNums}')
    elif len(sameNums) == 5 and bonusNum in choseNums:
        print('2등 당첨!!')
        print(f'번호: {sameNums}, 보너스 번호: {bonusNum}')
    elif len(sameNums) == 5:
        print('3등 당첨!!')
        print(f'번호: {sameNums}')
    elif len(sameNums) == 4:
        print('4등 당첨!!')
        print(f'번호: {sameNums}')
    elif len(sameNums) == 3:
        print('5등 당첨!!')
        print(f'번호: {sameNums}')
    else:
        print('아쉽습니다. 다음 기회에~')
        print(f'기계 번호: {lottoNums}')
        print(f'보너스 번호: {bonusNum}')
        print(f'선택 번호: {choseNums}')
        print(f'일치 번호: {sameNums}')

def startLotto():
    selectNums = []
    for i in range(6):
        selectNums.append(int(input('번호(1~45) 입력: ')))

    setUserNums(selectNums)
    setRandNums()
    setBonusNum()

    lottoResult()

- start.py
import lotto as lt

lt.startLotto()
  • 출력결과

궁금한 점❓

getUserNums, getRandNums, getBonusNum 함수를 구현했는데 왜 사용하지 않고 변수로 바로 접근하신 거지....?
내가 모르는 무언가가 있는 걸까 그냥 사용하시는 걸 잊으신 걸까????!!!!


"이 글은 제로베이스 데이터 취업 스쿨 강의 자료 일부를 발췌한 내용이 포함되어 있습니다."

0개의 댓글