[데이터사이언스12기-스터디노트]파이썬(23.02.06)

도윤수·2023년 2월 6일
0

Python스터디노트

목록 보기
5/16
post-thumbnail

스터디노트 5일차 범위

파이썬 중급 5(모듈제작), 파이썬 중급 문제풀이 1 ~ 2

📖 모듈은 파이썬 파일이다!

지난시간에 만들었던 4칙연산 기능을 하는 calculator 를 .py 파일로 따로 저장하면 그또한 모듈이 되는것이다.

calculator 같은 .py 파일을 하나 만든다.
모듈을 활용한 .py파일을 하나 더 만든다.
모듈을 활용할 곳에서 import calculator 를 한 후 마치 이 파일에 작성한 것 처럼 활용한다.

예제) 문자열을 입력하면 뒤집어서 출력하는 모듈

#뒤집어서 반환하는 모듈 reverseStr.py
def reverseStr(str):
    reverseString = ''

    for c in str:
        reverseString = c + reverseString

    return reverseString
#모듈을 활용해서 출력하는 module.py
import reverseStr

userInputStr = input('문자열 입력: ')
reverseString = reverseStr.reverseStr(userInputStr)
print(f'reverseString: {reverseString}')

reverseStr.py 부터 살펴보면
1. parameter로 들어온 값을 매개변수로 str이 받는다.
2. 변수 reverseString 을 선언.
3. for 문을 통해 입력받을 str 값에서 c로 나눠서 한글자씩 뒤로 밀면서 저장한다.

📖 중급 문제풀이 1

7가지의 함수를 선언하고, 골라서 사용할 수 있게 만들어본다!

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:
        add(num1, num2)
        print(f'{num1} + {num2} = {add(num1, num2)}')

    elif selectNum == 2:
        sub(num1, num2)
        print(f'{num1} - {num2} = {sub(num1, num2)}')

    elif selectNum == 3:
        mul(num1, num2)
        print(f'{num1} * {num2} = {mul(num1, num2)}')

    elif selectNum == 4:
        div(num1, num2)
        print(f'{num1} / {num2} = {div(num1, num2)}')

    elif selectNum == 5:
        mod(num1, num2)
        print(f'{num1} % {num2} = {mod(num1, num2)}')

    elif selectNum == 6:
        flo(num1, num2)
        print(f'{num1} // {num2} = {flo(num1, num2)}')

    elif selectNum == 7:
        exp(num1, num2)
        print(f'{num1} ** {num2} = {exp(num1, num2)}')

    else:
        print('잘못 입력하셨습니다. 다시 입력하세요.')
    print('-' * 60)

중급넘어왔다고 바로 길어져버렸다.... 하지만! 이해를 하고 넘어가야하니 설명간다.

  1. def 부분은 순서대로 덧셈, 뺄셈, 곱셈, 나눗셈, 나머지, 몫, 제곱을 구하는 함수를 선언.
  2. while 반복문은 조건이 참 일동안 도는데 True 를 넣어줘서 사실상 계속 도는 구조를 만든다.
  3. 빠져나가긴 해야하니 8 번은 break 를 걸어준다. (★ while문 만들면 탈출구 부터 찾아두자!!)
  4. 어떤 함수든 인수를 넣어줘야 하니까 input 값을 받아줄 num1, num2 를 선언.
  5. 어떤 함수를 사용할지를 골랐을 때 나올 수 있도록 if, elif 그리고 범위를 넘어갔을 때 돌려줄 else.

코드와 설명은 간단하지만 길어졌다고 쫄았다...

📖 중급 문제풀이 2

요구하는 출력물을 만들어내라!

  1. 90(km/h)의 속도로 2(h)시간 45(m)분 동안 이동한 거리 : 247.5km 을 만들어라.
def getDistance(speed, hout, minute):
    return speed * (hout + (minute / 60))
#    print(getDistance(s, h, m))


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)분 동안 이동한 거리 : {getDistance(s, h, m)}(km)')
  1. s, h, m 변수로 속도, 시간, 분 을 입력받는다. (easy)
  2. 속도와 시간으로 거리를 구해야하므로 거시속, 거속시 공식을 getDistance 함수로 만든다.
  3. 단위를 맞춰줘야 하기에 분은 60분 기준으로 맞춘다. (입력값은 시간값이므로 60으로 나누어 분으로 맞춤)

나쁘지 않은 난이도 였지만 거시속, 거속시 공식에서 단위를 맞추어 주는것이 포인트인듯한 문제.

  1. 90(km/h)속도로 247.5(km) 이동한 시간 : 2(h)시간 45(m)분 을 만들어라.
def getTime(speed, distance):
    time = distance / speed
    print(f'time: {time}')
    h = int(time)
    m = int((time - h) * 100 * 60 / 100)

    return [h, m] #값이 2개라 리스트로 묶어서 반환

s = float(input('속도(km/h)를 입력하시오.  '))
d = float(input('거리(km/h)를 입력하시오.  '))
t = getTime(s, d)

print(f'{s}(km/h)속도로 {d}(km) 이동한 시간: {t[0]}(h)시간 {t[1]}(m)분')
print('*' * 60)
  1. getTime 함수로 속도, 거리를 받아 시간을 구한다.
  2. 100 기준 75 이니 60분 기준일 때 시간은 x 다 ☞ 100 : 75 = 60 : x 로 거시속 공식!
  3. 결과물에서 시간을 h, m 두 개로 나누었기 때문에 시간(t) 값을 list[h, m]으로 반환!

1번 문제와 비슷했지만 역시 단위 환산과 시간을 리스트로 묶는 센스를 볼 수 있는 문제였다.

● MAC 기준 작성하다 Windows와 키를 헷갈려서 복붙한다는게 [control + c] 를 눌렀는데 input을 입력할 수 없는 keyboardinterrupt error가 발생해서 애 먹었다...
다시 한번 [control + c] 이 친구를 입력하면 풀리니 당황하지 마시길!!

🔥🔥바쁜시간 쪼개서 매일매일 성장해 나가는 모습을 기록하자!🔥🔥

profile
DataScience를 하고 싶은 DoIT

0개의 댓글