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

[3팀/김규리] 2차시 파이썬 스터디 - 자료형

kyuree 2023. 3. 14. 17:33
2차시_자료형_과제.docx
2.41MB
2차시_자료형_강의안.pdf
1.79MB

 
*모든 출처는 도서 "데이터 과학을 위한 파이썬 프로그래밍"입니다

# 1. 변수의 이해

변수와 값


  • 변수?
    • “name = ‘Kim Kyuree’”
      • name이라는 공간에 Kim Kyuree라는 글자를 넣어라!
      • name이라는 변수에 Kim Kyuree라는 을 넣어라
name = 'Kim Kyuree'
print(name) #Kim Kyuree

name = 'Kim Kyuree'
print(name) #Kim Kyuree
  • 변수에 값 할당하기
    • ‘=’ 기호 활용
      • 값을 변수에 넣어라
    • 기본 문법
      • [변수명 = 값]
      •  
    • 변수 a에 3, 변수 b에 5를 할당하는 것은 동일
    • 따옴표(’ ‘) 사용 여부의 차이
    • 예제 ) print(a+b) vs. print( ’a + b’)
    •  
a = 3
b = 5
print(a + b) #8

a = 3
b = 5
print('a + b') #a + b
  • 변수 a에 3, 변수 b에 5를 할당하는 것은 동일
  • 따옴표(’ ‘) 사용 여부의 차이

→ 따옴표 안의 값을 하나의 값으로 간주
💭 파이썬에서는 변수와 값을 통해 모든 프로그래밍 시작!
 

변수명 선언


  • 규칙
    • 알파벳, 숫자, 밑줄(_)로 구성가능 (* 숫자로 시작할 수 없다)
      • Ex. name, age, num1, total_score , 1num, 5_stars
    • 변수명은 의미 있는 단어로 선정
      • Ex. student_name, score, id ..
    • 변수명 대소문자 구분
      • Ex, option과 Option은 **다른 **변수
    • 특별한 의미가 있는 예약어는 사용불가
      • Ex. for, if, else, print, input, as, type..
      • 함수명, 명령 키워드
  • 유의할 점
    • 의미있는 이름으로 선언 for 타인과 의사소통
      • ex. a , b ,c … → 변수의 값 의미 알아채기 어렵..
    • 변수 관련 에러
      • NameError: name ‘xx’ is not defined
      • 변수명에 오타 있거나, 선언하지 않았거나 등..

#2. 자료형과 기본 연산

기본 자료형


  • 정수형(inter type): 자연수 포함, 값의 영역이 정수로 한정된 값
    • -1, 0, 1, 49 ..
    • ex. data = 1
  • 실수형(floating type): 소수점이 포함된 값
    • 10.2, 6.0, -0.3 ..
    • 9 vs 9.0
  • 문자형(string type): 문자로 출력되는 값, ‘ ‘ & “ “ 안에 포함되는 값
    • ‘apple’, ‘abc’ ..
    • print(”a+b”) vs. print(a+b)
  • 불린형(boolean type): 논리형, 참 혹은 거짓, True False
    • True, False

간단한 연산


  • 연산자& 피연산자
    • 연산자 : + - * %
    • 피연산자 : 연산자에 의해 계산되는 숫자
      • ex. 3+2 → 3,2 피연산자, + 연산자
    • 수학에서의 연산자 역할, 연산순서 동일
  • 사칙연산
    • +, - ⇒ 덧셈, 뺄셈
      • , / ⇒ 곱셈, 나눗셈
      • 25 + 37 # 62 50 - 19 # 31 50 * 3 # 150 30 / 5 # 6.0
  • 제곱승
    • 연산자: **
      • 3의 5승 ⇒ 3**5
      • 3 * 3 * 3 * 3 * 3
  • 나눗셈의 몫과 나머지
    • 몫 반환 연산자: //
      • ex. 7//4 → 1
    • 나머지 반환 연산자: %
      • ex. 7%4 → 3
    • 괄호 사용 : (), 괄호 안 우선 계산
      • ex. 2*(3+4) → 14
  • 증가 연산 & 감소 연산
    • 증가 연산 : [변수 += 더할 값]
      • ex. a = a + 1 < = > a += 1
    • 감소 연산: [변수 -= 뺄 값]
  • a = 1 a = a + 1 print(a) #2 a += 1 #a에 1 더하기 print(a) #3 a = a - 1 #2 a -= 1 #a에서 1 빼기 print(a) #1
  • +) 연산자 이용 연결
    • 숫자 + 숫자 → 더하기
    • 문자 + 문자 → 두 문자 이어 연결
    • 문자 * 숫자 → 문자를 숫자만큼 반복
      • 이 경우, * 제외 모두 오류 발생

#3. 자료형 변환

정수형과 실수형 간의 변환


  • 프로그래밍, 4가지 자료형 자유롭게 변환하여 다루는 경우 많음
    • 인터넷 로그인
  • float()함수 ; 정수 → 실수⇒ 자료형 변환 시, 전혀 다른 수가 됨 !⇒ 정수형 나눗셈 결과도 실수형( * 파이썬 인터프리터의 특징, 스스로 실수형으로 변환)
  • #실수형 a = 10 b = 3 print(a / b) #3.33333..
  • #정수형 a = 10 print(a) #10 #실수형 a = float(10) print(a) #10.0
  • int()함수 ; 실수 → 정수⇒ 정수형 변환으로 소수점 이하 내림 발생( * 기존의 수학과 차이점)
  • #실수형을 정수형으로 변환 a = int(10.7) b = int(10.3) #출력값 확인 print(a + b) #20 print(a) #10 print(b) #10

숫자형과 문자형 간의 변환


  • 쌍방향 변환 가능
    • 문자형 → 정수 & 실수형 변환 가능, 역도 가능!
    a = '76.3'
    b = float(a)
    
    #문자형
    print(a)  #76.3
    
    #실수형
    print(b)  #76.3
    
    print(a+b)  #error 발생
    
    : a 문자형으로 선언 → float()함수 통해 b 실수형 값 할당 → 동일한 값 출력
  • but a+b ? ⇒ 숫자형과 문자형은 기본 연산 불가 , 자료형 통일 필요
  • Traceback (most recent call last):TypeError: can only concatenate str (nor "float") to str
  • File "<stdin>", line 1, in <module>
  • str()함수 ; 문자형 아닌 자료형 → 문자형⇒ 문자형 간 덧셈 : 문자열 간 단순 연결(단순 붙이기)
  • #실수형 a = float(a) b = a print(a+b) #152.6 #문자형 a = str(a) b = str(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'>

#4. 리스트의 이해

리스트가 필요한 이유


  • 배열 (array)
    • 가장 많이 사용하는 자료형
      • ex. 학생 100 명의 성적 채점할 때 → 변수 100 개 활용 / 한 개 변수에 모든 학생 성적 담기 !
  • 한 변수에 모든 값 저장 방식 , 배열 in programming / 리스트 in python

개념


  • 한 변수에 여러 값 저장하는 자료형
  • 시퀀스 자료형(sequence type)
    • 여러 데이터 한 변수에 저장하는 기법
    • 여러 자료 순서대로 저장
  • 정수, 실수, 변수 등 다양한 자료형 저장 가능
  • #문자형,정수형,실수형 a = [’color’,1,0.2] #중첩 리스트 color = ['red','blue'] a[0] = color print(a) #[['red','blue'],1,0.2]
  • 리스트 생성
    • 리스트 명 = [값, 값, 값, .. ]
    • 빈 리스트 생성
    #리스트에 값 할당
    colors = ['red','blue','green']
    
    #리스트에 값 할당 - 개별 데이터
    colors = 'red'
    colors = 'blue'
    colors = 'green'
    
    #빈 리스트
    abc =[]
    
    → 실제 담긴 값: 문자형의 red, blue, green
  • → 대괄호([]) 사용, 콤마(,)로 요소 구분

인덱싱 & 슬라이싱


리스트 다루기 위해 반드시 이해할 것

  • 인덱싱(indexing)
    • 저장된 값에 접근하기 위해 상대적인 주소 사용
    • 주소 ⇒ 첫 번째 값이 0일 경우, 이와 얼마나 떨어져 있는지
      • 주소 or 인덳스 값
    colors = ['red','blue','green']
    print(colors[0]) #red
    print(colors[1]) #blue
    print(colors[2]) #green
    
    #colors의 길이
    print(len(colors)) #3
    
    • colors 인덱스

→ 0번째부터 0, 1, 2 주소값으로 호출 가능
→ len() 함수 : length, 리스트 길이 반환, 값의 개수 반환
+ 왜 인덱스는 0부터 시작할까?
: 대부분 프로그래밍 언어 주소값 0부터 시작, 이진수
 

  • 슬라이싱(slicing)
    • 인덱스 사용 → 리스트 값 중 일부 추출
    cities = ['서울’,’부산’,’인천’,’대구’,’대전’,’광주’,’울산’,’수원’]
    


  • 슬라이싱 기본 문법
    • 리스트명[시작 인덱스 : 마지막 인덱스]
    cities[0:3] #['서울','부산','인천']
    
    → 우리의 예상 - 서울 ~ 대구 / 실제 출력값 - 서울 ~ 인천</aside>→ 실제 출력: [시작 인덱스 : 마지막 인덱스 - 1]
    • 예제
    #서울부터 대전
    cities[0:5] #['서울','부산','인천','대구','대전']
    
    #인천부터 광주
    cities[2:6] 
    
    #광주부터 수원
    cities[5:] #['광주','울산','수원']
    
  • → 입력: [시작 인덱스 : 마지막 인덱스]
  • 💭  마지막 인덱스 - 1까지 출력 in python
  • 리버스 인덱스
    • 마지막 값부터 인덱스 시작
    • 가장 마지막 값부터 -1 부여 → 첫째 값까지 역순 부여
  •  
#리스트 전체 값
cities[-8:] #['서울', ~,'수원']

→ -8부터 인덱스 끝까지 출력

  • 활용
    • 처음부터 → [: n] (*출력되는 마지막 값 :(n-1)번째)
    • 끝까지 → [n :]
  • 인덱스 범위 초과 슬라이싱
    • 인덱스 시작 값, 마지막 값 비어 있어도 작동
    #cities 모든 값 반환
    cities[0:9] 
    cities[0:]
    cities[:]
    
    #인덳스 값 초과
    cities[-50:50] #cities 전체 값 출력됨
    
    → 인덱스 범위 초과 or 입력하지 않으면 자동으로 지정됨
  • 증가값(step)
    • 리스트명[시작 인덱스: 마지막 인덱스: 증가값]
    #전체 값 출력 - 2칸 단위
    cities[::2] #[‘서울’,’인천’,’대전’,’울산’]
    
    #전체 값 출력 - 1칸 단위 & 역순 
    cities[::-1] #['수원','울산',~'서울']
    

연산


  • 덧셈→ 덧셈 연산 : 각 리스트 하나의 리스트로 합쳐져 출력
  • → 기존 color1, color2 영향 받지 않음 (*len()으로 확인)
  • color1 = ['red','blue','green'] color2 = ['orange','black','pink'] #두 리스트 합치기 - 1 print(color1 + color2) #['red','blue','green','orange','black','pink'] #두 리스트 합치기 - 2 total_color = color1 + color2 print(total_color) #위와 동일 #기존 리스트 변화 확인 len(color1) #3
  • 곱셈
    • 리스트 x n → 리스트 n회 반복
    #2회 반복
    color1 * 2 #['red','blue','green','red','blue','green']
    
  • in 연산
    • 특정 값 포함여부 확인 연산
    color2 = ['orange','black','pink']
    
    #문자열 'blue' 포함여부 확인
    'blue' in color2  #False
    

추가 & 삭제 & 값 변경


  • 한 눈에 보기
  • 추가 - append() 함수
    • 리스트 맨 마지막 새로운 값 추가
    color = ['red','blue','green']
    
    #'white' 추가
    color.append('white')
    
    #확인
    color #['red','blue','green','white']
    
    • 직접 입력받아 추가
    #살 물건 입력받기
    to_get = []
    item = input("살 물건을 입력해주세요 ->")
    to_get.append(item)
    print(to_get)
    
     
  •  
  • 추가 - extend() 함수
    • 덧셈 연산
    • 값 추가 X → 기존 리스트에 새로운 리스트 추가
    color = ['red','blue','green']
    color.extend(['black','purple'])
    color  #['red','blue','green','black','purple']
    
  • 추가 - insert() 함수
    • append와 차이점
      • 특정 위치(지정 위치)에 값 추가
    color = ['red','blue','green']
    color.insert(0, 'orange')
    color #['orange','red','blue','green']
    
    → 기존 값 인덱스 하나씩 밀림
  • 제거 - remove() 함수
    • 특정 값 삭제
    • 기본문법
      • remove(’값’)
    color = ['red','blue','green']
    color.remove('red')
    
    color  #['blue','green']
    
    → 다음 값들 한 칸씩 앞으로 이동
  • 제거 - del 함수
    • 기본 문법
      • del 리스트명[인덱스]
    color = ['red','blue','green']
    del color[0]
    color #['blue','green']
    
    • 일반적으로 변수 자체 삭제 명령
    • but 리스트 내 인덱스 지정 → remove()함수와 동일한 기능
  • 값 변경
    • 리스트명[인덱스 값] = 데이터
    color = ['red','blue','green']
    color[0] = 'orange'
    color  #['orange','blue','green']
    
    → 특정 인덱스의 값 변경할 때 인덱스에 새로운 값 할당
    • 심화
      • 증가 연산
      #국어 점수 3개월 간 변화 추이
      kor_score = [50, 89, 90]
      print('수정 전:',kor_score) 
      kor_score[0] += 29
      print('수정 후:', kor_score)
      
       
    •  
    •  
  • 감소연산
#국어 점수 3개월 간 변화 
kor_score = [50, 89, 90]
print('수정 전:',kor_score) 
kor_score[2] -= 10
print('수정 후:', kor_score)

다양한 명령어


  • 정렬
    • 기본 문법
      • 리스트명.sort()
    • 오름차순 정렬 - 한글 : 가나다순, 영어 : 알파벳순
    fruit = ['사과','바나나','딸기','귤','청포도']
    fruit.sort()
    print('정렬 후:',fruit)
    
  • 내림차순 정렬 - reverse=True
fruit = ['사과','바나나','딸기','귤','청포도']
fruit.sort(reverse=True)
print('정렬 후:',fruit)
  • 최댓값 , 최솟값, 합
    • max() ; 최댓값 / min() ; 최솟값
    #국어 점수 3개월 간 변화 추이
    kor_score = [50, 89, 90]
    
    #최댓값
    print(max(kor_score)) #90
    
    #최솟값
    print(min(kor_score)) #50
    
    • sum() ; 합
    print(sum(kor_score))  #229
    
  • 인덱스 찾기
    • 기본 문법
      • 리스트명.index(찾으려는 데이터)
      • 해당 값의 인덱스 값 반환

패킹 & 언패킹


  • 리스트 사용법
  • 시퀀스 자료형에서 사용됨
t = [1,2,3] #패킹
a, b, c = t #언패킹
print(t,a,b,c)  #[1,2,3]123
  • 패킹 : 한 변수에 여러 데이터 할당(= 리스트)
  • 언패킹 : 한 변수 여러 데이터 있을 때, 각 변수로 반환
    • 리스트 값 개수 = 할당할 변수 개수 (서로 다르면 에러 발생!)

2차원 리스트


  • for 리스트 효율적 활용, 여러 개 리스트 → 한 변수에 할당
  • 행렬과 같은 개념
  • 예제) 학생별 국어, 수학, 영어 점수 표
  • 코드
  • #2차원 리스트 생성 kor_score = [49, 80, 20, 100, 80] math_score = [43, 60, 85, 30, 90] eng_score = [49, 82, 48, 50, 100] midterm_score = [kor_score, math_score, eng_score]
  • 실행화면
  •  
  • 2차원 리스트 접근
    • 대괄호 2 개 사용하여 인덱싱
    #1행 3열 값 출력
    print(midterm_score[0][2]) #20
    
    → 첫째 [n] : n 행 / 둘째 [m] : m 열
    • 입력 : n행, m열
    • 실제 출력: n+1 행, m+1 열
      • 인덱스의 상대적 주소 활용하는 특징때문!
      • 앞서 1차원 리스트 인덱싱 주소값과 동일한 특징