21.12.29 AIFFEL 3일차 6. 파이썬 시작하기 part2.
목차
학습 목표
- 파이썬을 통해 프로그래밍의 기본 개념들을 이해하고 사용할 수 있다.
- 오류 메시지를 읽고 이해할 수 있다.
- 학습한 개념들을 토대로 이해하고 수정할 수 있다.
6-9 제어문
while 문
- 코드를 실행하기 전 가장 먼저 조건문을 검사하여 조건문이 참이라면 강제종료 될 때까지 실행. = 무한루프
- 주로 참과 거짓(boolean) 명제가 붙음.
for 문
- 목록 y 에서 값을 하나씩 꺼내 x 변수에 담에 반복문을 실행하는 형태.
for word in 'hello':
print(word)
>> h
e
l
l
o
→ ‘hello’ 라는 목록을 word 라는 변수에 담아, word 변수를 하나씩 출력.
위 예시 처럼 문자열에도 쓰일 수 있고, 다양한 종류에도 사용할 수 있음.
6-13 자료형 (data type)
6-14 정수형 - int(integer)
- 양의 정수와 음의 정수 모두 포함.
- type 으로 알아봤을 때, int 타입으로 출력되는 데이터.
print(type(1))
>> <class 'int'>
- 무지막지하게 크거나 작은 숫자를 표현할 땐 64비트 이상의 공간을 사용하면 된다..?
-
파이썬은 알아서 메모리를 사용함. 수동으로 설정할 필요가 없대.
엑셀에서도 1E+30..? 이란 알 수 없는 단어..? 로 표시되는걸 파이썬은 알아서 메모리를 할당해 표시해 준다니 참 편하다
-
6-15 소수형(부동소수점 수) - float
- 정수를 제외한 실수 , 소수점 (소수점 아래에 값이 있는.. 0.25 같은 수)
- type 으로 알아봤을 때, float 타입으로 출력되는 데이터.
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'>
- 반대로 정수형 데이터를 소수형으로 나타내고 싶을 땐, 앞에 float를 붙여준다.
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`
- IEEE 754 부동 소수점 표현
부호비트 : 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(가수)
- 1.0을 고정 소수점으로 표현하기
- 정수부인 1은 2진수로 변환하면 1
- 소수부인 0은 0이다.
- 고정소수점으로 표현하면
0 0000000000000001000000000000000
- 1.0을 부동 소수점으로 표현하기.
-
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
이렇게 같은 숫자라도 컴퓨터에선 표현법에 따라 다르게 인식할 수 있단 사실을 알수 있었다.
6-16 NoneType 자료형
None
을 값으로 갖는 자료형.- 정말 아무것도 없는 것을 나타냄. 0과는 다르다 0과는!
- type 으로 알아봤을 때,
NoneType
타입으로 출력되는 데이터.
print(type(None))
>> <class 'NoneType'>
- 다른 프로그래밍 언어에선
null
로 표현하기도 함. - 런타임 오류가 발생했을 때, 실행되는 프로그램을 멈추지 않구 아무것도 출력 할 수없단 의미로 객체를 내보내기 위해 필요한 기능. (c 언어에선 필요 없대)
6-17 bool(boolean) 자료형 -
- 참(True) or 거짓(False)
- 수학에서 시작된 불 대수에서 시작된 개념?
- type 으로 알아봤을 때,
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
6-18 str(string) 문자열 자료형
print('hello world')
- ‘’ 나 “” 안에 있는 문자 데이터
- 출력 시, “ 나 ‘ 를 함께 출력하고 싶다면? escape 문자의 \ 를 함께 붙여준다.
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
-
6-19 튜플(tuple) 과 리스트(list) 자료형
□ 얘내도!! 컨테이너 자료형!
- 튜플 (tuple)
-
이름 = (값 , 값 , 값)
의 형태를 띔 ( 쉽표(,)로 구분) (소괄호) -
문자열, 숫자, 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
-
- 리스트 (list)
-
이름 = [요소 , 요소, 요소 ]
의 형태. (중괄호) -
인덱싱 기능 사용은 비슷하나 튜플과 달리 값을 추가하거나 뺄 수 있다.
# 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]
-
6-20 딕셔너리(dictionary) 자료형
이름 = { ‘key 값’ : ‘value’값 , ‘key 값’ : ‘value’값 }
의 형태. (대괄호)- 직접 인덱스를 정해줄 수 있다.(key 값)
- 정해준 key 값을 불러올 수도 있고, 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 값도 같이 없어졌다!
- for 문을 사용하면 기본적으론 key 값만 돌려줌
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 : 안
6-22 고오오오급 스킬 재귀함수..! 🍗 피보나치!!!!!!!!!!!!!!!!!!!!
- 함수 내에서 그 함수 스스로를 사용하는 인셉션 같은 함수?
- 대표적인 예로 피보나치 수열의 n번째 숫자를 찾는 작업.
피보나치 수열?
⇒ 앞의 두 숫자를 더한 수가 다음 수가 되는 무한 수열.
aka.황금비율
ex) 1, 1, 2, 3, 5, 8, 13, 21, ...
피보나치 수열의 n번째 수는 n-1번째 수와 n-2번째 피보나치 수의 합입니다.
피보나치 수열이 그 빛을 발할 때에는 사람 수에 따른 최적의 치킨 수를 구할 때입니다.
즉,피보나치 수열의 n번째 숫자만큼의 사람이 있다면, n-1번째 피보나치 숫자만큼 주문하면 됩니다.
...피보나치!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- 메모이제이션
- 중간 계산 값을 기억해 놓고 다시 하는 대신, 값을 바로 읽어 쓴느 방식으로 계산 시간을 줄이는 기법이래!
6장을 마치며
- 기초적인 내용도 많아 일전에 배웠던걸 복습 해 보거나, 새로운 개념이 추가되어 찾아본다고 열심히 구글링 했던 것 같다. 처음엔 어려워 보였던 소수형 변환도 하나하나 따져보면서 해 보니 조금은 알 것 같았다.
- 다음 7장 진도를 얼른 보고 싶어 피보나치는 잠시 내려놓기로 했다.
- 죄송해요 전 수포였지만 기회가 된다면 다시 돌아올게요 피보나치....
- 피보나치ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ
Author And Source
이 문제에 관하여(21.12.29 AIFFEL 3일차 6. 파이썬 시작하기 part2.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ratana3455/6.-파이썬-시작하기-part2.-21.12.29저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)