빌트인(built-in)함수와 자료형 전용 함수(method)의 차이를 배워보겠습니다.
함수 실행의 종류
print(), input()
# 바로 함수()를 실행하는경우
[1, 2, 3].append(4)
# .함수()를 실행하는 경우
()함수
데이터.()함수
사용자가 직접 필요한 기능을 만드는 함수는
사용자 정의 함수(User defined function)이라고 합니다.
사용자 정의 함수를 사용하는 경우
# int(), float()도 함수, 많이 할 것이 없다.
n1, n2 = 3, 3.5
print(n1, float(n1)) # 3 3.0
print(n2, float(n2)) # 3.5 3.5
# 소수점 연산 -> 부동 소수점 연산
# 컴퓨터는 소수점을 정확하게 저장하지 못한다고 합니다.
print(1.1 + 2.2) # 3.3000000000000003
print(1.1 + 2.7) # 3.8000000000000003
print(1.1 + 2.6) # 3.7 => 특정 값에 따라 정확하게 저장할 수도 있음
# 위의 문제를 해결하려면 decimal 라이브러리를 사용하면 됩니다.
from decimal import Decimal
print(Decimal(1.1) + Decimal(2.2))
# 3.300000000000000266453525910 => ??????????
print(Decimal('1.1') + Decimal('2.2')) # 3.3
# 이렇게 사용하면 정확한 계산이 가능합니다.
# 그러나 성능상의 이슈가 생길 위험이 높기 때문에
# 정말 정확한 값이 필요한 경우가 아니라면 사용하지 않는것을 권장합니다.
text = "Hello Spencer"
print(len(text))
print(text.find('A')) # -1(없음)
print(text.count('e')) # 3(e가 3개 있다.)
print(text.find("Spencer")) # 6번 인덱스부터 Spencer가 시작한다
print(text.count("Spencer")) # 'Spencer'라는 단어가 1개 있다.
# ====================
print("="*20)
# 20글자 내에서 정렬
print(text.center(20))
print(text.ljust(20))
print(text.rjust(20))
# 전자키트(아두이노,라즈베리파이)를 코딩할 때 사용
# LCD 또는 화면에 나올수 있는 부분이 제한적일때.
# 글자수 제한(20)같은 부분을 조절해서 사용
# ====================
print("="*20)
text = "Hello Spencer"
#비 파괴적인 처리
text.upper() # upper => 대문자로 수정
# 원본 데이터를 수정하지않음
print(text) # Hello Spencer
# 따라서, text를 수정하려면
text = text.upper()
print(text) # HELLO SPENCER
text = text.split()
print(text) # ['HELLO', 'SPENCER']
# ====================
print("="*20)
#한글자씩 분리하기
text = "Hello 한솔"
print(list(text))
# ['H', 'e', 'l', 'l', 'o', ' ', '한', '솔']
# ====================
print("="*20)
# 구분자로 분리하기
text = "안녕하 세 요?"
text = text.split(" ") # " " = 공백(띄어쓰기)으로 구분
print(text) # ['안녕하', '세', '요?']
text = "안녕, 하 세, 요?"
text = text.split(",") # ,으로 구분
print(text) # ['안녕', ' 하 세', ' 요?']
user = ["송한솔", 7, 200.2]
print("len(리스트명) = 리스트의 배열 개수 확인")
print(len(user)) # 3
# 원본 배열 수정 - 파괴적인 처리
# 새로운 데이터 요소 추가
print('='*20)
print(".append사용")
user = ["송한솔", 7, 200.2]
user.append(10000)
print(user) # ['송한솔', 7, 200.2, 10000]
user += [20000]
print(user) # ['송한솔', 7, 200.2, 10000, 20000]
# 삽입 insert(넣을 인덱스번호, 값)
print('='*20)
print(".insert사용")
user = ["송한솔", 7, 200.2]
print(user)
user.insert(3, 10000)
print(user)
# ====================
# index, count
print('='*20)
# index
print("리스트.index사용")
numbers = [100, 70, 30, 50, 60, 70, 100]
print(numbers.index(70)) # 1번 인덱스부터 있다
print(numbers.index(30)) # 2번 인덱스부터 있다
print(numbers.index(100)) # 0번 인덱스부터 있다
# print(numbers.index(1000))
# 리스트에 없으므로 오류를 반환함
# stirng의 find와 유사함
# 값이 없을경우 -1를 반환하는 find와 다르게 오류를 출력함
# count
print('='*20)
print("리스트.count사용")
print(numbers.count(70)) # 2개 있다
print(numbers.count(30)) # 1개 있다
print(numbers.count(100)) # 0개 있다(없다)
# 값 탐색 -> 삭제 remove
print('='*20)
numbers = [100, 70, 30, 50, 60, 70, 100]
numbers.remove(100)
numbers.remove(100)
print(numbers) # [70, 30, 50, 60, 70, 100]
# 리스트 합치기 확장 extend
print('='*20)
# 원본배열 수정하지 없이 사용하는 방법 - 비파괴적인 사용
score1 = [30, 50, 70]
score2 = [20, 40, 60]
score1.extend(score2)
print(score1) # [30, 50, 70, 20, 40, 60]
print(score2) # [20, 40, 60]
# 반전 .reverse(), reversed()
print('='*20)
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
numbers = list(reversed(numbers)) # 비파괴적
print(numbers) # [0, 9, 8, 7, 6, 5, 4, 3, 2, 1]
numbers.reverse() # 파괴적
print(numbers) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
# 정렬(오름차순) - .sort(), sorted()
print('='*20)
numbers = [5, 1, 3, 2, 4, 7, 6, 8, 0, 9]
print(list(sorted(numbers, reverse=True))) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
numbers.sort(reverse=True)
print(numbers) # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
# 튜플은 리스트와 유사하나, 데이터의 변경을 허용하지 않는다
# 때문에 리스트 활용에서 파괴적인 함수를 전부 제거 = 튜플 함수라고 볼 수 있습니다.
numbers = (2, 4, 6, 2, 4, 6)
print(numbers.count(2))
print(numbers.index(6))
print("="*30)
user_dict = {
"name" : "송한솔",
"age" : 30,
"height" : 170,
"salary" : 10000
}
# key만, value만 모아서 보기
print("="*30)
print(user_dict.keys())
print(user_dict.values())
print(user_dict.items())
# list형식으로 바꿔서 받기
print("="*30)
print(list(user_dict.keys()))
print(list(user_dict.values()))
print(list(user_dict.items()))
# items()를 for문을 이용해서 받기
print("="*30)
for item1, item2 in user_dict.items():
print(item1, item2)
# name 송한솔
# age 30
# height 170
# salary 10000
# 이것을 응용하면
for item1, item2 in user_dict.items():
print("Key'{}'의 값은 '{}'입니다.".format(item1,item2))
# Key'name'의 값은 '송한솔'입니다.
# Key'age'의 값은 '30'입니다.
# Key'height'의 값은 '170'입니다.
# Key'salary'의 값은 '10000'입니다.
numbers = {2, 4, 6, 2, 4, 6}
print(numbers) # {2, 4, 6}
# 삽입 add
numbers.add(7)
print(numbers)
# 다른 것 찾기. 빼기와 같은 개념
numbers1 = {1, 2, 3, 4, 5}
numbers2 = {1, 2, 3, 4, 5, 6, 7}
print(numbers1 - numbers2) # set()
print(numbers1.difference(numbers2)) # set() => 비어있는 set 배열만 남음
print(numbers2 - numbers1) # {6, 7}
print(numbers2.difference(numbers1)) # {6, 7}