01 변수의 이해
변수를 이해하기에 앞서
자료형 - 모든 데이터에는 자료형이 있다!
이름 | 나이 | 키 |
디솝이 | 20 | 160.4 |
슈니 | 21 | 178.4 |
string | int | float |
디솝이, 슈니 👉 문자열
20, 21 👉 정수
160.4, 178.4 👉 실수
💡조금 더 알아보도록 합시다!
# 데이터 타입 확인 name = '디솝이'
age = 20
height = 160.4
print(type(name))
print(type(age))
print(type(height))
<class 'str'> <class 'int'> <class 'float'>
변수란?
# 변수와 값
name = '디솝이'
age = 20
height = 160.4
print(type(name))
print(type(age))
print(type(height))
값을 저장하는 name, age, height - 변수
각 변수에 들어가는 '디솝이', 20, 160.4 - 값
변수의 의미와 역할
변수 = 값이 들어갈 수 있는 상자
name = 이름이 들어갈 수 있는 상자 (디솝이 이외의 슈니, 랑이, 우치 등 다른 값도 모두 들어갈 수 있음!
jelly = "Haribo"
print(jelly)
jelly = “Haribo”
- jelly의 이름은 Haribo이다.
- jelly는 Haribo이다.
- jelly와 Haribo는 같다.
- jelly에 Haribo를 넣어라.
∴ jelly = 변수, Haribo = 값
변수 사용 규정
- 변수명 선언
👉 일반적으로 알파벳, 숫자, 밑줄(_)로 선언 (한글 사용 X)
👉 다른 사람이 읽어도 이해할 수 있는 이름으로 선언
좋아요!🙆♂️ : name, professor, age (값을 알아보기 쉽도록)
지양해요🙅 : a, b, c (변수를 지정하는 의미가 없어집니다…)
👉 변수명은 대소문자 구분됨 (Name ≠ name)
- 변수 규칙
1) 영문자(대, 소문자 구분), 숫자, 언더바( _ , underscore), 한글 사용 가능하다.
2) 첫 자리에는 숫자를 사용할 수 없다. (3age, 5_age, ...)
3) 변수명의 대, 소문자는 구분된다.
4) 파이썬에서 자체적으로 사용하고있는 단어(예약어)는 사용할 수 없다.
naming convention = 개발자들의 약속🤙
파이썬에서는 이러한 약속들 중 가장 보편적인 것이 PEP-8 방식이고, 그 중 이름과 관련된 컨벤션(Convention)을 알아봅시다!
Convention
1) 한 단어로 된 변수는 소문자로 적는다
- age, good, name, ...
2) 두 단어 이상의 변수는 언더바로 구분한다.
- my_name, my_friend_name, ...
3) 예약어와 충돌할 경우에는 뒤에 언더바를 붙인다.
- if_, time_, ...
4) 상수*의 경우 대문자와 언더바를 혼용하여 쓴다 (Constant Variable)는 프로그램에서 값이 바뀌지 않는 변수)*
- TOTAL, MAX_NUM, AVG, ...
🔗PEP 8 -- https://www.python.org/dev/peps/pep-0008/
*이번엔 개발자들이 기본적으로 지키는 관례같은 규칙들을 알아봅시다!
실제 코드를 작성하게 될 경우 다른 사람의 코드를 참고하거나 다른 사람들과 함께 작성하게 되는데, 이때 서로 특별한 설명 없이도 이 변수, 함수들이 어떤 역할을 하는지 알아보기 위해서 개발자들은 약속을 했습니다.
파이썬에서는 이러한 약속들 중 가장 보편적인 것이 PEP-8 방식입니다.
02 자료형과 기본 연산
💡 컴퓨터의 사칙연산을 이해하기 위해 메모리 공간, 자료형, 연산자와 피연산자에 대해 알아봅시다!
메모리 공간
- 메모리
변수 = 어떠한 값을 저장하는 장소
🤔 그렇다면 이 변수를 저장하는 물리적 공간이 어딘가에 있어야… = 메모리
🤗 정리하자면!
- 메모리 : 변수에 값이 저장되는 공간
- 메모리 주소 : 변수의 저장 위치
- 메모리 공간
🤔 그렇다면 하나의 변수는 어느 정도의 메모리 공간을 사용할까요?
🤗 하나의 변수를 메모리에 저장할 때 그 변수의 크기만큼 공간을 할당! (2MB, 1KB…)
그러나!
컴퓨터는 0과 1 두 가지 정보만을 저장할 수 있음 👉 이진수 사용!
- 이진수 한 자리 = 비트(bit)
- 8개의 비트 = 1바이트(byte)
- 1024바이트 = 1킬로바이트(kilobyte, KB)
- 1024킬로바이트 = 1메가바이트(megabyte, MB)
자료형
🤔 할당받는 메모리 공간의 크키, 즉 변수의 크기는 어떻게 결정될까요?
👉 변수의 자료형!
정수형 (integer type)
- C언어에서 int에 해당하는 자료형. 개수, 번호 등 정수형 자료를 나타낼 때 사용한다.
- 자연수를 포함해 값의 영역이 정수로 한정된 값 (0, 55, -2)
a = 154
print(type(a))
b = 0
print(type(b))
c = -25
print(type(c))
<class 'int'>
<class 'int'>
<class 'int'>
실수형 (floating-point type)
- C언어에서 float, 혹은 double에 해당하는 자료형
- 소수점이 포함된 값 (1.0, 33.4, -0.22)
- 값이 정수형이라도 5.0으로 입력하면 실수형으로 해석
b = 181.34
print(type(b))
<class 'float'>
문자형 (string type)
- 문자로 출력되는 자료형
- 따옴표에 들어간 정보
a = "ABC"
b = "10101"
print(type(a), a)
print(type(b), b)
<class 'str'> ABC
<class 'str'> 10101
불린형/논리형 (boolean type)
- 참 또는 거짓을 표현할 때 사용
- True(참)이면 1, False(거짓)이면 0
a = 1
b = 2
print(a > b)
False
연산자
- 연산자와 피연산자
✅피연산자 : 연산자에 의해 계산되는 숫자
✅연산자 : +, -, *, / 기호
(ex. ‘3 + 2’에서 +는 연산자, 3과 2는 피연산자)
- 간단한 연산
- 산술연산자 (+, -, *, /, **, %, //)
<사칙연산>
>>> a = 10
>>> b = 2.5
>>> a + b
12.5
>>> a - b
7.5
>>> a / b
4.0
>>> a * b
25.0
<제곱승>
>>> print(3*3*3*3*3) #3을 다섯 번 곱함
243
>>> print(3**5) #3의 5제곱
243
<나눗셈의 몫과 나머지>
>>> print(7 // 2) #7 나누기 2의 몫
3
>>> print(7 % 2) #7 나누기 2의 나머지
1
- 비교연산자 (==, !=, <>, ≤≥)
>>> a=10
>>> b=10
>>> c=20
>>> a==b # 10과 10이 같다.
True
>>> a!=c # 10과 20이 다르다.
True
>>> a>c # 10이 20보다 크다.
False
>>> a<c # 10이 20보다 작다.
True
- *\할당연산자 (+=, -=, =, /=)
>>> a = 1 # 변수 a에 1을 할당
>>> a = a + 1 # a에 1를 더한 후 그 값을 다시 a 에 할당
>>> print(a) # a 출력
2
>>> a += 1 # a 증가 연산
>>> print(a) # a 출력
3
>>> a = a -1 # a에서 1을 뺀 후 그 값을 다시 a에 할당
>>> a -= 1 # a 감소 연산
>>> print(a) # a 출력
1
>>> a = 5
>>> b = 3.14
>>> a += b # a 증가 연산 (a = a + b)
>>> print(a) # a 출력
8.14
- c나 자바에서 a++ 또는 a--의 의미
- += : 증가 연산 (a에 들어가 있는 값을 1만큼 증가)
- -= : 감소연산 (a에 들어가 있는 값을 1만큼 감소)
03 자료형 변환
- 정수형과 실수형 간 변환 👉 float( ) 함수나 int( ) 함수를 사용
-
>>> a = 10 >>> print(a) 10 >>> a = float(10) >>> print(a) 10.0
>>> a = 10 >>> b = 3 >>> print(a / b) 3.3333333333333335
>>> a = int(10.7) >>> b = int(10.3) >>> print(a + b) 20 >>> print(a) 10 >>> print(b) 10
- 숫자형과 문자형 간 변환 👉 정수형이나 실수형 값을 문자형으로 선언하기 위해서는 반드시 따옴표를 붙여 선언!
-
>>> a = '76.3' # a에 문자형 76.3을 할당 - 문자열을 의미 >>> b = float(a) # a를 실수형으로 변환 후 b에 할당 >>> print(a) 76.3 >> print(b) 76.3 >>> print(a + b) # a와 b를 더함 - 문자열과 숫자열의 덧셈이 불가능하여 에러 발생 Traceback (most recent call last): File "<stdin>", line 1, in <modulo TypeError: can only concatenate str (nor "float") to str
>>> a = '76.3' >>> b = float(a) >>> a = str(a) >>> b = str(b) # 실수형 b값을 문자형으로 변환 후 b에 할당 >>> print(a + b) # 두 값을 더한 후 출력 76.376.3 # 문자형 간 덧셈은 문자열 간 단순 연결
- 자료형 확인하기 👉 자료형이 헷갈릴 때 type( ) 함수 사용!
>>> a = int(10.3)
>>> b = float(10.3)
>>> c = str(10.3)
>>>
>>> type(a)
<class 'int'>
>>> type(b)
<class 'float'>
>>> type(c)
<class 'str'>
10
10.3
10.3
04 리스트의 이해
리스트를 이해하기 앞서…
리스트 자료형 : 프로그래밍 언어에서 가장 많이 사용하는 자료형으로 배열array이라고도 한다.
👉 한 개의 변수에 다양한 값을 저장할 수 있다!
리스트란?
- 리스트의 개념
- 다양한 자료형 저장 가능
- C 혹은 자바에서 배열이라는 개념과 유사리스트(list) : 하나의 변수에 여러 값을 저장하는 자료형(시퀀스 자료형)
- 시퀀스 자료형 : 여러 데이터를 하나의 변수에 저장하는 기법. 여러 자료를 순서대로 넣는다는 뜻.
- 형태
-
리스트 이름 = [요소값1, 요소값2, 요소값3, ···] 리스트 이름 = [] # 빈 리스트 food = ['짜장면', '짬뽕', '마라탕', ···]
- 특징 : 자료형을 통일해주지 않아도 된다.
-
위와 같이 여러 종류의 자료형을 섞어서 넣어도 모두 저장이 된다.>>> mylist = [1, 2, '카리나', True, ['a', 'b', 'c']] >>> mylist [1, 2, '카리나', True, ['a', 'b', 'c']]
인덱싱과 슬라이싱
💡 리스트는 인덱싱을 활용해서 n번째의 값에 접근할 수 있고, 슬라이싱을 활용해서 필요한 만큼 잘라서 쓸 수 있다.
- 인덱싱 & 리버스 인덱싱
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
a라는 리스트에 값이 1부터 10까지 순서대로 들어가 있는데, 여기서 5번째, 혹은 8번째의 값에 접근하고자 할 때 다음과 같이 사용하면 된다.
>>> a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> a[4]
5
>>> a[7]
8
>>> a[-1]
10
>>> a[-5]
6
💡인덱스는 0에서부터 시작한다.
예시에서, a[4]라고 적혀있는데 5번째 값인 5를 읽어왔다.
👉이는, 인덱스가 0에서부터 시작하기 때문이다! 따라서 위의 예시에서 1을 출력하고 싶다면 a[0]을 출력하면 된다.
그러나, 음수로 인덱싱한다면 뒤에서부터 읽어들어온다.
👉이 때는 0부터 시작하지 않고 -1부터 시작한다! (리버스 인덱싱)
- 슬라이싱
슬라이싱을 사용하면 리스트에서 일부분만 필요하다면 잘라서 쓸 수 있다.
>>> a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> a[0:3]
[1, 2, 3]
>>> a[1:3]
[2, 3]
>>> a[:3]
[1, 2, 3]
>>> a[7:]
[8, 9, 10]
>>> a[:]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> a[-4:-2]
[7, 8]
a[ x : y ] 라고 쓰면 a[ x ]부터 a[ y ]전까지의 값이 출력된다는 것을 알 수 있다.
즉, 슬라이싱에서는 첫번째 인덱스 ~ 마지막 인덱스 숫자의 -1번째까지 출력해준다.
ex) a[ 2 : 7 ] = a[2] ~ a[7-1] = a[2] ~ a[6]까지 출력 = [3, 4, 5, 6, 7] 출력
a[ 7: ]은 7번부터 끝까지 출력해준다!
a[ : ]은 처음부터 끝까지 출력해준다!
- 증가값(step)
형태 - 변수명[ 시작 인덱스 : 마지막 인덱스 : 증가값 ]
>>> cities = ['서울', '부산', '인천', '대구', '대전', '광주', '울산', '수원']
>>> cities[::2] # 2칸 단위로
['서울', '인천', '대전', '울산']
>>> cities[::-1] # 역으로슬라이싱
['수원', '울산', '광주', '대전', '대구', '인천', '부산', '서울']
cities[ : : 2 ]를 입력하면 처음부터 시작하여 2칸 간격으로 출력된다.
cities[ : : -1 ]를 입력하면 역방향으로 1칸 간격으로 출력된다.
리스트 사용법
- 리스트의 연산
덧셈 연산
>>> a = [1, 2, 3]
>>> b = [4, 5, 6]
>>> a + b
[1, 2, 3, 4, 5, 6]
곱셈 연산
>>> a = [1, 2, 3]
>>> a * 2
>>> a = [1, 2, 3, 1, 2, 3]
in 연산
in 연산은 포함 여부를 확인하는 연산으로 하나의 값이 해당 리스트에 들어있는지 확인할 수 있다.
>>> a = [1, 2, 3] # a 변수에서 문자열 '3'과 숫자 3의 존재 여부 반환
>>> '3' in a
False
>>> 3 in a
True
- 리스트 추가, 수정 및 삭제
- append( ) 함수
append( ) 함수를 사용하면 리스트 맨 마지막 인덱스에 새로운 값을 추가할 수 있다.
>>> a = [1, 2, 3]
>>> a.append(4)
>>> a
[1, 2, 3, 4]
- extend( ) 함수
extend( ) 함수는 리스트의 덧셈 연산과 같다. 즉, 값을 추가하는 것이 아닌 기존 리스트에 그대로 새로운 리스트를 합치는 기능을 한다.a.extend([4, 5])는 a += [4, 5]와 동일하다.
>>> a = [1,2,3]
>>> a.extend([4,5])
>>> a
[1, 2, 3, 4, 5]
>>> b = [6, 7]
>>> a.extend(b)
>>> a
[1, 2, 3, 4, 5, 6, 7]
- insert( ) 함수
insert( ) 함수는 append( ) 함수와 달리 리스트의 특정 위치에 값을 추가한다. insert(a, b)는 리스트의 a번째 위치에 b를 삽입하는 함수이다. 파이썬은 숫자를 0부터 센다는 것을 반드시 기억하자.
>>> a = [1, 2, 3]
>>> a.insert(0, 4)
>>> a
[4, 1, 2, 3]
- remove( ) 함수
remove(x) 함수는 리스트에서 첫 번째로 나오는 x를 삭제하는 함수이다. 삭제할 값을 remove( ) 함수 안에 넣으면 리스트에 있는 해당 값이 삭제된다.
>>> a = [1, 2, 3, 1, 2, 3]
>>> a.remove(3)
>>> a
[1, 2, 1, 2, 3]
- 인덱스 수정(재할당)
>>> a = [1, 2, 3]
>>> a[2] = 4
>>> a
[1, 2, 4]
a[2]의 요솟값 3이 4로 바뀌었다.
- del 함수
>>> a = [1, 2, 3, 4, 5]
>>> del a[2:]
>>> a
[1, 2]
a[2:]에 해당하는 리스트의 요소들이 삭제되었다.
패킹과 언패킹
- 패킹(packing) : 한 변수에 여러 개의 데이터를 할당하는 그 자체, 리스트 자체
- 언패킹(unpacking) : 한 변수에 여러 개의 데이터가 들어있을 때 그것을 각각의 변수로 반환하는 방법
-
언패킹 시 할당받는 변수의 개수가 적거나 많으면 모두 에러가 발생>>> t = [1, 2, 3] # 1, 2, 3을 변수 t에 패킹 >>> a, b, c = t # t에 있는 값 1, 2, 3을 변수 a, b, c에 언패킹 >>> print(t, a, b, c) [1, 2, 3] 1 2 3
이차원 리스트 👉 행렬과 같은 개념
학생 | A | B | C |
국어 점수 | 49 [0][0] | 79 [0][1] | 20 [0][2] |
수학 점수 | 43 [1][0] | 56 [1][1] | 85 [1][2] |
이차원 리스트는 표에 값을 채웠을 때 생기는 값들의 집합!
국어점수, 수학점수 : 하나의 리스트
여러 개의 리스트 값들이 모두 하나의 리스트 변수에 할당되면 그것이 이차원 리스트
>>> kor_score = [49, 79, 20]
>>> math_score = [43, 59, 85]
>>> midterm_score = [kor_score, math_score]
>>> midterm_score
[[49, 79, 20], [43, 59, 85]]
>>> print(midterm_score[0][2])
20
print(midterm_score[0][2]) 에서 [0]은 행, [2]는 열을 뜻한다.
'스터디 > 파이썬 스터디 강의자료' 카테고리의 다른 글
[3차시/김규리] 3차시 파이썬 스터디 - 조건문 (0) | 2023.03.22 |
---|---|
[4팀/김민혜] 3차시 파이썬 스터디 - 조건문 (0) | 2023.03.21 |
[1팀/허서원] 2차시 파이썬 스터디 - 자료형 (0) | 2023.03.16 |
[2팀/김세연] 2차시 파이썬 스터디 - 자료형 (0) | 2023.03.16 |
[1팀/한규림] 2차시 파이썬 스터디 - 자료형 (0) | 2023.03.16 |