[제로베이스] 데이터 사이언스 15기 - (05-11 파이썬 중급 스터디노트)

윤태호·2023년 5월 12일
0
post-thumbnail

오늘 수강한 강의 - 파이썬 중급 문제풀이 (40 ~ 45)

함수 40 ~ 45

[1] 산술연산 계산기

def add(n1, n2):
    return n1 + n2
def sub(n1, n2):
    return n1 - n2
def mul(n1, n2):
    return n1 * n2
def div(n1, n2):
    return n1 / n2
def mod(n1, n2):
    return n1 % n2
def flo(n1, n2):
    return n1 // n2
def exp(n1, n2):
    return n1 ** n2
while True:
    print('*' * 60)
    selectNum = int(input('1.덧셈, 2.뺄셈, 3.곱셈, 4.나눗셈, 5.나머지, 6.몫, 7.제곱승, 8.종료 '))
    if selectNum == 8:
        print('Bye~')
        break
    num1 = float(input('첫 번째 숫자 입력: '))
    num2 = float(input('두 번째 숫자 입력: '))
    if selectNum == 1:
        print('num1 + num2 = {}'.format(add(num1, num2)))
    elif selectNum == 2:
        print('num1 + num2 = {}'.format(sub(num1, num2)))
    elif selectNum == 3:
        print('num1 + num2 = {}'.format(mul(num1, num2)))
    elif selectNum == 4:
        print('num1 + num2 = {}'.format(div(num1, num2)))
    elif selectNum == 5:
        print('num1 + num2 = {}'.format(mod(num1, num2)))
    elif selectNum == 6:
        print('num1 + num2 = {}'.format(flo(num1, num2)))
    elif selectNum == 7:
        print('num1 + num2 = {}'.format(exp(num1, num2)))
    else:
        print('잘못 입력했습니다. 다시 입력하세요.')
    print('-' * 60)

[2] 이동거리와 이동시간을 반환하는 함수

이동 거리

def getDistance(speed, hour, minute):
    distance = speed * (hour + minute / 60)
    return distance
print('-' * 60)
s = float(input('속도(km/h) 입력: '))
h = float(input('시간(h) 입력: '))
m = float(input('시간(m) 입력: '))
d = getDistance(s, h, m)
print('{}(km/h)속도로 {}(h)시간 {}(m)분 동안 이동한 거리: {}(km)'.format(s, h, m, d))
print('-' * 60)

이동 시간

def getTime(speed, distance):
    time = distance / speed
    print(f'time: {time}')
    h = int(time)
    m = int((time - h) * 100 * 60 / 100)
    # m = convertFloatToMinute(time - h)
    return [h, m]
print('-' * 60)
s = float(input('속도(km/h) 입력: '))
d = float(input('거리(km) 입력: '))
t = getTime(s, d)
print('{}(km/h) 속도로 {}(km) 이동한 시간: {}(h)시간 {}(m)분'.format(s, d, t[0], t[1]))
print('-' * 60)

[3] 비행기 티켓 영수증 출력 함수

childPrice = 18000
infantPrice = 25000
adultPrice = 50000
specialDC = 50
def printAirPlaneReceipt(c1, c2, i1, i2, a1, a2):
    cp = c1 * childPrice
    cp_dc = int(c2 * childPrice * 0.5)
    print('유아 {}명 요금: {}'.format(c1, cp))
    print('유아 할인 대상 {}명 요금: {}원'.format(c2, cp_dc))
    ip = i1 * infantPrice
    ip_dc = int(i2 * infantPrice * 0.5)
    print('소아 {}명 요금: {}'.format(i1, ip))
    print('소아 할인 대상 {}명 요금: {}원'.format(i2, ip_dc))
    ap = a1 * adultPrice
    ap_dc = int(a2 * adultPrice * 0.5)
    print('성인 {}명 요금: {}'.format(a1, ap))
    print('성인 할인 대상 {}명 요금: {}원'.format(a2, ap_dc))
    print('=' * 40)
    print('Total: {}명'.format(c1 + c2 + i1 + i2 + a1 + a2))
    print('TotalPrice : {}원'.format(cp + cp_dc + ip + ip_dc + ap + ap_dc))
    print('=' * 40)
childCnt = int(input('유아 입력: '))
specialDCChildCnt = int(input('할인대상 유아 입력: '))
infantCnt = int(input('소아 입력: '))
specialDCInfantCnt = int(input('할인대상 소아 입력: '))
adultCnt = int(input('성인 입력: '))
specialDCAdultCnt = int(input('할인대상 성인 입력: '))
printAirPlaneReceipt(childCnt, specialDCChildCnt,
                infantCnt, specialDCInfantCnt,
                adultCnt, specialDCAdultCnt)

[4] 재귀함수를 이용한 팩토리얼 함수

def formatedNumber(n):
    return format(n, ',')
def recursionFun(n):
    if n == 1:
        return n
    return n * recursionFun(n - 1)
inputNumber = int(input('input number: '))
inputNumberFormated = formatedNumber(recursionFun(inputNumber))
print(inputNumberFormated)

[5] 단리/월복리 계산기 함수

단리 계산기

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

월복리 계산기

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('예치금\t: {}원'.format(money))
print('예치기간\t: {}년'.format(term))
print('연 이율\t: {}%'.format(rate))
print('-' * 30)
amount = multiRateCalculator(money, term, rate)
print('{}년 후 총 수령액: {}원'.format(term, amount))
print('=' * 30)

[6] 등차 수열의 n번째 값과 합을 출력하는 함수

def sequenceCal(n1, d, n):
    valueN = 0
    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
        valueN += d
        sumN += valueN
        print('{}번째 항의 값: {}'.format(i, valueN))
        print('{}번째 항까지의 합: {}'.format(i, sumN))
        i += 1
inputN1 = int(input('a1 입력: '))
inputD = int(input('공차 입력: '))
inputN = int(input('n 입력: '))
sequenceCal(inputN1, inputD, inputN)

[7] 등비 수열의 n번째 값과 합을 출력하는 함수

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
inputN1 = int(input('a1 입력: '))
inputR = int(input('공비 입력: '))
inputN = int(input('n 입력: '))
sequenceCal(inputN1, inputR, inputN)

총평

재미있었던 부분

오늘 배운 것들 중에 가장 재미있었던 부분은 텍스트 파일 쓰기, 읽기, 열기 였다
지금까지 배운 내용과 연결은 되지만 좀 다른종류의 느낌이어서 더 새롭고 배우는 내내 재미있었다
무엇보다 직접 텍스트 파일을 만드는것이 아닌 Pycharm에서 코드만으로 텍스트 파일을 만들 수 있는것이 신기했다

어려웠던 부분

중급 강의 이후에 문제풀이에 돌입하니 정말 뭐가뭔지 모르겠는 강의가 많았다
문제풀이에서는 응용부분만 해도 어려운데 중간중간 처음보는 것들이 나와버릴때는 이해하는데 시간을 꽤 오래썼다

느낀점 및 내일 학습 계획

시간이 너무 없으니 조급한 마음도 생긴다
그리고 가면 갈수록 너무 어려워져서 기본적인 개념이 꽉 잡혀있지 않으면 계속 돌아가야 하는 일이 생기는것 같다
많이 못하더라도 꼼꼼히 해둬야겠다
내일은 46 ~ 59 문제풀이를 풀 예정이다

profile
데이터 부트캠프 참여중

0개의 댓글