230908_스터디노트

Sihyun Kim·2023년 9월 8일

[연습문제] 함수(01)

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.종료\t'))

    if selectNum == 8:
        print('Bye~')
        break


    num1 = float(input('첫 번째 숫자 입력: '))
    num2 = float(input('두 번째 숫자 입력: '))

    if selectNum == 1:
        print(f'{num1} + {num2} = {add(num1, num2)}')
    elif selectNum == 2:
        print(f'{num1} - {num2} = {sub(num1, num2)}')
    elif selectNum == 3:
        print(f'{num1} * {num2} = {mul(num1, num2)}')
    elif selectNum == 4:
        print(f'{num1} / {num2} = {div(num1, num2)}')
    elif selectNum == 5:
        print(f'{num1} % {num2} = {mod(num1, num2)}')
    elif selectNum == 6:
        print(f'{num1} // {num2} = {flo(num1, num2)}')
    elif selectNum == 7:
        print(f'{num1} ** {num2} = {exp(num1, num2)}')

    else:
        print('입력 오류. 다시 입력해주세요.')

    print ('-' * 60)
  • 입력 오류 메세지가 사용자 input을 받기 전에 출력되게 하고 싶은데,
    구현이 잘 안되어서 질문함!
  • 역시나 어이없는 실수였다.. selectNum == range(1,8) 이 아니라 selectNum in range(1,8)를 썼어야 했음! 결과는 아래와 같다!
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.종료\t'))

    if selectNum == 8:
        print('Bye~')
        break

    if selectNum in range(1,8):


        num1 = float(input('첫 번째 숫자 입력: '))
        num2 = float(input('두 번째 숫자 입력: '))

        if selectNum == 1:
            print(f'{num1} + {num2} = {add(num1, num2)}')
        elif selectNum == 2:
            print(f'{num1} - {num2} = {sub(num1, num2)}')
        elif selectNum == 3:
            print(f'{num1} * {num2} = {mul(num1, num2)}')
        elif selectNum == 4:
            print(f'{num1} / {num2} = {div(num1, num2)}')
        elif selectNum == 5:
            print(f'{num1} % {num2} = {mod(num1, num2)}')
        elif selectNum == 6:
            print(f'{num1} // {num2} = {flo(num1, num2)}')
        elif selectNum == 7:
            print(f'{num1} ** {num2} = {exp(num1, num2)}')

    else:
        print('입력 오류. 다시 입력해주세요.')

    print ('-' * 60)

[연습문제] 함수(02)

# 거리(km) = 속도(km/h) * 시간(h)

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

print('-' * 60)
s = float(input('속도(km/h)입력: '))
h = float(input('시간(h)입력: '))
m = float(input('시간(m)입력: '))
d = getDistance(s, h, m)

print(f'{s}(km/h)속도로 {h}(h)시간 {m}(m)분 동안 이동한 거리: {d}(km)')
print('-' * 60)

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

print('-' * 60)
s = float(input('속도(km/h) 입력: '))
d = float(input('거리(km) 입력: '))
t = getTime(s, d)

print(f'{s}(km/h)속도로 {d}(km)이동한 시간: {t[0]}(h)시간 {t[1]}(m)분')
  • float로 계산된 시간을 다시 시간과 분으로 나눠주는 부분 빼고는 쉬운 문제
  • 시간과 분으로 나눌 때는 float를 int로 캐스팅 해서 시간을 구하고,
    원래 값에서 시간을 뺀 소수점 값을 * 60 해주기
  • 그 다음이 가장 중요! return을 리스트로 해주고, 받아서 쓸 때도 리스트로 불러와야 함
    ex: {t[0]}시 {t[1]}분

[연습문제] 함수(03)

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

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

def printAirplaneRecipt(i1, i2, c1, c2, a1, a2):
    
    print('=' * 60)

    ip = i1 * infantPrice
    ip_dc = int(i2 * infantPrice * specialDC)
    print(f'유아 {i1}명 요금: {formatedNum(ip)}원')
    print(f'유아 할인 대상 {i2}명 요금: {formatedNum(ip_dc)}원')

    cp = c1 * childPrice
    cp_dc = int(c2 * childPrice * specialDC)
    print(f'소아 {c1}명 요금: {formatedNum(cp)}원')
    print(f'소아 할인 대상 {c2}명 요금: {formatedNum(cp_dc)}원')

    ap = a1 * adultPrice
    ap_dc = int(a2 * adultPrice * specialDC)
    print(f'성인 {a1}명 요금: {formatedNum(ap)}원')
    print(f'성인 할인 대상 {a2}명 요금: {formatedNum(ap_dc)}원')

    print('=' * 60)

    print(f'Total: {i1+i2+c1+c2+a1+a2}명')
    print(f'Total Price: {formatedNum(ip+ip_dc+cp+cp_dc+ap+ap_dc)}원')

    print('='*60)




i1 = int(input('유아 입력: '))
i2 = int(input('할인대상 유아 입력: '))
c1 = int(input('소아 입력: '))
c2 = int(input('할인대상 소아 입력: '))
a1 = int(input('성인 입력: '))
a2 = int(input('할인대상 성인 입력: '))

printAirplaneRecipt(i1, i2, c1, c2, a1, a2)
  • format(n, ',')을 그대로 쓰니까 뭔가 오류가 났는데, def로 따로 만들어서 사용하니 편리
  • 80% 정도는 혼자 힘으로 해결! 했지만 아직 전체를 보고 짜는 머리가 없음 ㅠㅠ

[연습문제] 함수(04)

❗ 팩토리얼 구하기 (재귀함수)

def factorialCal(n):

    if n == 1:
        return n

    return n * factorialCal(n-1)

userNum = int(input('input number: '))
print(format(factorialCal(userNum), ','))
  • 아래 return 대신 else를 쓰니 오류가 잔뜩... return을 알맞게 쓰기 아직 어려움

👌 이자 계산기

won = int(input('예치금(원): '))
year = int(input('기간(년): '))
interest = int(input('연 이율(%): '))

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

def simple(w, y, i):
    return w + (w * y * (i * 0.01))

def compound(w, y, i):

    y = y * 12              #연 -> 월로 변경
    i = (i * 0.01) / 12     #월 이자로 변경
    total = w

    for n in range(y):
        total += total * i

    return int(total)


print('[단리 계산기]')
print('=' * 30)
print(f'예치금\t: {formatedNum(won)}원')
print(f'예치기간\t: {year}년')
print(f'연 이율\t: {interest}%')
print('-' * 30)
print(f'{year}년 후 총 수령액: {formatedNum(int(simple(won,year,interest)))}원')
print('=' * 30)
print('[월복리 계산기]')
print('=' * 30)
print(f'예치금\t: {formatedNum(won)}원')
print(f'예치기간\t: {year}년')
print(f'연 이율\t: {interest}%')
print('-' * 30)
print(f'{year}년 후 총 수령액: {formatedNum(int(compound(won,year,interest)))}원')
print('=' * 30)
  • 단리를 너무 단순하게 썼나.. 답안이랑 너무 다른데 뭐 일단 맞으니까 패스
  • 적당한게 for문인지 while문인지 헷갈린다 ㅜ

[연습문제] 함수(05)

🤪 등차수열

a1 = int(input('a1 입력: '))
dif = int(input('공차 입력: '))
n = int(input('n 입력: '))

def progression(a, d, n):

    valueN = 0
    sumN = 0

    for i in range(1, n+1):
        if i == 1:
            valueN = a
            sumN = a
            print(f'{i}번째 항의 값: {valueN}')
            print(f'{i}번째 항까지의 합: {sumN}')

        else:
            valueN += d
            sumN = sumN + valueN

            print(f'{i}번째 항의 값: {valueN}')
            print(f'{i}번째 항까지의 합: {sumN}')

progression(a1, dif, n)
  • 나는 당연하게 for문을 썼는데, 풀이에서는 while문을 썼다. 무슨 차이일까?
  • sumN = a 를 안하는 바람에 한참을 헤맸다..
  • 등차 수열의 공식을 써서 해보라고 하는데... 공식을 당장 외울 자신이 없어서 패스
    수학 시간에 다시 합시다

[연습문제] 함수(06)

🙄 등비수열

def seqCal(a1, r, n):

    valueN = 0; sumN = 0

    for i in range(1, n+1):
        if i == 1:
            valueN = a1
            sumN = a1
            print(f'{i}번째 항의 값: {valueN}')
            print(f'{i}번째 항까지의 합: {sumN}')

        else:
            valueN *= r
            sumN += valueN
            print(f'{i}번째 항의 값: {valueN}')
            print(f'{i}번째 항까지의 합: {sumN}')

a1 = int(input('a1 입력: '))
r = int(input('공비 입력: '))
n = (int(input('n 입력: ')))

seqCal(a1, r, n)
  • 이번에도 while문 대신 if문 사용. 어차피 1부터 n까지 정해진 범위를 돌리는 건데 왜 while문을 사용하는지 의문
profile
문과이과예체능통합형인재

0개의 댓글