본문 바로가기

Python_Beginer/Note

Python 수강 노트 2

- Python 사용 버전 : 3.7.x

- Python 사이트 : https://www.python.org/(add path 포함 설치)

- 수업 교재 참조 사이트 : https://wikidocs.net/book/1

- 사용 에디터 : 파이참(https://www.jetbrains.com/pycharm/download/#section=windows)


- 2진수

- bit 정보의 최소단위

- 1byte = 8bit

- 한글 = 2byte(16bit)

- 영어 = 1byte(8bit)

- MSB(most significant bit, msb) : 최상위 비트

이진수 내에 의미하는 특정 비트에서, 그것은 그 숫자에서 비트수보다 하나 적은 방향으로 0에서 각 비트를 비트수로 할당하는게 일반적이다.

그러나 이 할당을 사용하는 방식은 어떤 방향에 있을지도 모르고, 모든 방식은 (다른 조건에) 사용된다.

이것은 "msb"가 비트수 대신에 "high-order bit"를 가리키는 데 사용되는 이유 중 하나이다(그리하여 커다란 혼란의 가능성을 갖는다)


<진수 변환 예제>

100 -> 2진수 변환 1 1 0 0 1 0 0

-> 8진수 변환 1 4 4

113 -> 2진수 변환 1 1 1 0 0 0 1

-> 8진수 변환 1 6 1

-> 16진수 변환 7 1

111 -> 2진수 변환 1 1 0 1 1 1 1

-> 8진수 변환 1 5 7

-> 16진수 변환 6 F

173 -> 2진수 변환 1 0 1 0 1 1 0 1

-> 8진수 변환 2 5 5

-> 16진수 변환 A D


- 파이썬 사칙연산자

+ : 덧셈

- : 뺄셈

* : 곱하기

** : 거듭 제곱

/ : 나누기(실수 나눗셈)

// : 나누기 연산 후 소수점 이하의 수를 버리고, 정수 부분의 수만 구함(정수 나눗셈)

% : 나누기 연산 후 몫이 아닌 나머지를 구함(나머지)


- 복소수형

파이썬의 복소수형은 complex 클래스로 구현되어 있다. 복소수는 크기를 비교할 수 없다.

문자열을 복소수로 반환하며, real 인수가 문자열일 경우에는 중앙의 부호(+,-) 주위에 공백을 허용하지 않는다.

real을 사용하면 실수부를 반환하며, imag를 사용하면 허수부를 반환한다. conjugate()는 켤레 복소수를 반환한다.


- 이스케이프 코드

프로그래밍할 때 사용할 수 있도록 미리 정의해 둔 "문자 조합"이다. 주로 출력물을 보기 좋게 정렬하는 용도로 이용된다.

\n : 개행 (줄바꿈)

\t : 수평 탭(Tap 키)

\\ : 문자 "\"(백 슬레시)

\' : 단일 인용부호(')(작은 따옴표)

\" : 이중 인용부호(")(큰 따옴표)


<이스케이프 예제>

>>> multiline = "Life is too short\nYou need python"

>>> print(multiline)


>>> multiline='''

... Life is too short

... You need python

... '''

>>> print(multiline)


- 정수형(integer)

short int(2byte)

int(4byte)

long int(8byte)


- 실수형(floating-point)

float(4byte)

double(8byte)


- 문자형(string)

char(2byte)


-논리형

boolean(1byte)


- 인덱싱(Indexing)

파이썬은 0부터 숫자를 센다.(시작번지 0)

<인덱싱 예제>

>>> a = "Life is too short, You need Python"

>>> a[0]

"L"

>>> a[-1]

"n"

>>> a[3]

"e"

Life is too short, You need Python

0         1         2         3 

0123456789012345678901234567890123


- 배열이란

똑같은 자료형으로 많은 수의 변수를 선언하고 사용

파이썬 데이터 그룹으로 묶어서 표현하는 배열문법 사용

1. 배열 선언하고 사용하기

자료형 변수이름

int student[20] -> 80byte

float student[20] -> 80byte


2. 배열의 특정 요소에 값 대입하기

배열이름   값을 대입할 색인   대입할 값

student[20]        : 4


- 슬라이싱(Slicing)

문자열을 잘라낸다.

>>> a = "Life is too short, You need Python"

>>> a[0:4] # a[시작 번호:끝 번호]

"Life"

>>> a[6:12]

"s too "


>>> a = "20010331Rainy"

>>> year = a[:4] # a[시작 번호:끝 번호]에서 시작 번호를 생략하면 문자열의 처음부터 끝 번호까지 뽑아낸다.

>>> day = a[4:8] # a[시작 번호:끝 번호]

>>> weather = a[8:] # a[시작 번호:끝 번호]에서 끝 번호 부분을 생략하면 시작 번호부터 그 문자열의 끝까지 뽑아낸다.

>>> year

"2001"

>>> day

"0331"

>>> weather

"Rainy"


>>> a = "Life is too short, You need Python"

>>> b = a[0] + a[1] + a[2] + a[3]

>>> b

"Life"

>>> a[0:4] # b = a[0] + a[1] + a[2] + a[3]와 동일한 결과값 출력됨.

"Life"

>>> a[5:7]

"is"

>>> a[19:]

"You need Python"

>>> a[:17]

"Life is too short"

>>> a[19:-7]

"You need"


>>> a = "pithon"

>>> a[1] = "y" # a에 pithon을 python으로 변경할려한다.

Traceback (most recent call last): # 에러발생

  File "<stdin>", line 1, in <module>

TypeError: 'str' object does not support item assignment

>>> a[:1] + "y" + a[2:] # 이와 같이 슬라이싱을 이용하여 변경가능하다.

"python"




< 190105 >

160 -> 2진수 변환 1 0 1 0 0 0 0 0

-> 8진수 변환 2 4 0

-> 16진수 변환 A 0

111 -> 2진수 변환 1 1 0 1 1 1 1

-> 8진수 변환 1 5 7

-> 16진수 변환 6 F


- 숫자형(Number)


1. 사직연산 : +, -, *, /


2. x의 y제곱을 나타내는 연산자 : **


3. 나눗셈 후 나머지를 반환하는 연산자 : %


4. 나눗셈 후 몫을 반환하는 연산자 : //


- 문자열 자료형(String)


1. 문자열에 따옴표 포함시키기


2. 여러 줄로 이루어진 문자열


3. 문자열 더해서 연결하기(Concatenation)


4. 문자열 곱하기


5. 인덱싱(Indexing)

파이썬은 0부터 센다.


6. 슬라이싱(Slicing)


7. 문자열 포매팅(Formatting)

코드 설명

%s 문자열 (String)

%c 문자 1개(character)

%d 정수 (Integer)

%f 부동소수 (floating-point)

%o 8진수

%x 16진수

%% Literal % (문자 % 자체)


9. 정렬과 공백


10. 소수점 표현


11. 문자열 개수 세기(count)


12. 위치 알려주기 1(find)

해당 값이 없을 경우 -1 반환


13. 위치 알려주기 2(index)

해당 값이 없을 경우 아래와 같은 에러 출력

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

ValueError: substring not found


14. 문자열 삽입(join)


15. 소문자를 대문자로 바꾸기(upper)


16. 대문자를 소문자로 바꾸기(lower)


17. 공백 지우기

ⓐ 왼쪽 공백 지우기(lstrip)

ⓑ 오른쪽 공백 지우기(rstrip)

ⓒ 양쪽 공백 지우기(strip)


18. 문자열 바꾸기(replace)


19. 문자열 나누기(split)


20. 고급 문자열 포매팅(format)

ⓐ숫자 바로 대입하기

ⓑ문자열 바로 대입하기

ⓒ숫자 값을 가진 변수로 대입하기

ⓓ2개 이상의 값 넣기

ⓔ이름으로 넣기

ⓕ인덱스와 이름을 혼용해서 넣기

ⓖ왼쪽 정렬

ⓗ오른쪽 정렬

ⓘ가운데 정렬

ⓙ공백 채우기

ⓚ소수점 표현하기

ⓛ{ 또는 } 문자 표현하기


- 리스트 자료형(List)

1. 1, 3, 5, 7, 9라는 숫자 오음

리스트명 = [요소1, 요소2, 요소3, ...]


2. 리스트의 인덱싱

파이썬은 0부터 센다.

ⓐ이중 리스트에서 인덱싱

ⓑ삼중 리스트에서 인덱싱


3. 리스트의 슬라이싱

ⓐ 중첩된 리스트에서 슬라이싱하기


4. 리스트 더하기 : +


5. 리스트 반복하기 : *


6. 리스트에서 하나의 값 수정하기


7. 리스트에서 연속된 범위의 값 수정하기


8. [ ] 사용해 리스트 요소 삭제하기


9. del 함수 사용해 리스트 요소 삭제하기


10. 리스트에서 요소 추가 : append


11. 리스트 정렬 : sort

A = 65 / a = 97

sort는 해당 문자를 아스키코드로 변환한 숫자를 기준으로 오름차순 한다.

아스키코드 변환 방법 ord("문자")


12. 리스트 뒤집기 : reverse


13. 위치 반환 : index


14. 리스트에 요소 삽입 : insert


15. 리스트 요소 제거 : remove


16. 리스트 요소 끄집어내기 : pop


17. 리스트에 포함된 요소 x의 개수 세기 : count

찾는 값이 없으면 0이 반환


18. 리스트 확장 : extend


- 튜플 자료형(Tuple)

1. 모양은 ( 과 )으로 둘러싼다.


2. 튜플 요소 값 삭제 시 오류가 발생한다.

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

TypeError: 'tuple' object doesn't support item deletion


3. 튜플 요소 값 변경 시 오류가 발생한다.

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

TypeError: 'tuple' object does not support item assignment


4. 인덱싱


5. 슬라이싱


6. 더하기 : +


7. 곱하기 : *


- 딕셔너리 자료형(Dictionary)

1. 모양은 { 과 }으로 둘러싼다.


2. Key를 통해 Value를 얻는다.


3. 딕셔너리 쌍 추가하기 : 변수[추가할 키 값] = 벨류 값


4. 딕셔너리 요소 삭제하기 : del 변수[키 값]


5. 딕셔너리에서 Key 사용해 Value 얻기

딕셔너리 인덱싱 처음 번호는 1


6. 딕셔너리 만들 때 주의할 사항

먼저 딕셔너리에서 Key는 고유한 값이므로 중복되는 Key 값을 설정해 놓으면 하나를 제외한 나머지 것들이 모두 무시된다는 점을 주의해야 한다. 다음 예에서 볼 수 있듯이 동일한 Key가 2개 존재할 경우 1:'a'라는 쌍이 무시된다.

이렇게 Key가 중복되었을 때 1개를 제외한 나머지 Key:Value 값이 모두 무시되는 이유는 Key를 통해서 Value를 얻는 딕셔너리의 특징에서 비롯된다. 즉, 동일한 Key가 존재하면 어떤 Key에 해당하는 Value를 불러야 할지 알 수 없기 때문이다.

또 한 가지 주의해야 할 사항은 Key에 리스트는 쓸 수 없다는 것이다. 하지만 튜플은 Key로 쓸 수 있다. 딕셔너리의 Key로 쓸 수 있느냐 없느냐는 Key가 변하는 값인지 변하지 않는 값인지에 달려 있다.

리스트는 그 값이 변할 수 있기 때문에 Key로 쓸 수 없는 것이다. 아래 예처럼 리스트를 Key로 설정하면 리스트를 키 값으로 사용할 수 없다는 오류가 발생한다.

따라서 딕셔너리의 Key 값으로 딕셔너리를 사용할 수 없음은 당연한 얘기가 될 것이다. 단, Value에는 변하는 값이든 변하지 않는 값이든 상관없이 아무 값이나 넣을 수 있다.

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

TypeError: unhashable type: 'list'


7. Key 리스트 만들기 : keys()


8. Value 리스트 만들기 : values()


9. Key,Value 쌍 얻기 : items()


10. Key:Value 쌍 모두 지우기 : clear()


11. Key로 Value 얻기 : get()

딕셔너리에 없는 경우 none를 반환


12. 해당 Key가 딕셔너리에 안에 있는지 조사하기 : in()


- 집합 자료형(set)

1. 중복을 허용하지 않는다.


2. 순서가 없다.


3. 교집합 : & or intersection()


4. 합집합 : | or union()


5. 차집합 : - or difference()


6. 값 1개 추가하기 : add


7. 값 여러개 추가하기 : update


8. 특정 값 제거하기 : remove


- 연습문제 (106, 107, 108, 109)




< 190112 >

1. 멤버 연산자


2. 자료형의 참과 거짓을 구분하는 기준


3. 변수 : 데이터를 담는 공간

- 변수를 만들때는 =(assignment) 기호를 사용(대입 연산자)

- 표현식 : 변수명 = 변수에 저장할 값

ex> a = 3


4. byte   1byte

   bolean 1byte

   char   2byte

   int 4byte

   float  4byte

   long 7byte

   double 8byte

   short 2byte


5. 진수 변환

- 176 -> 2진수 변환  1 0 1 1 0 0 0 0

  -> 8진수 변환  2 6 0

  -> 16진수 변환 B 0

- 113 -> 2진수 변환  0 1 1 1 0 0 0 1

  -> 8진수 변환  1 6 1

  -> 16진수 변환 7 1

- 123 -> 2진수 변환  0 1 1 1 1 0 1 1 

  -> 8진수 변환  1 7 3

  -> 16진수 변환 7 b


6. 제어문

- if 문


- if와 else를 이용한 조건문의 기본 구조

if 조건문:

수행할 문장1

수행할 문장2

...

else:

수행할 문장A

수행할 문장B

...


- 들여쓰기(indentation) : if 조건문: 바로 아래 문장부터 if문에 속하는 모든 문장에 들여쓰기를 해주어야 한다. 미수행시 오류 발생.

>>> if money:

...     print("택시를")

... print("타고")

  File "<stdin>", line 3

    print("타고")

        ^

SyntaxError: invalid syntax


- 비교 연산자(Comparison Operators)

Operator Description Example

== 값이 동일하다 (a == b) → false

!= 값이 동일하지 않다 (a != b) → true

> 왼쪽 값이 오른쪽 값보다 크다 (a > b) → false

< 왼쪽 값이 오른쪽 값보다 작다 (a < b) → true

>= 왼쪽 값이 오른쪽 값보다 크거나 동일하다 (a >= b) → false

<= 왼쪽 값이 오른쪽 값보다 작거나 동일하다 (a <= b) → true


- 논리 연산자(Logical Operators)

Operator Description Example

and 논리 AND 연산. 둘다 참일때만 참 (a and b) = False

or 논리 OR 연산. 둘 중 하나만 참이여도 참 (a or b) = True

not 논리 NOT 연산. 논리 상태를 반전     not(a and b) = True


- 맴버 연산자(Membership Operators)

Operator Description Example

in list 내에 포함되어 있으면 참 (a in list) = False

not in list 내에 포함되어 있지 않으면 참 (b not in list) = True


- elif문

if 조건문:

수행할 문장 1-1

수행할 문장 1-2

...

elif 조건문2:

수행할 문장 2-1

수행할 문장 2-2

...

else:

수행할 문장 A

수행할 문장 B

...


- while문

while 조건문:

수행할 문장1

수행할 문장2

수행할 문장3

...


- while break문 : 강제로 빠져나가기


- %d = 10진수 / %f = 실수 / %c = 문자 / %s = 문자열


- while continue문 : 조건에 맞지 않는 경우 맨 처음으로 돌아가기


- while loop : 무한 루프(반복)


- for 문

for 변수 in 리스트(또는 튜플, 문자열):

수행할 문장 1

수행할 문장 2

...


- 전위 증가 / 후위 증가


b = a++; a = 8 b = 7

b = ++a; a = 8 b = 8

b = a--; a = 6 b = 7

b = --a; a = 6 b = 6


- range 함수

시작 숫자와 끝 숫자를 지정. 범위지정.

range(1, 11) -> 1 ~ 10(끝 숫자는 포함하지 않음)


sum =  sum + i

   sum(0) + 1

0 + 1= sum(0+1) + 2

(0 + 1) + 2 = sum([(0+1) + 2] + 3


- 리스트 안에 for문 포함하기

[표현식 for 항목 in 반복 가능 객체 if 조건]

[표현식 for 항목1 in 반복 가능 객체 1 if 조건 1

  for 항목2 in 반복 가능 객체 2 if 조건 2

  ...

  for 항목n in 반복 가능 객체n if 조건n]

  

<190119>

- python에 나눗셈은 0으로 할수 없다.

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

ZeroDivisionError: division by zero


- str1 == str2 (1번과 2번 앞글자 아스키코드 비교)


- 중간고사(코딩 후 제출)


- def 정의


< 190126 >

- sum = sum + i , 즉 i 는 i + 1에 의해 항상 반복문이 끝날 때 마다 1씩 증가. sum + i는 2 또는 3의 배수가 누적해서 쌓여지도록 하게 되는 계산식.

sum = sum(0) + i(2)    # 오른쪽 계산 결과값인 2 가 왼쪽 sum 변수에 할당됩니다.

sum = sum(2) + i(3)    # 기존 sum 변수에 할당되어 있던 2와 i값인 3이 더해져서 5가 왼쪽 sum 변수에 할당됩니다 

sum = sum(5) + i(6)

이렇게 오른쪽 계산한 값이 왼쪽 변수에 할당되면서 누적.

- 객체 지향 프로그래밍(Object-Oriented Programming, OOP)

컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다.

객체 지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용된다. 

또한 프로그래밍을 더 배우기 쉽게 하고 소프트웨어 개발과 보수를 간편하게 하며, 보다 직관적인 코드 분석을 가능하게 하는 장점을 갖고 있습니다.

그러나 지나친 프로그램의 객체화 경향은 실제 세계의 모습을 그대로 반영하지 못한다는 비판을 받기도 한다.

- 클래스 class - 붕어빵틀(설계도)

- 객체 object - 붕어빵(객체)



< 190209 >

- 123 -> 2진수 변환  1 1 1 1 0 1 1

  -> 8진수 변환  1 7 3

  -> 16진수 변환 7 B

'Python_Beginer > Note' 카테고리의 다른 글

Python 분석 방법  (0) 2019.03.03
Python 수강 노트 4  (0) 2019.02.24
Python 수강 노트 3  (0) 2019.02.23
Python 수강 노트 2  (0) 2019.02.23
Python 수강 노트 1  (0) 2019.02.23
190222>NeoSmartNote  (0) 2019.02.22