for word in 'hello':
print(word)
>> h
e
l
l
o
→ ‘hello’ 라는 목록을 word 라는 변수에 담아, word 변수를 하나씩 출력.
위 예시 처럼 문자열에도 쓰일 수 있고, 다양한 종류에도 사용할 수 있음.
print(type(1))
>> <class 'int'>
파이썬은 알아서 메모리를 사용함. 수동으로 설정할 필요가 없대.
엑셀에서도 1E+30..? 이란 알 수 없는 단어..? 로 표시되는걸 파이썬은 알아서 메모리를 할당해 표시해 준다니 참 편하다
print(type(1.0))
>> <class 'float'>
우리는 1 이나 1.0 이나 같은거 아니냐 하지만 영어권은 구분해 준다 함. but 파이썬은 알아서 변환 해 준다니 정말 편하다..!
정수 + 소수 = 소수형 데이터 1+1.0 = 2 지만 컴퓨터는 float로 인식 하기 때문에, 이를 정수형으로 출력 해 주려면 앞에 int를 붙여준다.
a=int(1+1.0)
print(a)
print(type(a))
>>2
>><class 'int'>
b=float(1+3)
print(b)
print(type(b))
>>4.0
>><class 'float'>
뭔가 찾으면 2진수 기법이 젤 먼저 나오는걸 보니 2진수 먼저 알아야할 것같음.
왜냐면 숫자를 2진수로 바꿨을 때, 어떻게 표현하는지를 나눈게 고정 or 부동 소수점이기 때문.
고정 소수점
- 정수를 표현하는 비트 수와 소수를 표현하는 비트수를 미리 정해놓고, 해당 비트 만큼만 사용해서 숫자를 표현하는 방식.
- 즉, 10진수를 2진수로 바꿨으면 그걸 그대로 표현하는 방식.
ex) 7.625 를 2진수로 변환하면..
정수부는 하던 방식대로 하면되고,
소수부는 2를 곱해 결과가 1로 떨어질 때까지, or 똑같은 소수가 나올때 까지 반복.
| | 2진수 |
| --- | --- |
| 7 | 111 |
| .625 | 101 |
```
0.625 * 2 = 1.250 # 정수부 버리고 다시
0.250 * 2 = 0.500
0.500 * 2 = 1
위에서 부터 차례대로 가져오면 >>101
```
고정 소수점은 이를 그대로 가져온다니까 111.101 이 되겠지.
![Untitled](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/1ac1f8d5-01a8-4867-8a16-919274e2311a/Untitled.png)
부호비트 : 0 = 양수 , 1 = 음수
소수점을 기준으로 정수부와 소수부를 나누는 비트로 나누게 되는데,
소수점 위치는 위와 같이 미리 정해둔다 함.
부동 소수점 (floating point) 부유물?
- 소수점을 이동시켜서 표현하는 방법.
- 소수점을 한 곳에 고정시켜, 옮긴 자리 수 만큼 지수로 올려주는 방식,...?
- 2진수로 변환한 결과를 몇가지 과정을 거쳐 표현함.
- 정규화
- 2진수를
1.xxxx... * 2^n
형식로 변환하는 것.- 정수부에 1만 남을 때 까지 소수점을 왼쪽으로 이동시키고, 이동한 칸 수만큼 n 자리에 집어넣으면 된단다.
ex) `111.101` 를 정규화 하면 `1.11101 * 2^2`
부호비트 : 0이면 양수, 1이면 음수 인건 동일
가수부(23자리) : 정규화 결과 소수점 오른쪽에 있는 숫자들을 왼쪽부터 차례대로 기입. 남는자리는 0 채우기.
지수부(8자리) : 2^n 중, n에 해당 하는 수를 bias 라 지정된 숫자를 더한 다음 2진수로 바꿔서 넣어준다. (bias - 32비트 = 127)
설명 내용 출처 ↓
LMS 퀴즈로 1.0을 고정과 부동 소수점으로 나타내는 문제가 나왔다.
위 설명을 토대로 고정 소수점, 부동 소수점으로 함 바까보자.
Q1. 1.0을 32bit의 고정소수점 수와 부동소수점 수로 각각 표현해 보세요.
고정소수점의 경우 1bit(부호) + 16bit(정수) + 15bit(소수)
부동소수점의 경우 1bit(부호) + 8bit(지수) + 23bit(가수)
0 0000000000000001000000000000000
1.0 을 2진수로 변환 → 1.0
정규화 → 1.0 * 2^0 (소수점 이동이 없기 때문에 0)
23자리 가수부에는 정규화 결과 소수점 오른쪽에 있는 숫자를 넣는다 ⇒ 소수점 오른쪽 = 0 ⇒ 따라서, 0이 23개.
8자리 지수부에는 2^n 에서 n에 해당하는 수 즉, 0 을 bias 라 지정한 숫자 127을 더한 다음, 2진수로 바꿔준다.
0+127 = 127
2진수 변환 ⇒ 01111111
0 0111111100000000000000000000000
이렇게 같은 숫자라도 컴퓨터에선 표현법에 따라 다르게 인식할 수 있단 사실을 알수 있었다.
None
을 값으로 갖는 자료형.NoneType
타입으로 출력되는 데이터.print(type(None))
>> <class 'NoneType'>
null
로 표현하기도 함.bool
타입으로 출력되는 데이터.print(type(True))
print(type(False))
>>
<class 'bool'>
<class 'bool'>
not
으로 참과 거짓이 뒤집힐 수 있음.print(not True)
print(not not True)
>>
False
True
print(bool(None))
print(bool(0))
print(bool(1.1))
>>
False
False
True
print('hello world')
print('Quote(\') and double quote(\")')
>> Quote(') and double quote(")
🎀 escape 문자?
escape 문자 | 의미 |
---|---|
\” | 큰 따옴표를 출력 |
\’ | 작은 따옴표를 출력 |
\ | \ (백슬래시)를 출력 |
\n | 다음줄로 이동 (개행?) |
\t | 탭, 여러칸을 띄워 출력 |
[숫자]
를 붙여 해당 순서 인덱스에 해당하는 값만 뽑아올 수 있음.인덱스! | 인덱스 순서? | 번호? | ||
---|---|---|---|---|
a = | 1 | 2 | 3 | 4 |
인덱스 | 0 | 1 | 2 | 3 |
음수(-) 인덱스 | -4 | -3 | -2 | -1 |
#인덱스 사용
message = 'Hello'
print(message[1]) # message 의 1번째 인덱스 요소를 출력하세요
>> e
# 음수(-) 인덱스 사용
message = 'Hello'
print(message[-1])# message 의 1번째 인덱스 요소를 출력하세요
>> o
:
를 써서 [ a : z ]
a 번째 부터 z번째 직전까지의 요소를 한번에 뽑올 수도 있고,
[ a : ]
나 [ : z ]
를 이용해 a 부터 전부, 처음부터 z 까지 전부 뽑을 수도 있음.
message = 'Hello'
print(message[::1]) # 기본 (한 칸 씩)
print(message[:-1:1]) # 기본 (한 칸 씩)
print(message[::2]) # 두 칸 씩
>>
Hello
Hell
Hlo
거꾸로 출력할 수도 있다!
message = 'Hello'
print(message[::-1]) # 거꾸로 출력
>> olleH
□ 얘내도!! 컨테이너 자료형!
이름 = (값 , 값 , 값)
의 형태를 띔 ( 쉽표(,)로 구분) (소괄호)
문자열, 숫자, bool 데이터 다 들어갈 수 있다.
인덱스 기능 사용 가능.
tuple_123 = (1, 2, 3)
print(tuple_123[0])
>> 1
튜플 내 요소를 빼거나 추가할 순 없지만, 튜플끼리 합칠 순 있다.
tuple_123 = (1, 2, 3)
tuple_123[0] = 0
>> typeError
# 덧셈 연산자를 통한 합치기
tuple_a = (1, 2)
tuple_b = (3, 4)
print(tuple_a + tuple_b)
>> (1, 2, 3, 4)
nested_tuple = ((1, 2), (3, 4))
print(nested_tuple[1][0]) #
>> 3
in
연산자를 이용해 튜플안에 값이 있는지 없는지도 검사 할 수 있음.
tuple_abc = ('a', 'b', 'c')
print('a' in tuple_abc)
print('d' in tuple_abc)
>>
True
False
이름 = [요소 , 요소, 요소 ]
의 형태. (중괄호)
인덱싱 기능 사용은 비슷하나 튜플과 달리 값을 추가하거나 뺄 수 있다.
# 0번째 인덱스 요소 1을 0으로 바꿔주기.
list_123 = [1, 2, 3]
list_123[0] = 0
print(list_123)
>> [0, 2, 3]
#.append() 함수 이용하여 추가하기
#.remove() 함수 이용하여 특정 값 제거하기.
#.pop() 함수 이용하여 특정 순서의 값 빼기
list_123 = [1, 2, 3]
list_123.append(4)
print(list_123)
list_123.remove(4)
print(list_123)
list_123.pop(0)
print(list_123)
>>[1, 2, 3, 4]
[1, 2, 3]
[2, 3]
이름 = { ‘key 값’ : ‘value’값 , ‘key 값’ : ‘value’값 }
의 형태. (대괄호)# 값 추가
conductor = {'first_name': '단테', 'last_name': '안'}
conductor['gender'] = 'male' # 이렇게 추가만 해 주면되니 얼마나 편한가!
print(conductor)
>> {'first_name': '단테', 'last_name': '안', 'gender': 'male'}
# 값 제거
conductor = {'first_name': '단테', 'last_name': '안'}
conductor.pop('last_name') #제거할 ket 값을 입력
print(conductor)
>> {'first_name': '단테'} # 하니 키에 할당된 value 값도 같이 없어졌다!
conductor = {'first_name': '단테', 'last_name': '안'}
for key in conductor:
print(key)
>> first_name
last_name
conductor = {'first_name': '단테', 'last_name': '안'}
for key, value in conductor.items():
print(key + ' : ' + value)
>> first_name : 단테
last_name : 안
피보나치 수열?
⇒ 앞의 두 숫자를 더한 수가 다음 수가 되는 무한 수열.
aka.황금비율
ex) 1, 1, 2, 3, 5, 8, 13, 21, ...
피보나치 수열의 n번째 수는 n-1번째 수와 n-2번째 피보나치 수의 합입니다.
피보나치 수열이 그 빛을 발할 때에는 사람 수에 따른 최적의 치킨 수를 구할 때입니다.
즉,피보나치 수열의 n번째 숫자만큼의 사람이 있다면, n-1번째 피보나치 숫자만큼 주문하면 됩니다.
...피보나치!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!