파이썬 중급 문풀1 - 함수

Jasmine·2023년 3월 24일
0

파이썬 중급

목록 보기
7/12

05_040 산술연산 계산기 만들기

  • 덧/뺄/곱/나 등 기능을 각각 함수로 만든 후,
    사용자 입력을 받아 결과값 출력되도록, 조건문 사용
  • 계속해서 계산기가 반복진행되도록, while 조건문 사용
  • 계산기는 int가 아니라 float로 캐스팅하기
  • break 조건이 걸리는 조건문을 위로 빼주는 것이 좋음
    (종료를 먼저 구현해서 분기한다)
  • 즉, while 반복문 내에서, 다음 계산기를 또 실행할지 종료할지 먼저 분기한 후, 실행한다면 무슨 산술연산을 선택하느냐에 따라 결과값이 나오도록 if~elif~else문 걸어주기

05_041 거리, 시간, 속력 함수 만들기

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

# getTime 코드가 까다롭다!⏳
# 계산된 시간(0.00h)를 0h 00m으로 환산한 후 h, m을 리스트로 반환

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

    return [h, m]

05_042 비행기 티켓 영수증⏳

printAirplaneReceipt(childCnt, specialDCChildCnt,
					infantCnt, specialDCInfactCnt, 
					adultCnt, specialDCAdultCnt)

# 문제 이해 : 사용자가 인원을 입력했을 때, 
# 이렇게 최종 출력 함수가 되도록 
# 세부 함수들을 코딩하기 (나중에도 재사용할 수 있도록)

# 숫자 3자리마다 , 찍기
def formatedNumber(n):
    return format(n, ',') 

받는 값이 6개니까, 그걸 매개변수로 정해서 영수증을 프린트하는 함수를 하나 만들어놓고, 산식을 풀어서 함수로 만들기.

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

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

def printAriPlaneReceipt(c1, c2, i1, i2, a1, a2):

    print('=' * 40)
    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: {formatedNumber(c1 + c2 + i1 + i2 + a1 + a2)}명')
    print(f'TotalPrice : {formatedNumber(cp + cp_dc + ip + ip_dc + ap + ap_dc)}원')
    print('=' * 40)


print(f'childPrice(24개월 미만)\t\t: {formatedNumber(childPrice)}원')
print(f'infantPrice(만12세 미만)\t\t: {formatedNumber(infantPrice)}원')
print(f'adultPrice(만12세 이후)\t\t: {formatedNumber(adultPrice)}원')
print(f'국가 유공자 및 장애우 할인\t\t: {specialDC}%')
print()

childCnt = int(input('유아 입력: '))
specialDCChildCnt = int(input(f'할인대상 유아 입력: '))

infantCnt = int(input('소아 입력: '))
specialDCInfantCnt = int(input(f'할인대상 소아 입력: '))

adultCnt = int(input('성인 입력: '))
specialDCAdultCnt = int(input(f'할인대상 성인 입력: '))


printAriPlaneReceipt(childCnt, specialDCChildCnt,
                     infantCnt, specialDCInfantCnt,
                     adultCnt, specialDCAdultCnt)

05_043 재귀함수를 이용해서 팩토리얼 함수 만들기⏳

  • 재귀함수 : 내가 나를 다시 호출하는 함수
  • if문에서 else 생략 가능함

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


def recursionFun(n):

    if n == 1:
        return n
    return n * recursionFun(n - 1)
    
# 내가 나를 다시 호출 : 재귀함수
# if문에서 else 생략 가능하구나

inputNumber = int(input('input number: '))
inputNumberFormated = formatedNumber(recursionFun(inputNumber))

print(inputNumberFormated)

    

05_043 단리/월복리 계산기 함수 만들기
1) 단리 계산기 함수정의

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)

2) '월'복리 계산기 함수정의

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


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

05_044 등차수열의 n번째 값과 n항 까지의 합
(초항 a1, 공차, n 입력)

ver.1

def sequenceCal(n1, d, n):

    valueN = 0	# n항의 값
    sumN = 0	# 합계
    
    i = 1
    while i <= n:

        if i == 1:
            valueN = n1		# 초항
            sumN += valueN
            print('{}번째 항의 값: {}'.format(i, valueN))
            print('{}번째 항까지의 합: {}'.format(i, sumN))
            
            i += 1
            continue		# ⏳ 왜 여긴 continue를 쓰고 밑엔 안쓰지?

        valueN += d
        sumN += valueN
        print('{}번째 항의 값: {}'.format(i, valueN))
        print('{}번째 항까지의 합: {}'.format(i, sumN))
        i += 1

ver.2 공식 활용하기

  • 등차 수열(일반항) 공식: an = a1 + (n-1) * d
  • 등차 수열(합) 공식: sn = n(a1 + an) / 2
def sequenceCal01(n1, d, n):

    # 등차 수열(일반항) 공식: an = a1 + (n-1) * d
    valueN = n1 + (n-1) * d
    print('{}번째 항의 값: {}'.format(n, valueN))

    # 등차 수열(합) 공식: sn = n(a1 + an) / 2
    sumN = n * (n1 + valueN) / 2
    print('{}번째 항까지의 합: {}'.format(n, int(sumN)))'
        
inputN1 = int(input('a1 입력: '))
inputD = int(input('공차 입력: '))
inputN = int(input('n 입력: '))

sequenceCal(inputN1, inputD, inputN)
print('-' * 50)
sequenceCal01(inputN1, inputD, inputN)

05_045 등비수열의 n번째 값과 n항 까지의 합
(초항a1, 공비, n 입력)

ver.1

def sequenceCal(n1, r, n):

    valueN = 0
    sumN = 0
    i = 1

    while i <= inputN:

        if i == 1:
            valueN = n1
     		sumN += valueN
            print('{}번째 항의 값: {}'.format(i, valueN))
            print('{}번째 항까지의 합: {}'.format(i, sumN))
      
            i += 1
            continue		# ⏳ 

        valueN *= r
        sumN += valueN
        print('{}번째 항의 값: {}'.format(i, valueN))
        print('{}번째 항까지의 합: {}'.format(i, sumN))
        i += 1

ver.2 공식 활용하기

  • 등비 수열(일반항) 공식: an = a1 * r^(n-1)
  • 등비 수열(합) 공식: sn = a1 * (1 - r^n) / (1-r)
def sequenceCal01(n1, r, n):

    # 등비 수열(일반항) 공식: an = a1 * r^(n-1)
    valueN = n1 * (r ** (n - 1))
    print('{}번째 항의 값: {}'.format(n, valueN))

    # 등비 수열(합) 공식: sn = a1 * (1 - r^n) / (1-r)
    sumN = n1 * (1 - (r ** n)) / (1 - r)
    print('{}번째 항까지의 합: {}'.format(n, int(sumN)))

inputN1 = int(input('a1 입력: '))
inputR = int(input('공비 입력: '))
inputN = int(input('n 입력: '))


sequenceCal(inputN1, inputR, inputN)
print('-' * 50)
sequenceCal01(inputN1, inputR, inputN)

.
.
.

🔥제로베이스 데이터 사이언스 취업스쿨 13기🔥

profile
데이터직무를 위한 공부 기록

0개의 댓글