데이터 타입의 함수

송한솔·2023년 5월 25일
0

파이썬

목록 보기
9/16

빌트인(built-in)함수와 자료형 전용 함수(method)의 차이를 배워보겠습니다.

함수 실행의 종류

print(), input()
# 바로 함수()를 실행하는경우

[1, 2, 3].append(4)
# .함수()를 실행하는 경우

바로 실행할 수 있는 빌트인(built-in)함수

()함수

  • 예시
    input()
    print()
    len()
    int()

~안에 in의 의미를 담는 .과 메서드(method)

데이터.()함수

  • 예시
    [1,2,3].apeend(3)
    "사과 바나나 오렌지".split()
  • 데이터 자료형 설계도(class)내부에 구현되어 있는 함수 실행
  • 메서드(method) : 설계도(class) 내부에 구현된 함수

사용자가 직접만드는 함수

사용자가 직접 필요한 기능을 만드는 함수는
사용자 정의 함수(User defined function)이라고 합니다.

사용자 정의 함수를 사용하는 경우

  • 사용자가 구현한 로직을 묶거나
  • 새로운 기능(없는 기능)을 구현해야될 경우

number관련 함수

# 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

# 이렇게 사용하면 정확한 계산이 가능합니다.
# 그러나 성능상의 이슈가 생길 위험이 높기 때문에
# 정말 정확한 값이 필요한 경우가 아니라면 사용하지 않는것을 권장합니다.

string관련 함수

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) # ['안녕', ' 하 세', ' 요?']

list관련 함수

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]

tuple관련 함수

# 튜플은 리스트와 유사하나, 데이터의 변경을 허용하지 않는다
# 때문에 리스트 활용에서 파괴적인 함수를 전부 제거 = 튜플 함수라고 볼 수 있습니다.

numbers = (2, 4, 6, 2, 4, 6)
print(numbers.count(2))
print(numbers.index(6))

dictionary관련 함수

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'입니다.

set관련 함수 - set(중복이 불가능한 데이터)

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}

0개의 댓글