스터디/파이썬 스터디 강의자료

[4팀/이제은] 2차시 파이썬 스터디 - 자료형

알 수 없는 사용자 2023. 3. 17. 12:39

 

2차시_자료형_강의안.pdf
0.66MB
2차시_자료형_과제.pdf
0.21MB

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”

 

  1. jelly의 이름은 Haribo이다.
  2. jelly는 Haribo이다.
  3. jelly와 Haribo는 같다.
  4. 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 방식입니다.

 

PEP 8 – Style Guide for Python Code | peps.python.org

PEP 8 – Style Guide for Python Code Author: Guido van Rossum , Barry Warsaw , Nick Coghlan Status: Active Type: Process Created: 05-Jul-2001 Post-History: 05-Jul-2001, 01-Aug-2013 Table of Contents This document gives coding conventions for the Python co

peps.python.org

 

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]는 열을 뜻한다.