[python] 변수 선언, 자료형

갓희·2024년 5월 7일
0

Python

목록 보기
1/5
post-thumbnail

변수 선언

변수 = 변할 수 있는 것, 어떠한 값을 담는 '상자'

컴퓨터가 기억하고 있는 메모리 공간을 변수가 가리킨다~ 라고 생각해도 좋다. (메모리에 올려두는 개념)

a = 11.5
print(a) # a를 출력하는 함수, 결과값은 11.5

변수에 넣은 값을 확인하고 싶다면 print() 함수를 사용하여 값을 출력한다.

print('hi') # hi
print(True) # True

자료형 (데이터 타입)

변수나 값의 자료형을 확인하기 위해서는 type() 함수를 사용한다.
파이썬에는 다양한 자료형이 있지만 가장 많이 쓰이는 자료형은 아래와 같다.

NoneType

논타입, 값이 없다.
None 이라는 값을 가지고 있는 데이터 타입

이는 다음과 같은 상황에서 반환된다.

  • 호출한 함수가 반환 값을 가지고 있지 않을 때
  • 무언가를 검색하였는데 해당 값을 찾을 수 없을 때
  • 접근하는 key가 dict에 존재하지 않을 때

False, 0과는 다른 의미임에 주의

Number: int, float, complex

int 정수 타입

# int 선언
a = 10
print(a) # 10

# int 생성자
b = int(10.4)
print(b) # 10
  • 파이썬은 범위가 무한대인 정수 자료형을 가지고 있다. -> 정수 오버플로우 발생 X
    아무리 큰 값을 저장하더라도 하나의 자료형인 int 로 해결할 수 있다.

float 실수 타입

# float 선언
a = 11.7
print(a) # 11.7

# float 생성자
b = float(21.5)
print(b) # 21.5
  • 실수를 선언하기 위해서는 소수점을 명시해줘야 한다.
  • 같은 10이라도 int10, float10.0으로 표현해야 한다.
    (단, . 앞/뒤의 0은 생략 가능 -> 10.으로 표기해도 됨)
  • 부동 소수점 오차가 생길 수 있으므로 주의가 필요하다.
  • 정수와 실수 연산 시 -> 실수 타입으로 반환된다.

complex 복소수 타입

# complex 선언
a = 2 + 3j # 실수부 + 허수부j
b = complex(3, 5) # complex(실수부, 허수부)
print(a) # 2 + 3j
print(b) # 3 + 5j

bool

참(True)과 거짓(False)을 가질 수 있는 데이터 타입

a = True
b = False

c = ( 3 > 2 )
print(c) # True

d = ( 3 < 2 )
print(d) # False

e = ( 3 == 2 )
print(e) # False
  • 파이썬에서 True, False는 파이썬의 예약어이기 때문에 반드시 첫 글자는 대문자로 작성
  • 문자열(''), 리스트([]), 튜플(()), 딕셔너리([])가 원소를 가지지 않고 비어있으면 False, 하나 이상의 원소를 가지면 True
  • 숫자형에서 값이 0이라면 False, 0이 아닌 다른 수라면 True

str

first_name = 'Gahee'
last_name = 'Park' # 큰 따옴표든 작은 따옴표든 상관 없음

print(first_name+last_name) # GaheePark
multi_str1 = """
문자열
멀티라인
"""
multi_str2 = '''
문자열
멀티라인
'''
a = 2
b = 'a'
print(b) # 숫자가 아닌 문자열 a 출력
  1. 문자열 + 숫자 시 에러 발생
a = "3"
b = "hi"
print(a+b) # 3hi

a = 3
b = "hi"
print(a+b) 
# 에러 발생
# Traceback (most recent call last):
# File "/Users/user/Desktop/sparta_python/pythonProject1/hello.py", line 3, in <module>
#   print(a+b)
#         ~^~
# TypeError: unsupported operand type(s) for +: 'int' and 'str'
a = '2'
b = str(2) # 문자열로 바꾸는 함수
print(a+b) # '22'
  1. 문자열의 길이를 세고 싶을 땐 len() 함수 사용
text = 'abcdefghijk'
result = len(text)

print(result) # 11
  1. 문자열 자르기 (슬라이싱)

(1) 다양한 방법으로 활용 가능

text = 'abcdefghijk'
result = text[:3]

print(result) # abc
text = 'abcdefghijk'
result = text[3:]

print(result) # defghijk
text = 'abcdefghijk'
result = text[3:7] # 3번째부터 7번째까지 문자열을 자르고 싶다

print(result) # defg
text = 'abcdefghijk'
result = text[:] # 복사하기

print(result) # abcdefghijk
text = 'abcdefghijk'
result = text[:-5]

print(result) # abcdef
text = 'abcdefghijk'
result = text[5:-1]

print(result) # fghij

(2)

myemail = '930_10@naver.com'
result = myemail.split('@') # '@'를 기준으로 자른다
print(result) # ['930_10', 'naver.com'] 배열로 출력

result2 = myemail.split('@')[1]
print(result2) # 'naver.com'

# 만약 naver가 필요하다면?
result3 = myemail.split('@')[1].split('.')[0]
print(result3) # 'naver'
phone = '02-123-1234' # 지역번호만 자르고 싶다면?
result = phone.split('-')[0]
print(result) # '02'
  1. 문자열 찾기 (인덱싱)
text = 'abcdefghijk'
result = text[4]

print(result) # e

list

리스트 자료형은 순서, 중복, 수정, 삭제를 모두 지원하는 자료형
[] 기호를 사용한다.

a_list = ['apple', 'pear', 'strawberry'] # 문자열 뿐만 아니라 불리언형, 숫자형도 가능
print(a_list) # ['apple', 'pear', 'strawberry']
print(a_list[0]) # 'apple' 인덱스로 접근
  • 원소를 가지지 않는 빈 리스트 선언 가능
  • 서로 다르거나 같은 타입의 자료형을 원소로 가지도록 선언 가능
  • 순서를 가지는 자료형이기 때문에 인덱스로 접근이 가능하다.
a_list = [3,5,2,6,8]
result = a_list[-1] # -1 입력 -> 무조건 제일 마지막 요소 출력
print(result) # 8
  • 슬라이싱으로 특정한 범위의 원소들만 접근 가능
    • start_index는 범위에 포함되지만 end_index는 포함되지 않음
# slicing 문법
list_name[start_index : end_index : step]
# 또는 step 생략(생략시 자동으로 1로 설정)
list_name[start_index : end_index]

# 예시
list = [0, 1, 2, 3, 4, 5]
print(list[2:4])
>>> [2, 3]
  • 리스트 속에 리스트도 담을 수 있다.
a_list = [2, True, 'strawberry', ['blueberry','redberry']]
print(a_list) # [2, True, 'strawberry', ['blueberry','redberry']]
print(a_list[3]) # ['blueberry', 'redberry']
print(a_list[3][1]) # 'redberry'
  • append() 함수: 리스트의 맨 끝에 요소를 추가하는 함수
a_list = [3,5,2,6,8]
a_list.append(99)
print(a_list) # [3, 5, 2, 6, 8, 99]
  • 리스트 요소 수 세기
a_list = [3,5,2,6,8]
result = len(a_list)
print(result) # 5
  • sort() 함수: 리스트 정렬하는 함수
a_list = [3,5,2,6,8]
a_list.sort() # 오름차순
print(a_list) # [2, 3, 5, 6, 8]

a_list.sort(reverse=True) # 내림차순
print(a_list) # [8, 6, 5, 3, 2]
  • in 을 사용하여 값이 있는지 없는지 파악하기
a_list = [3,5,2,6,8]
result = (5 in a_list)
print(result) # True
  • 리스트 요소 바꾸기
a_list = ['사과', '감', '배']
a[1] = '딸기'
print(a_list) # ['사과', '딸기', '배']

dict

딕셔너리. 사전 자료형은 순서가 없고 키-밸류 쌍으로 존재한다.
키 중복을 허용하지 않고, 데이터의 수정이나 삭제가 가능하다.
{} 기호를 사용한다.

a_dict = {'name': 'bob', 'age': 27}
print(a_dict['name']) # 'bob'
print(a_dict['age']) # 27
  • 딕셔너리 선언 시 key:value 식으로 아이템을 선언할 수 있지만, key=value의 형식으로도 사용 가능
  • 가독성을 위해 각 item간 줄 띄어쓰기를 사용할 수 있다.
  • value를 찾고 싶을 땐, dict_name[key_name] 처럼 찾을 수 있다.
# 빈 dict 선언
dict1 = {}
dict2 = dict()
# 원소가 있는 dict 선언
dict3 = {'name': 'Kim', 'phone': '01012345678', 'birth': '840102'}
dict4 =  dict(name='Kim', phone='01012345678', birth='840102')
# 가독성을 위해 줄 띄어쓰기
dict5 = {
	'name': 'Kim', 
	'phone': '01012345678', 
	'birth': '840102'
}
print(dict5['name'])
>>> Kim
  • 리스트와 딕셔너리가 조합되어 들어가기도 한다.
a_dict = {'name': 'bob', 'age': 27, 'friends': ['John', 'Mike', 'Ann']}
result = a_dict['friends']
print(result) # ['John', 'Mike', 'Ann']

result = a_dict['friends'][0]
print(result) # 'John'
  • 딕셔너리에 키-밸류 쌍 추가
a_dict = {'name': 'bob', 'age': 27, 'friends': ['John', 'Mike', 'Ann']}
a_dict['height'] = 180
print(a_dict) # {'name': 'bob', 'age': 27, 'friends': ['John', 'Mike', 'Ann'], 'height': 180}
  • 딕셔너리에서 값 검색
a_dict = {'name': 'bob', 'age': 27, 'friends': ['John', 'Mike', 'Ann']}
a_dict['height'] = 180
result = ('height' in a_dict)
print(result) # True
  • get(), update()를 사용해 값을 가져오거나 새로 추가하기
dict.get('key')
dict.update({'key': value})

listdict의 조합

  • 하나의 리스트에 여러 개의 딕셔너리가 들어가 있는 형태
people = [
    {'name': 'bob', 'age': 27},
    {'name': 'John', 'age': 30}
]

print(people) # [{'name': 'bob', 'age': 27}, {'name': 'John', 'age': 30}]

# 만약 30이라는 값을 얻고 싶다면?
print(people[1]['age']) # 30

연습 문제

  • smith의 sience 점수를 출력해라
people = [
    {'name': 'bob', 'age': 20, 'score':{'math':90,'science':70}},
    {'name': 'carry', 'age': 38, 'score':{'math':40,'science':72}},
    {'name': 'smith', 'age': 28, 'score':{'math':80,'science':90}},
    {'name': 'john', 'age': 34, 'score':{'math':75,'science':100}}
]

# smith의 sience 점수 출력
print(people[2]['score']['science']) # 90

tuple

순서와 중복은 지원하지만 수정과 삭제는 지원하지 않는다 (불변성)
() 기호를 사용
보안적 이슈 등의 이유로 절대 변경되면 안되는 중요한 값을 불변으로 유지하고 싶을 때 사용

  • 튜플 내부에 원소가 하나만 있을 경우: 끝에 , 반드시 추가해야 한다.
    • 그렇지 않을 경우 괄호 안에 있는 원소의 타입으로 인식됨
# 빈 tuple 선언
tuple1 = ()
tuple2 = tuple()
# 원소가 있는 tuple 선언
tuple3 = (1,)  # 원소가 하나일 때는 끝이 , 로 끝나야 튜플로 인식한다.
tuple4 = (1, 2, 3, 4)
tuple5 = ('football', 1, 2, 'soccer', False, 3.14159) # 서로 다른 자료형 사용 가능
  • list와 마찬가지로 다양한 데이터 타입을 함께 사용할 수 있다.
  • 값을 수정하거나 삭제하려고 하면 에러 발생
a = ('사과', '감', '배')

a[1] = '수박'
print(a)

# 출력 결과
Traceback (most recent call last):
  File "/Users/user/Desktop/sparta_python/pythonProject1/hello.py", line 3, in <module>
    a[1] = '수박'
    ~^^^
TypeError: 'tuple' object does not support item assignment
  • 튜플의 값을 변경하고 싶다면 list 타입으로 변환 후 수정해야 한다.
tuple = (1, 2, 3)
tuple = list(tuple)
tuple[0] = 100
print(tuple[0])
>>> 100

set

집합 자료형은 순서를 가지지 않고, 중복도 허용하지 않는 자료형이다.

a = [1,2,3,4,5,6,7,8,9,0,2,4,5,1]

a_set = set(a)
print(a_set)

# 출력 결과
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
  • 순서가 있는 자료형과는 달리 인덱스로 접근 불가
  • 원소를 찾고 싶다면 in 키워드 사용
set = {1, 2, 3, 4}
if 1 in set:
    print("found 1")
>>> found 1

교집합 구하기

a = ['사과', '감', '배']
b = ['사과', '귤', '참외']

a_set = set(a)
b_set = set(b)
print(a_set & b_set) # {'사과'}

합집합 구하기

a = ['사과', '감', '배']
b = ['사과', '귤', '참외']

a_set = set(a)
b_set = set(b)
print(a_set | b_set) # {'귤', '사과', '배', '참외', '감'}

차집합 구하기

a = ['사과', '감', '배']
b = ['사과', '귤', '참외']

a_set = set(a)
b_set = set(b)
print(a_set - b_set) # {'감', '배'}

연습문제

  • a는 듣고 b는 듣지 못한 수업을 차집합을 통해 구하는 방법
student_a = ['물리2','국어','수학1','음악','화학1','화학2','체육']
student_b = ['물리1','수학1','미술','화학2','체육']

print(set(student_a) - set(student_b)) # {'화학1', '물리2', '음악', '국어'}

func

함수도 독자적인 자료형을 가진다.

def sum(a,b):
		print('더하기를 하셨네요')
    return a+b

result = sum(43,5)
print(result)

# 출력 결과
'더하기를 하셨네요'
48

함수 활용

def bus_rate(age):
    if age > 65:
        print('무료입니다.')
        return 0
    elif age > 20:
        print('성인입니다.')
        return 2400
    else:
        print('청소년이거나 아이입니다.')
        return 1200

myrate = bus_rate(26)
print(myrate)

# 출력 결과
'성인입니다.'
2400

연습문제

  • 주민 번호를 입력 받아 성별을 출력하는 함수 만들기
def check_gender(pin):
    num = int(pin.split('-')[1][0])
    if num % 2 == 0:
        print('여자입니다.')
    else:
        print('남자입니다.')

check_gender('150101-1012345')
check_gender('150101-3012345')
check_gender('150101-2012345')
check_gender('150101-4012345')

# 출력 결과
'남자입니다.'
'남자입니다.'
'여자입니다.'
'여자입니다.'

참고 문자열을 숫자열로 바꿀 때는 int() 함수를 사용한다.


이번 글에서는 파이썬의 변수 선언, 많이 사용되는 자료형에 대해 다뤄보았다.
파이썬 고수가 되기 위해 열심히 가..가보자고

profile
나의 개발일지

0개의 댓글

관련 채용 정보