: Calculation + Remember(컴퓨터는 계산을 하고 기억을 한다. )
: 명령어의 모음(집합)
ex: 엑셀의 sum, avg 등은 관련 명령어를 모아서 만든 작은 프로그램의 일종이다.
: 자신의 생각을 나타내고 전달(명령)하기 위해 사용하는 체계. 문법적으로 맞는 말의 집합
선언적 지식(declarative knowledge) : 사실에 대한 내용
명령적 지식(imperative knowledge) : How-to
컴퓨터에게 명령적 지식을 활용하는 것은 생각보다 힘들다. 명확하게 절차 및 방법을 정의해야 한다.
- 별수에 별도의 타입 지정이 필요없다(동적 타이핑 언어라고 불리기도 한다).
- 변수에 별도의 타입 지정이 필요 없음. 타입을 원할 때마다 바꾸면서 프로그래밍이 가능.
- 문법 표현이 매우 간결하여 짧은 시간 내에 마스터 가능하다(Very expressive language).
- 크로스 플랫폼 언어이다.
- 다양한 운영체제에서 돌아감.
- 인터프리터 언어(interpreter)이다.
- 소스코드를 기계어로 변환하는 컴파일 과정 없이 바로 실행 가능하다.
- 한줄 입력하고 실행한 후, 바로 확인 가능하다.
- 객체 지향 프로그래밍 언어(OOP: Object Oriented Programming)이다.
- 모든 것이 객체로 구현되어 있다.
- 객체(object): 숫자, 문자, 클래스 등 값을 가지고 있는 모든 것
: 코드를 '어떻게 작성할지'에 대한 가이드라인
- 그래서 왜 스타일 가이드를 쓰는가: 코드를 일관적으로 작성하기 위해
: 변할 수 있는 수
동일 변수에 다른 객체를 언제든 할당할 수 있기 때문에, 참조하는 객체가 바뀔 수 있기 때문에 '변수'라고 불린다.
- 할당 연산자(=)를 통해 값을 할당(assign)한다.
- type(): 변수에 할당된 값의 타입
- id(): 변수에 할당된 해시 값
- x = 10, y = 20 일 때, 각각 값을 바꿔서 저장하는 코드 작성해보자!
tmp = x
x = y
y = tmp
print(x, y)
y, x = x, y
print(x, y)
💻식별자: 파이썬 객체(변수, 함수, 모듈, 클래스 등)를 식별하는데 사용되는 이름(name)
- 예약어로 하면 안된다.
- 숫자로 시작하면 안된다.
💻사용자 입력(input):
name = input('Insert name: ')
#홍길동 입력
print(name) #홍길동 출력됨
💻주석(Comment): 주석으로 처리될 내용 앞에 '#'을 입력
💻불린형(Boolean Type): True/False(1 또는 0만의 값을 갖는다)
- 비교나 논리 연산을 수행하기 위해 활용된다.
- 0이 아닌 모든 수는 모두 True이다.
💻None: 값이 없음을 표현하기 위해 존재한다.
💻논리 연산자(Logical Operator): 논리식을 판단하여 참(True)와 거짓(False)를 반환한다.
- And : 둘 모두가 참이어야 참
연산자 | 내용 |
---|---|
True and True | True |
True and False | False |
False and False | False |
- Or : 둘 중 하나만 참이어도 참
연산자 | 내용 |
---|---|
True or True | True |
True or False | True |
False or False | False |
- Not : 참 거짓의 반대의 결과
연산자 | 내용 |
---|---|
not True | False |
not False | True |
-
파이썬의 모든 정수는 int 타입이다. 오버플로우가 발생하지 않는다.
-
정수가 아닌 모든 실수는 float 타입이다.
- 기본적인 사칙연산 및 수식 계산
연산자 | 내용 |
---|---|
+ | 덧셈 |
- | 뺄셈 |
* | 곱셈 |
% | 나머지 |
/ | 나눗셈 |
// | 몫 |
** | 거듭제곱 |
- 나머지는 의외로 쓰이는 경우가 굉장히 많은데, 짝수인지 홀수인지, 어떤 수의 배수인지 확인 시 사용된다.
- 연산과 할당이 함께 이뤄짐
연산자 | 내용 |
---|---|
a += b | a = a + b |
a -= b | a = a - b |
a *= b | a = a * b |
a /= b | a = a / b |
a //= b | a = a // b |
a %= b | a = a % b |
a **= b | a = a * b |
- 값을 비교하며, True/False 값을 리턴함
연산자 | 내용 |
---|---|
< | 미만 |
<= | 이하 |
> | 초과 |
>= | 이상 |
== | 같음 |
!= | 같지 않음 |
is | 객체 아이덴티티(OOP) |
is not | 객체 아이덴티티가 아닌 경우 |
- 모든 문자는 str 타입이다.
- 문자열은 작은 따옴표('')나 큰 따옴표로 표기("")
- 중첩따옴표(Nested Quotes) = "He said, 'I love programming!' "
- 삼중따옴표(Triple Quotes) = '''I love programming!\n Especially with python! '''
fruit = 'abcdefg'
#인덱스 1이상, 3미만
print(frult[1:3]) # bc
#마지막 문자 출력
print(fruit[-1]) # g
#2이상 5미만 2step 건너뛰기
print(fruit[2:5:2]) # ce
#5이하 2초과 거꾸로 출력
print(fruit[5:2:-1]) # fed
#3미만 모두 출력
print(fruit[:3]) # abc
#5이상 모두 출력
print(fruit[5:]) # fg
#모든 문자 출력
print(fruit[::]) # abcdefg
#문자 거꾸로 출력
print(fruit[::-1]) # gfedcba (뒤집기)
- 문자열 내에서 특정 문자나 조작을 위해서 역슬래시() 사용.
print('안녕하세요, \n반갑습니다.')
print('따옴표를 \'씁니다\'')
print('역슬래시를 표기하는 방법은 \\로 표기하면 됩니다.')
name = 'Kevin'
print(f'Hello, my name is {name}')
- 암시적 형 변환(Implicit Typecasting)
- 3.0과 같은 float를 int로 자동으로 변환해주는 경우이다.
- 명시적 형 변환(Explicit Typecasting)
- str(3.5), int('3.5') 처럼 직접 형변환을 해주는 것이다.
: 여러 문자열, 숫자를 한 번에 저장하기 위한 개념이다. 예시로 list가 있다.
List
student1 = 'Kevin'
student2 = 'Jessica'
student3 = 'Jenny'
student4 = 'Nick'
students = ['Kevin', 'Jessica', 'Jenny', 'Nick']
#이와 같이 한 번에 리스트에 담을 수 있다!
print(students[0]) #Kevin
print(students[3]) #Nick
만약에 위의 네 명의 사람을 성별로 나누고 싶을 땐 어떻게 해야할까?
dictionary(사전)을 활용하자!
Dictionary
students = {'Girl': ['Jessica', 'Jenny'],
'Boy' : ['Kevin', 'Nick']}
'''
이 때 Girl, Boy를 dictionary의 Key라고 하고,
이에 해당하는 list를 Value라고 한다.
dictionary에는 순서가 존재하지 않기 때문에 반드시 Key로만 접근한다.
'''
print(students['Girl']) #['Jessica', 'Jenny']
-
시퀀스 : 순서가 있는 컨테이너 (인덱스로 접근이 가능하다)
-
문자열(immutable): 문자들의 나열
-
리스트(mutable): 변경 가능한 값들의 나열
-
튜플(immutable): 변경 불가능한 값들의 나열
-
레인지(immutable): 숫자의 나열
-
-
컬렉션/비시퀀스: 순서가 없는 컨테이너
- 세트(mutable): 유일한 값들의 모음
- 딕셔너리(mutable): 키-값들의 모음
- 변경 가능한 값들의 나열된 자료형
- 순서를 가지며, 서로 다른 타입의 요소를 가질 수 있다.
- **변경 가능(mutable)**하고, **반복 가능(iterable)**하다.
리스트 값 추가/삭제
.append
: 리스트에 추가하고자 하는 값을 전달 (맨 뒤에 추가 됨)
.pop
: 삭제하고자 하는 인덱스를 전달
-
불변한 값들의 나열이다.
-
순서를 가지며, 서로 다른 타입의 요소를 가질 수 있다.
-
**변경 불가능(immutable)**하고, **반복 가능(iterable)**하다.
-
소괄호() 혹은 tuple()을 통해 생성한다
a = (1,2,3,4)
-
값에 대한 접근은 리스트와 동일하게 인덱스로 가능하나, 값 변경이 불가능하며 값 추가, 삭제가 불가능하다(immutable).
ex:
#값 접근
a = (1,2,3,4)
print(a[1]) # 2
#값 변경은 불가능하다.
a[1] = 0 # 불가능
-
숫자의 시퀀스를 나타내기 위해 사용한다.
- 기본형:
range(3)
(0,1,2) - 범위지정:
range(1,4)
(1,2,3) - 범위 및 스텝 지정:
range(1,6,2)
(1,3,5) => 1이상 6미만 2스텝증가!
ex:
numbers = [1,2,3,4] for i in range(5): print(i) # 1,2,3,4 print(list(numbers)) #[1,2,3,4] print(list(range(6,1,-1))) #6,5,4,3,2 print(list(range(6,1,1))) #[] 불가능하다.
- 기본형:
- 유일한 값들의 모음(collection)이다.
- 순서가 없고(비시퀀스형) 중복된 값이 없다.
- **변경 가능(mutable)**하고, **반복 가능(iterable)**하다.
ex:
{1,2,3,4,5,5} # {1,2,3,4,5} 중복된 5는 제거된다.
set = {'hi',1,2} # {1,2,'hi'}
- 값을 추가할 때는
.add
활용한다. - 값을 제거할 때는
.remove
활용한다.
locations = ['서울', '부산', '인천', '광주', '대구', '부산', '인천']
print(set(locations)) # {'광주', '인천', '서울', '대구', '제주', '광주'}
print(len(set(locations))) # 6
-
키-값(key-value) 쌍으로 이뤄진 모음(collection)이다.
- 키(key): 불변 자료형만 가능하다(리스트, 딕셔너리는 불가능하다. 튜플은 가능하다! 근데 보통 쓰는 경우는 드물다)
- 값(value): 어떠한 형태든 상관 없음
-
**변경 가능(mutable)**하고 **반복 가능(iterable)**하다.
-
키-값 변경이 가능하다.
- 딕셔너리에 키와 값의 쌍을 추가할 수 있다.
- 이미 해당하는 키에 값을 추가할 시 기존 값이 변경된다.
- 값을
.pop
을 하여 삭제가 가능하다.
students = {'홍길동' : 100, '김철수' : 80} students['김영희'] = 90 # {'김영희' : 90} 추가 students['홍길동'] = 10 # {'홍길동' : 100}을 {'홍길동' : 10}으로 변경 students.pop('홍길동') #{'홍길동' : 100}을 삭제