240716 싸피 파이썬반
지난시간 복습
1. float(실수형) 데이터타입은 근사값이다.
-> 컴퓨터가 수를 표현하는 방식에서 발생하는 것
-> 연산시 문제 발생 : 부동소수점 에러 (작은 오차 문제)
-> 대표적으로 decimal 모듈 활용하기
2. 지수표현 방식
-> 소문자 e혹은 E 사용한 지수 표현
a = 3.14 * 0.01
a = 314e-2
3. sequence types
: 여러 값들을 순서대로 나열하여 저장하는 자료형(정렬X)
4. escape sequence
: 작은 따옴표와 큰 따옴표 말고 일반적으로 escape sequence 예약어들을 사용한다
ex. \', \"
5. f-string
: 문자열에 f 또는 F 접두어 붙이고 표현식을 나타내는 방법
문자열에 변수 삽입 가능
6. 리스트 []
: 여러 개 값을 순서대로 저장하는 변경 가능한 시퀀스 자료형
: 0개 이상의 객체(요소)를 포함하며 데이터 목록을 저장
: 데이터는 어떤 자료형도 저장 가능 -> 파이썬만의 특징 -> 파이썬은 모두 주소로 처리하기에 ✔
7. 슬라이싱
[시작 : 미만 : 증감값] ✔
오늘 수업기록
1. 중첩된 리스트
2. 튜플 ()
: 0개 이상의 객체(요소) 포함하며 데이터 목록을 저장
: 데이터는 어떤 자료형도 저장 가능
m_tuple_1 = (1,)
왜 이렇게 표현할까?
(1)일 경우 int로 표현된다
고로 하나일 땐 쉼표와 함께 쓴다 ✔
리스트와의 차이점
튜플은 불변!
그러나 튜플보단 리스트의 개념을 아는 게 중요하다
튜플의 쓰임새는 안전하게 여러 개의 값을 전달, 다중 할당 등에 쓰임
-> 개발자가 직접 사용하기보다 파이썬 내부 동작에서 주로 사용됨 ✔
- 다중할당 ex.
x, y = 10,20
print(x) #출력 : 10
print(y) #출력 : 20
- 괄호를 생략했는데도 불구하고 실행이 됨(파이썬 내부 동작)
3. range ✔
: 연속된 정수 시퀀스를 생성하는 변경 불가능한 자료형
: 함수 형태이다
: range(시작 값, 끝 값, 증감 값)
range(n)
: 0부터 n-1까지의 숫자의 시퀀스
: 왜 n-1까지일까?
: 시작점이 0이기에
증가값이 음수일 수 있음
: 증가 값이 음수이면 시작값이 끝값보다 커야함
range를 print 하면? 범위를 출력해줌
- print(range(n)) : 아직 메모리에 올리지 않은 상태(할당x, 조건을 부여한 것, dtype은 range)
- for문이나 print(list(range(n))) 써야 할당됨
range : 반복주체에 해당 ✔
# 주로 반복문과 함께 활용
for i in range(5): #반복주체에 해당
4. non sequence type
1) dict : 딕셔너리 ✔ {}
- key-value쌍으로 이루어진 데이터 자료형
- 쌍으로 이루어졌기에 순서가 없음
- index 존재 x
print(my_dict[1]) # KeyError : 1
- key값 중복 x, value 값 변경 가능
- key에는 변경 불가능한 자료형만 사용 가능(str, int, float, tuple, range ..)
- 왜일까?
- key로 접근해, 값을 얻어내기에.
- ex. api 키 가져올 때
- value는 모든 자료형 사용 가능
my_dict = {'apple': 12,
'list': [1, 2, 3]}
#주소값은 바뀌지 않는다
print(id(my_dict[0]))
# 추가
my_dict['banana'] = 100
# 변경
my_dict['apple'] = 40
#출력
{'apple': 40, 'list': [1, 2, 3], 'banana': 100}
✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔✔
#my dict 변수 자체의 주소값은 바뀌지 않는다
print(id(my_dict))
print(id(my_dict([0]) # 첫번째 요소값의 주소는 바뀜
- 딕셔너리는 언제 쓰일까?
리스트는 시간복잡도가 크다
key로 바로 접근 가능하게 dict이 생긴 것!
- key value 형태의 자료형은 모든 컴퓨터 언어에서 가지고 있는 type이다
2) set
- 순서와 중복이 없는 변경 가능한 자료형
- 중괄호 {}
- 딕셔너리와 기호가 유사하다, 왜일까? 중복x, 순서x(원리 비슷) ✔
- 빈 세트 어떻게 만듦?
a = {} #딕셔너리로 인식
set()함수로 만들 수 있음
my_set_1 = set()
- 아래 두 가지 케이스에서 많이 씀
중복제거를 하거나 집합 연산필요할 때
- 중복이 없기에 집합 연산 가능
합집합(|)
차집합(-)
교집합(&)
#%%
#튜플값을 우회적으로 바꾸기
t1 = (1,2,['사과', '포도'])
t1[-1][0] ='귤' #리스트 내 요소값이라 수정 가능
print(t1)
# %%
# 논리연산자
# 1) and (&)
print(True and True)
print(True& True)
# %%
# 2) or (|)
print(True or True)
print(True | True)
# %%
# 3) xor (^) : 다르면 True, 같으면 False
#print(True xor True)
print(True ^ True)
- 참고로 &, |라는 연산자는, 비트 연산시 사용됨
#0b : 이진수화
print(0b1011 & 0b0111) # 3
print(bin(0b1011 & 0b0111 )) #0b11
print(0b1011 | 0b0111) # 15
print(bin(0b1011 | 0b0111 )) #0b1111
print(0b1011 ^ 0b0111) # 12
print(bin(0b1011 ^ 0b0111 )) #0b1100
5. other types
- 값이 없음을 표현하는 자료형
a = None
-> 왜? 초기화 & None이 아닌 0이라면 값이 할당안된건지 0으로 할당된건지 구분이 어려우니까 ✔
- 참과 거짓을 표현하는 자료형(Boolean)
조건문에서 많이 쓰임
6. collection
- 데이터를 담을 수 있는 데이터 타입을 말함
- srt, list, tuple, dict, set 를 말함(sequence type + nonsequence type)
- c++ 언어에서는 컨테이너라고도 함
7. 형변환
암시적 형변환
- 정수와 실수 연산에서 정수가 실수로 변환됨
print(3 + 5.0) # 8.0
- true 1 false 0, 대다수 컴퓨턴언어 공통적
print(1 == True) #근데 이건 좋은 조건은 아님, 같은 dtype끼리 비교할 것
명시적 형변환
- int(), float() 등 함수
- ' ' -> 문자열 변환
print(int(3.5)) #3
8. 연산자
1) 복합 연산자 (재할당)
- 연산과 할당이 함께 이루어짐
a += b # a = a+ b
a //= b # a = a // b #몫
a %= b # a = a % b #나머지
y = 10
y -= 4
print(y) # 6
2) 비교 연산자
- < : 미만, <= : 이하, is : 같음, is not : 같지 않음 등
- 일반적으로 True, False로 값이 나온다.
- is, is not 왜 존재할까?
- ==는 값에 대한 비교(동등성)
- is는 식별성(identity, 같은 방의 메모리 주소에 대한 비교 )
- is는 None, Bool에 많이 씀
print(2 is 2.0) # False
3) 논리&비교 연산자
# 논리 연산자 & 비교 연산자
num = 15
result = (num > 10) and (num % 2 == 0)
print(result) # False
# 하나가 false라서 false
4) 단축평가
- 논리연산에서 다루는 것
- 핵심은 값이 비어있지 않다면 true(str도 값이 비어있지 않다면 true)
- 파이썬은 유연한 언어라 false, true를 0, 1로 암시변환함
- 첫 번째 값이 확실할 때 두 번째 값을 확인하지 않음
- 왜 있는가 : 코드 실행 최적화를 위함
-파이썬 특징
1) 0 은 false, 1은 true
2) ' ' 비어있으면 false, 하나라도 채워져있으면 true
예제
답
5) 멤버십 연산자(안에 있냐 없냐 in, not in, True, False)
6) +와 *는 시퀀스형에서 결합, 반복이 됨!
추가 :
내림, 반올림, 올림
# %%
#내림 , 반올림, 올림
num = 3.3
# 1)내림
floor_num = int(num)
print(floor_num) #3
# 2) 반올림
round_num = round(num)
round_num = round(num, 1) # 소수점 첫째자리 표시
print(round_num) # 3 # 3.3
# 3) 올림
ceil_num = int(num + 0.999999)
print(ceil_num) #4
ceil_num = int(num) + (num != int(num))
print(ceil_num)
ceil_num = -(-num//1)
import math
print(math.ceil(num))
'SSAFY' 카테고리의 다른 글
[수업기록] 모듈과 제어문의 모든 것 (1) | 2024.07.18 |
---|---|
[수업기록] 파이썬 함수의 모든 것 (1) | 2024.07.17 |
[수업복습] 슬라이싱 팬다. (1) | 2024.07.15 |
[수업기록] git clone, 프로그래밍 기초 및 파이썬 기초 문법(1) (0) | 2024.07.15 |
[입과 후 스타트캠프를 마치며] 드디어 (12) | 2024.07.14 |