크기가 0인 리스트 데이터 만들기
tmp = []
print(tmp)
>>>
[]
데이터형을 판별하는 함수 만들기
리스트인 경우 리스트 안에 있는 각 데이터의 타입도 반환해야 함
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() 함수에 넣어서 타입을 확인했다.
팁 계산하는 함수 만들기
금액과 팁 비율을 입력 받음(팁 비율 디폴트 값 = 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이 더해지지 않도록 했다.
문장 속에서 특정 단어가 나타나는 횟수와 위치를 출력하는 함수 만들기
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문을 빠져나가도록 했다.
나눗셈 기능을 하는 함수 만들기
입력 인자는 정수여야 함
나눗셈 기호나 수학 모듈은 사용할 수 없음
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 변수를 만들어서 연산에 사용했다.
하노이의 탑 문제를 푸는 함수 만들기
원반의 개수, 시작 지점, 도착 지점을 입력 받음
지점은 반드시 알파벳이어야 함(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 강의를 들어보니 학습 시간이 꽤 오래 걸릴 것 같아서, 시간 나는 대로 틈틈이 공부해야겠다.