python - 파이널 테스트 리뷰 : 데이터 취업 스쿨 스터디 노트 11/24

slocat·2023년 11월 24일
0

start-data

목록 보기
23/75

1번

크기가 0인 리스트 데이터 만들기

tmp = []
print(tmp)

>>>
[]

2번

데이터형을 판별하는 함수 만들기
리스트인 경우 리스트 안에 있는 각 데이터의 타입도 반환해야 함

def data_type(var):
    if str(type(var)) == "<class 'int'>":
      return 'int'
    
    elif str(type(var)) == "<class 'float'>":
      return 'float'
    
    elif str(type(var)) == "<class 'str'>":
      return 'string'

    elif str(type(var)) == "<class 'bool'>":
      return 'boolean'
    
    elif str(type(var)) == "<class 'dict'>":
      return 'dict'
    
    elif str(type(var)) == "<class 'tuple'>":
      return 'tuple'

    elif str(type(var)) == "<class 'set'>":
      return 'set'
    
    elif str(type(var)) == "<class 'list'>":
      if len(var) == 0:
        return 'list'
      
      else:
        result = ''
        
        for i in range(len(var) - 1):
          temp = data_type(var[i])
          result = result + temp + ', '
        
        result = result + data_type(var[len(var) - 1])

        return 'list <' + result + '>'
 
print(data_type([2, 3, [2, 3], "hello"]))

>>>
list <int, int, list <int, int>, string>

➡ 리스트는 빈 리스트인 경우와 그렇지 않은 경우로 나눴다.
빈 리스트라면 단순히 list라고 출력하고,
안에 데이터가 있다면 데이터를 다시 data_type() 함수에 넣어서 타입을 확인했다.

3번

팁 계산하는 함수 만들기
금액과 팁 비율을 입력 받음(팁 비율 디폴트 값 = 10%)
팁은 1달러 단위로 딱 떨어지도록 올림

def calc_tips(price, rate=10):
    tip = price * rate / 100
  
    if tip - int(tip) == 0:
        print(int(tip))
    else:
        tip = int(tip) + 1
        print(tip)

calc_tips(46, 32)
calc_tips(2000)

>>>
15
200

➡ 처음에 else문 부분 코드만 작성했더니 팁이 5일 때도 6으로 출력되는 상황이 발생했다. if-else문으로 나눠서 값이 정수로 딱 떨어지는 경우에는 1이 더해지지 않도록 했다.

4번

문장 속에서 특정 단어가 나타나는 횟수와 위치를 출력하는 함수 만들기

def search_target(sentence, target):
    index = []
    strIdx = 0
    
    while True:
      
        temp = sentence.find(target, strIdx)
      
        if temp == -1:
            return f'{str(len(index))}, {index}'
      
        index.append(temp)
        strIdx = temp + len(target) - 1
  
sentence = "Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex."
target = "than"

print(search_target(sentence, target))
print(search_target(sentence, 'is'))

>>>
3, [20, 50, 82]
3, [10, 40, 72]

➡ find() 함수는 문장에 찾으려는 단어가 여러 개 있어도 맨 처음에 나오는 하나의 인덱스만 알려준다. 그래서 시작 인덱스를 변수로 설정하고, 한 번 찾을 때마다 시작 인덱스를 변경해서 다음에 나오는 단어를 찾도록 했다.
더이상 문장 속에 찾으려는 단어가 없다면 find() 함수는 -1을 반환한다. 이를 이용해서 검색을 마치면 while문을 빠져나가도록 했다.

5번

나눗셈 기능을 하는 함수 만들기
입력 인자는 정수여야 함
나눗셈 기호나 수학 모듈은 사용할 수 없음

def div_ab(a,b):
    if (a - int(a)) != 0 or (b - int(b)) != 0:
        print('정수를 입력해주세요.')
        return
  
    # 3.0 같은 숫자가 들어올 수도 있으니까
    a = int(a)
    b = int(b)
    
    tempA = a
    tempB = b
  
    div = 0
    while tempA >= tempB:
        div += 1
        tempA -= tempB
    
    mod = tempA
  
    print(f'{a}나누기 {b}의 결과: 몫 {div}, 나머지 {mod}')

div_ab(3, 2)
div_ab(2, 3)   
div_ab(3.1, 2.1)

>>>
3나누기 2의 결과: 몫 1, 나머지 1
2나누기 3의 결과: 몫 0, 나머지 2
정수를 입력해주세요.

➡ return 값을 받지 않고 print만 해야 하는 조건이 있었다.
마지막 print 함수에 a, b가 그대로 나오게 하려고 tempA, tempB 변수를 만들어서 연산에 사용했다.

6번

하노이의 탑 문제를 푸는 함수 만들기
원반의 개수, 시작 지점, 도착 지점을 입력 받음
지점은 반드시 알파벳이어야 함(A, B, C)

def hanoi_sol(n, s, e):
    points = ['A', 'B', 'C']
    points.remove(s)
    points.remove(e) 
    v = points[0]
  
    if n == 1:
      print(f'{s} -> {e}')
  
    else:
      hanoi_sol(n-1, s, v)
  
      print(f'{s} -> {e}')
  
      hanoi_sol(n-1, v, e)
  
hanoi_sol(3, 'A', 'B')

>>>
B -> C
B -> A
C -> A
B -> C
A -> B
A -> C
B -> C

➡ 강의 내용과 유사하나 함수의 매개변수가 3개뿐이고, 시작 지점과 도착 지점은 반드시 알파벳 A, B, C로 받아야 하는 조건이 있었다.
중간 지점 변수를 함수 내부에서 선언하고, 변수의 값에는 A, B, C 중에서 시작 지점과 도착 지점 변수로 들어오지 않은 알파벳을 넣어줬다.

함수 실행 과정에서는 굳이 세 개의 지점이 모두 필요 없어서(어디에서 어디로 가는지만 출력하니까) s, e, v 중에서 시작 지점과 도착 지점을 골라 다시 hanoi_sol() 함수로 넣어줬다.

🚗 이번 테스트는 점수가 중요하지 않아서 편한 마음으로 풀 수 있었다.
다른 수강생님들의 코드도 궁금하다.

🚕 주말이다!
EDA 강의를 들어보니 학습 시간이 꽤 오래 걸릴 것 같아서, 시간 나는 대로 틈틈이 공부해야겠다.

0개의 댓글