[네이버 부스트코스] 인공지능 기초다지기

seon·2024년 7월 16일

AI Tech 7기

목록 보기
2/8

1. Basic computer class for newbies

1) 컴퓨터 OS

운영체제 프로그램 동작 구동 환경
하드웨어(CPU,입출력장치, 메인보드-삼성전자/하이닉스에서 굉장히 잘하는)

  • 소프트웨어(기반이 되는, 하드웨어와 연결이되는 시스템이 있어야 소프트웨어를 사용할 수 있음) = 운영체제라고 함
    운영체제는 흔히 윈도우, mac os
    -> 연결해서 오피스, 크롬을 깔아서 사용하게 됨

application은 운영체제에 의존적일 수밖에 없다.
mac os에서만 쓰는 프로그램은 윈도우에서 실행이 안됨
파이썬/파이토치도 거의 동일하게 윈도우에서 쓸 수 있는게 있고
mac os에서 쓸 수 있는게 나눠져 있다
운영체제마다 다르게 실행된다
파이썬은 운영체제에 독립된 프로그램이다.
interpretor도 의존적으로 작동

운영체제에 맞춰 프로그램을 깔아야 한다.

개발을 할 때는 어떤 개발환경에서 개발을 실행할 것인가를 선택

저희 강의는 윈도우, mac을 왔다갔다하면서

조금씩 다름

mac에서는 윈도우에서는 - 질문

개발환경을 잘 선택하는 방법은?

mac 노트북이 그냥 갖고 싶은데.. 혹시 갖게 되면 개발하는 방법이 지금과 많이 달라질까.. 그냥 지금처럼 윈도우를 계속 써야 하나.. 개발자들은 mac 많이 쓰나.. 개발하기에 무엇이 더 좋은가..

개발환경에 상관없이 사용할 수 있으려면? 어떤 걸 쓰고,
어떻게 개발하면 되는가..

2) 파일 시스템

OS에서 파일을 저장하는 "트리구조" 저장 체계
의미 있는 정보를 담는 논리적인 단위

파일의 기본체계
파일 vs 디렉토리(폴더-윈도우)
파일을 담는 그릇, 디렉토리
파일은 컴퓨터에서 정보를 저장하는 논리적인 단위
파일은 파일명, 확장자로 식별됨 hello.py
확장자로 파일의 종류를 알 수 있음
실행, 읽기, 쓰기

mac은 root
윈도우는 C드라이브
Window key + E로 내컴퓨터를 실행

절대경로와 상대경로

경로-컴퓨터 파일의 고유한 위치, 트리구조상 노드의 연결
절대 경로-루트 디렉토리부터 파일위치까지의 경로
c:\user\docs\somefile.ext
상대 경로-현재 있는 디렉토리부터 타깃 파일까지의 경로
../../greatgrandparent

..(현재 폴더를 기준으로 어디에 파일이 위치해 있는가)

3) 터미널

최근에 방영한 스타트업 드라마 타이핑 껌은 화면
터미널 환경
마우스가 아닌 키보드로 입력을 명령하는
터미널-mouse가 아닌 키보드로 명령을 입력 프로그램 실행
아이콘 클릭해서 프로그램 실행 명령 - GUI 환경
Graphical User Interface 당연한데
키보드로 입력해서 사용자
CLI Command Line Interface

키보드만으로 입력하고 했음 CLI 환경이라고 했음
터미널 환경도 CLI환경임

CLI환경은 GUI와 달리 Text를 사용하여 컴퓨터에 명령을 입력하는 인터페이스 체계
WIndows - CMD 창, windows terminal
mac, linux- terminal

윈도우 cmder도 권장
linux 명령어 사용 + 예쁘다는 장점

화면을 키우기도 편하다는 장점

Console = terminal =cmd 창
어원: 디스플레이와 키보드가 조합된 장치
현재: cLI로 입력하는 화면

은행원 디스플레이 - LAN 큰 컴퓨터에 연결해서 사용함
회사 내에서, local area에서만 사용, 연결해서 사용
terminal이다.. 버스 터미널처럼
console이라는 표현을 씀
CLI 라는 화면 자체를 얘기함
터미널 환경에 익숙해야 함. 이건 변하지 않을 것.

윈도우 - (윈도우 키+terminal) or (윈도우 키 + R ->CMD 입력)
맥-빠른 terminal 입력

mac은 터미널 환경에 익숙할 것..
cmder를 클릭해서 쓴다든가
많이 쓰시게 된다면 mini conda 를 제일 많이 쓸 것 같긴 함
window+R+cmd 터미널창을 쓴다든가
주로 사용할 것

기본 명령어
각 터미널에서는 프로그램을 작동하는 shell이 존재
-> shell마다 다른 명령어를 사용

cd workspace
chand directory workspace로 이동해라
-> 없으며 만든다
mkdir workspace make directory workspace 폴더가 만들어집니다.

dir은 디렉토리라는 뜻입니다
dir ..\test.txt

dir ..\abc.txt

한칸 더 있는 abc라는 파일

test 디렉토리 기준으로 ..은 현재 내가 있는 테스트 디렉토리 기준으로 한칸 앞
workspace 폴더에 test 디렉토리

mkdir one-depth
cd one-depth
one-depth
copy ....\abc.txt .\
현재 디렉토리로 복사
dir lis

A B 절대경로/상대경로를 써서 현재 디렉토리로 옮겨라.

요렇게 해서 현재 test 밑에 one-depth 밑에
abc 파일 복사

터미널 환경에서

cmder환경에서 ls,dir 다 됨

파워쉘 환경에서 작업을 하실 때가 있을 거예요
뭐를 쓰실지는 모르겠어요..

잘 써야되고 다 쓰비다.

모든 거에 익숙하게 기본 명령어 중간중간 쓸거예요. 중요해요. 중요하니까.

2. 파이썬 개요

1) python

  • 귀도 반 로섬 발표
  • 플랫폼 독립적
  • 인터프리터 언어
  • 객체 지향
  • 동적 타이핑 언어
  • 처음 C언어로 구현되었음
  • 1989년 크리스마스에 할 일이 없어 파이썬 개발
  • "Monty Python's Flying Circus"
    파이썬 이름의 유래
  • 구글, DropBox, MS 근무
  • 자비로운 종신 독재자->지금은 사임
  • 파이썬의 개선 사항(PEP)에 대한 최종 의사결정자
  • 생각보다 오픈 소스 커뮤니티 멤버들의 악플이 힘들었다고...
  • MS의 오픈소스 정책을 동의하며 최근 MS로 이직

리더라는게 비판을 많이 받는데, 굉장히 어려웠었나봐요, 자신이 자비로운 종신 독재자에서 물러나겠다.. 상처를 많이 받음.. 재밌는 부분
파이썬 커뮤니티는 민주적인 방식으로 토론.. 10월 오픈소스로
MS 리눅스 죽어야 돼
얼마나 오픈소스가 굉장히
궁금한 분들께서 트위터 이 수업을 듣느 분들 중에서 외국의 개발자 geek 문화

트위터에 의견을 굉장히 많이 씀. 트위터만 할 정도로.
커뮤니티 변화
머신러닝 학자들도 토론을 굉장히 많이 함
python 이름 유래 피톤. 그리스 신화속의 괴물 뱀
몬티 파이썬이라는 코메디 그룹의 이름에서 유래

넷플릭스 다큐멘ㅌ터리가 있음 이 그룹에서 이름을 따오긴 했지만 원래 그리스로마신화 괴물뱀
지금은 보아뱀처럼 생김 python을 상징하는 로고 자체가 뱀 모양이다. 원래 뱀의 이름에서 따왔고 그걸 몬티 파이톤 서커스에서 따옴

2) python의 특징

플랫폼 독립적인 인터프리티드 랭귀저 인터프리터(,->컴파일러) 언어

플랫폼 독립적
플랫폼 = 운영체제
운영체제에 상관없이 돌아가는 작동되는 언어다. 라고 생각하시면 됩니다.

모든 프로그램은 운영체제에 의존적인데,
코드를 보고 운영체제에 돌아가기 위해 해석하는게 인터프리터라고 부른다.
인터프리터, 컴파일러 두 가지가 있는데,
인터프리터 먼저 얘기하면
파이썬도 언어기에 문법이 있다. 파이썬의 문법으로 만들어진 코드를 어떤 특정 운영체제에 돌리기 위해서는 인터프리터라는 프로그램을 사용해서 운영체제에 맞춰 번역해야 합니다.

파이썬 문법 각각 운영체제에 맞는 인터프리터 프로그램을 설치해서 해석하는 과정이 필요한데, 파이썬은 운영체제에 독립적이다.
인터프리터만 깔려있으면 어떤 기기든 돌아간다.

IoT 디바이스에서도 돌아가야 한다. 굉장히 큰 장점

컴파일러 vs 인터프리터
컴파일러 언어(c, 자바): 프로그램을 실행시키기 전에 컴퓨터가 한번 번역해줌 파일ㅇ르. 같은 운영체제라면 모두 실행 가능
인터프리터 언어: 번역 과정 없이 바로 실행 됨

컴파일러-하이레벨언어. 인간도 이해할 수 있는 언어를 바로 컴퓨터가 이해할 수 있는 언어로 빠르게 번역해줌. 컴파일된 파일을 다른 컴퓨터에서 돌리기 때문에 설치 유용
인터프리터는 그때그때마다 실행되기 때문에 조금 느립니다. 간단하게 작성할 수 있다는 장점.

예전에는 컴퓨터가 느려서 컴파일러 언어를 잘 써야 했음
20년간 컴퓨터는 비약적으로 발전, 빠르게 돌아가기 때문에 인터프리터도 가능. 인간이 좀 더 편하게 작성할 수 있는 언어가 잘 쓰이고 있음

참고 프로그램 동작 과정
인터프리터는 번역해봐 -> 한번에 번역
컴파일러는 한번 os에 맞춰 바꾸고 실행되게 됨
보이기에 인터프리터는 한번에 되는 것처럼 보이고
컴파일러는 한번 거쳐서 되는 것처럼 보일 뿐이죠. 좀 더 빠르다.
인터프리터가 좀더 간단하다

3) "객체 지향" "동적 타이핑 언어"

C언어..
옛날 procedure언어 첫번째 프로그램->두번째 프로그램
객체 지향 언어는 실행 순서가 아니라 단위 모듈
프린트, 입력.. 조립해서..
큰 프로그램을 만드는 걸 객체 지향 프로그래밍이라고 함
데이터 속성/
이해를 못하실 거니까. 파이썬은 객체 지향 언어예요
동적 타이핑 언어는 프로그램이 실행하는 시점에 그 데이터의 타입, 변수의 타입을 결정하는 언어입니다. 중요한 건 실행 시점에 뭔가를 결정하는 거다. 동적 = 실행 시점
동적으로 실행하는 시점. Ctrl enter 실행하는 시점에 파일이 어떤 작동을 할 떄 뭔가 결정되는 걸 동적으로 한다고 한다. 동적으로 타입이 정해지는 언어다. 객체 지향 단어와 동적 타이핑 표현 정도만 배우고 넘어가면 좋으 것 같아.

4) Why Python?

쉽고 간단하며 다양하다.
사람의 시간이 기계의 시간보다 중요하다. 이해하기 쉬운 문법을 가지고 있음
컴파일러 언어 vs 인터프리터 언어
컴파일러 언어-작성하는데오래걸리는데 실행하는데 오래 안걸림
인터프리터 언어-작성하는게 쉬운데 실행하는데 오래 걸림
사람보다 기계의 시간이 중요한 시점이 왔음.
-> 문법이 간단한 python 언어가 인기를 끌게 됨

자바는 helloworld를 입력하기 위해 많은 코드를 써야 되는데
파이썬은 print(helloworld)직관적

1~10까지 프린트하는 코드
자바는 굉장히 많은 코드.. 파이썬은 간단.

5) 다양한 라이브러리

무엇을 생각하든 그것을 구현할 수 있다
이미 다른 사람들이 다 구현해놨기 때문에
굉장히 쉽게 우리가 그 라이브러리를 불러서 쓸 수가 있습니다.

데이터, AI가 사실상의 표준 언어
다른 언어들이 아니야 내가.. 얘기하고 있는데
파이썬을 사용하면 굉장히 편리한 라이브러리.. 손쉽게 사용함

이미 널리 쓰이는
어디에든 쓸 수 있는 언어
다른 분야에서도 파이썬을 사용할 수 있음

이세돌vs 알파고 5년(..) 이때도 알파고가 파이썬으로
개발된 프로그램 중 하나구요. 모든게 파이썬x 일부만

노벨상 아인슈타인 중력파 확인.
블랙홀 확인하기 위한 노력. 파이썬 코드

태양 흑점 촬영 블랙홀 시뮬레이션 노력. 블랙홀을 찍기 위해서도
여러 겹 천체 망원경 연결. 파이썬.

유튜브, 레딧, 인스타, 베틀필드, 운명하셨습니다. 게임도 파이썬으로 개발됨

다양한 프로그램을
데이터분석뿐 아니라 굉장히 넓은 분야에서 파이썬이 쓰이고 있음

스택오버플로우
프로그래밍계의 지식인
파이썬 관련 질문 2017년에 이미 많은 질문
앞으로 더 많은 질문이 나올 것으로 예상됨

TIOBE:Programming Community Index
두번째 언어로 자리잡고 있고..

그다음에 캐글이라고 해서 나중에 경험하시겠지만
데이터 분석해서 파이썬 2020년 올해 압도적으로 파이썬이 사용됨 자리를 잡고 있음
데이터 분석에서는 파이썬이 자리잡고 있다. 표준으로

life is short. you need python

정말 간단하다. 여러가지 일을 손쉽게 해줄 수 있다.

disposable code.
자바 한번 쓰고 버리는 코드 파이썬만큼 좋은 코드가 없음
잘된게 없는지 확인->다음 단계

3. 파이썬 코딩환경 (OS 및 코드편집기)

1) 개발 환경 개요


프로그램을 작성하고, 실행 시키는 환경
일반적으로 <코딩 환경>이라고 부름
개발환경을 결정
1) 운영 체제(Operating System, OS)
2) Python Interpreter
3) 코드 편집기 (Editor)

2) 운영체제

  • 선호하는 운영체제를 선정
    windows, linux, macos
  • 친근 윈도우, 초기엔 쉬움 예전에 참고 문서 부족. 지금은 그렇지 않음
    리눅스를 기반으로 만든다는 얘기가 나올 정도
    모듈 설치도 예전만큼x
    터미널 환경이 맥. 리눅스에 비해 불편 powershell 배우는 코스트가 많이 듬
    linux 쓰면 멋있어 보임 리눅스는 os 자체를 사용하기 어려운 측면.
    인공지능 업으로 하겠다 -> 리눅스 배워야 함..
    mac os 모듈 쉬움 참고문서 많음 + 비쌈 + 있어보임.. 저같은 경우는 윈도우 선호
    이상하게 개발을 하면 맥으로 많이 하게 됨
    가지고 있는 컴퓨터에
    개인적으로 그냥 컴퓨터, 노트북이라면 16gb 확보되어 있는 노트북 나쁘지 않음
    최근에 mac m1 프로세스 좋음 그정도 노트북 정도면 좋을 것
    데스크탑이라면 64gb i7 080 라고 생각을 합니다.

3) 파이썬 인터프리터

파이썬 코드를 OS에 번역해주는 프로그램이다. 파이썬 인터프리터는 버전에 따라서 종류가 달라요. 이전에 레거시. 2.7, 3.X

아직도 아마존에서는 2.X 예전만큼은 아니지만 쓰이고 있다.
텐서플로우, 구글에서는 지원x, 2.X는 레거시가 되었음

레거시
= 유산. 좀 오래된 예전에 있었던 지금은 잘 안쓰는

기존 라이브러리를 뭘 쓰냐에 따라 환경을 좀 맞춰줄필요가 있음
레고블럭처럼 안 맞을 때가 있기 때문에 requirement 파일에 저장

3.9 버전이 출시
한 3.8정도를 쓰시면 최근 여러 기능을 쓸 수 있음
가장 많이 쓰는 인터프리터
python 일반적, 기본적인 파이썬 인터프리터
anaconda 다른 과학 계산기를 묶어서 제공. 파이썬 보다는 조금 더 강력해 보이는
저희는 따로 miniconda를 쓸 것
나중에 설치할 때 설명을 드릴 것

4) 코드 편집기

  • 파이썬 코드도 일종의 문서
    -> 한글, 워드 처럼 코드를 입력할 문서 편집기가 필요함
  • text 타입의 문서를 저장하는 모든 편집기 사용가능

리눅스, vim vi editor를 제공함. 유용한
리눅스 링크 거기서 보시면 좋을 것 같음

현재 vscode를 좀 많이 씀
jetframe에서 제공하는 pycharm 파이썬 부적이라는 뜻
학생할인 기능이 강력함.
vscode처럼 ms에서 만든 프로그램, 사용하기 편함. 유용하게 사용할 수 있다.

  • 코드 편집기의 두 가지 타입
    1) 설치된 어플리케이션
    비주얼 스튜디오
    2) 웹 기반 인터랙티브 편집기
    웹 기반 인터랙티브 편집기. 주고 받는. 주피터, 코랩도 사용할 예정
    데이터 분석 도구의 개념이 조금 더 들어감

요거에 대해서는 나중에 한번더 설명드릴 예정

-Type1 - python

-Type2-Data analysis+Deep learning
웹 기반의 인터렉티브 코드 편집기인 주피터와,
colab은 구글에서 주피터를 가지고 조금 변형을 시켜서 자기들만의 클라우드를 기반의 코드 편집기
gpu가 들어가 있기 때문에 여러분 대부분 gpu가 없으실거예요
gpu 쉽게 사용하도록 하기 위해 주피터, colab을 사용

4. 파이썬 코딩환경 (Windows)

*Anaconda + VSCode 설치(Windows)
파이썬 아나콘다 설치

1) 파이썬 미니콘다

비쥬얼 스튜디오 코드 필수 단축키 정리 (Visual Studio Code 꿀템🍯🐝 )
코딩 인생 꿀템 VSC 단축키 5분 정리해드림
Vi (Vim) 시작하기

5. 파이썬 코딩환경 (Jupyter notebook)

파이썬 프로그래밍을 실행하기 위해 파이썬 인터프리터(interpreter) 와 코드 편집기를 설치하는 과정에 대해 소개합니다.
Python Shell + 코드 편집도구

1) Jupyter 개요

데이터 분석을 위한 파이썬 IDE

  • Ipython(http://ipython.org)커널을 기반으로 한 대화형 파이썬 셸
  • 일반적인 터미널 셸 + 웹 기반 데이터 분석 Notebook 제공
  • 미디어, 텍스트, 코드, 수식 등을 하나의 문서로 표현 가능
  • 사실상의 데이터 분석 Interactive Shell의 표준
  • Julia + Python + R
#jupyter 설치
conda install jupyter

#jupyter 실행
jupyter notebook
  • http://localhost:8888/tree 주소로 jupyter가 실행됨
  • 터미널 창의 token 정보를 사용
  • cell 단위로 실행 -> 실행시점에 해당 코드가 memory에 올라감
  • 실행 명령어 ctrl+enter, shift+enter, alt+enter

2) 주요 단축키 (edit mode - cell 안 편집 상태)

  • 툴팁 표시하기: Shift + Tab
  • 들여쓰기 사용하기: ctrl+] or ctrl+[
  • 셀 나누기: ctrl+shift+-

3) 주요 단축키(command mode - cell 밖 상태)

  • 아래 셀이랑 합치기: shift + M
  • 셀 오려두기: x 셀copy: c 셀 붙여넣기:v or shift+v
  • 셀 지우기: d,d 셀 지우기 취소:z
  • Markdown 변환: m,m Code로 변환: y,y

4) Colab

  • 구글이 개발 클라우드 기반의 jupyter notebook
  • 구글 드라이브 + GCP + jupyter 등이 합쳐져서 사용자가 손쉽게 접근
  • 초반 여러가지 모듈 설치의 장점을 가짐
  • 구글 드라이브의 파일을 업로드하여 사용가능한 장점 가짐
  • VSCode등과 연결해서 사용가능
  • V100 이상의 GPU를 무료로 쓸 수 있다는 장점을 가짐
  • colab pro을 사용할 경우 안정적인 colab의 활용이 가능해짐
  • colab과 jupyter는 비슷한 듯 다른 단축키를 가짐

6. 파이썬 기초 문법 - Variables

이번 강의에서는 프로그래밍에서 가장 기초적으로 알아야 할 변수에 대해서 배웁니다.

변수와 함께 그 변수가 물리적으로 저장되는 메모리에 대해서 배웁니다.

마지막으로, 한 번에 여러 개의 변수를 함께 저장해서 화면에 표시하거나 필요한 연산을 수행하게 하는 리스트 라는 데이터 타입에 대해서 배웁니다.

1) variable & memory

변수의 개요

  • 가장 기초적인 프로그래밍 문법 개념
  • 데이터(값)을 저장하기 위한 메모리 공간의 프로그래밍상 이름

2) 이 순간 컴퓨터에서 무슨 일이 일어난 일은?

변수(Variable)란?

수학식 2x + 7y = 14에서 변수는 x와 y를 의미함

프로그래밍에서 변수는 수학과 약간 다른 개념

프로그래밍에서 변수는 '값을 저장하는 장소'

변수는 '메모리 주소'를 가지고 있고
변수에 들어가는 '값'은 '메모리 주소'에 할당됨

[참고] 컴퓨터의 구조-폰 노이만(john b=von Neumann) 아키텍처

폰 노이만 아키텍처에서는 사용자가 컴퓨터에 값을 입력하거나 프로그램을 실행할 경우 그 정보를 먼저 메모리에 저장시키고 CPU가 순차적으로 그 정보를 해석하고 계산하여 사용자에게 결과값 전달

제어장치 = CPU

메모리와 변수

  • 변수=프로그램에서 사용하기 위한 특정한 값을 저장하는 공간
  • 선언되는 순간'메모리 특정영역에 물리적인 공간'이 할당됨
  • 변수에는 값이 할당되고 해당 값은 메모리에 저장됨
  • A = 8의 의미는 "A는 8이다"가 아닌 A라는 이름을 가진 메모리 주소에 8을 저장하라임

변수 이름 작명법

  • 알파벳, 숫자, 언더스코어_로 선언 가능
    ex) data=0, _a12=2, _gg='afdf'
  • 변수명은 '의미 있는 단어로 표기'하는 것이 좋다
    ex) professor_name = 'SungChul Choi'
  • 변수명은 '대소문자가 구분'된다.
    ex) ABC와 Abc는 같지 않다
  • 특별한 의미가 있는 '예약어는 쓰지 않는다.'
    ex) for, if, else 등

3) basic operations (간단한 연산)

  • 복잡한 프로그램을 작성하기 앞서 간단한 사칙연산과 문자열 처리 등의
    기초적인 연산을 알아야함
  • 이를 위해 본 장에서는 아래 내용을 습득
    1) 기본 자료형(primitive data type)
    2) 연산자와 피연산자
    3) 데이터 형변환
  • 이를 통해 간단한 프로그램 작성의 기초를 익힘

기본 자료형 (primitive data types)

  • data type: 파이썬이 처리할 수 있는 데이터 유형
  • 수치형 자료형 : 정수형, 실수형
  • 문자형 자료형 : string, 따옴표 안에 들어가는 값 숫자여도 문자로
  • 논리/불린 자료형 : true, false로만 나타나는 자료형
  • 자료형마다 메모리가 차지하는 공간의 크기가 달라진다 ( 중요 개념)
    32bit, floating point
    조금씩 다른 데이터 타입을 쓸 필요가 있다. 지금은 컴퓨터가 좋지만
    32gRAM / 64gRAM
    값이 데이터 = 1 이라고 선언, 저장
  • 정수형은 32bit 4byte 1byte 1024 = 1MB 1MB 1024 = 1GB
  • 기본 자료형은 얼마나 메모리를 차지하는가. 현재는 크게 신경을 안 쓰고 프로그래밍을 해도 상관이 없다
  • floating point

4) Dynamic Typing

  • 코드 실행시점에 데이터의 Type을 결정하는 방법
    파이썬의 가장 큰 장점
  • JAVA는 변수 타입을 선언해주어야 하는데 Python은 그렇지 않아도 됨 ![]

연산자(Operator)와 피연산자(operand)

  • +,-,*,/ 같은 기호들을 연산자라고 칭함
  • 연산자에 의해 계산이 되는 숫자들은 피연산자라 칭함
  • "3+2"d에서 3과 2는 피연산자, +는 연산자이다
  • 수식에서 연산자의 역할은 수학에서 연산자와 동일
  • 연산의 순서는 수학에서 연산 순서와 같음
  • 문자간에도 + 연산이 가능함 -> concatenate

제곱승과 나머지 구하기

**는 제곱승 계산 연산자

>>> print(3 * 3 * 3 * 3) # 3을 다섯 번 곱함
243
>>> print(3 ** 5)		 # 3의 5승
243
  • %는 나머지를 구하는 연산자
>>> print(7 / 2) 		 # 7 나누기 2 (정수형 계산)
3.5
>>> print(7 % 2)		 # 7 나누기 2의 나머지는
1

증가 또는 감소 연산

a += 1는 a = a+1과 같은 의미로 증가연산(-=)

>>> 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 = 1 일 때 a = 1 + 1 로 a에 다시 2가할당(assign)됨
    즉 좌변에a는 할당 받는 변수(variable)
    우변에a는 기존 a의 값(value)

5) 데이터 형 변환: 정수형 <-> 실수형

float()와 int() 함수를 사용하여 데이터의 형 변환 가능

>>> a = 10 			# a 변수에 정수 데이터 10을 할당
>>> print (a) 		# a가 정수형으로 출력
10
>>> a = float(10)   # a를 실수형으로 변환 / 정수형은 int()
>>> print (a)       # a를 출력
10.0 				# a가 실수형으로 출력됨
>>> b = 3 			# b 에 정수 데이터 3 할당
>>> print (a / b)   # 실수형으로 a 나누기 b를 출력
3.33333333333 		# 실수형 결과값 출력

10.3과 10.7 정수형으로 형변환후 덧셈하면 결과값은?

실수형에서 정수형으로 형 변환 시 소수점 이하 내림

>>> a = 10.7
>>> b = 10.3
>>> a = int(a)	 	# a를 정수형으로 형변환후 a에 할당
>>> b = int (b) 	# b를 정수형으로 형변환후 b에 할당
>>> print (a+b) 	# 정수형 a와 b의 합을 출력
20
>>> print (a) 		# 정수형 a값 출력
10
>>> print (b) 		# 정수형 b값 출력
10

데이터 형 변환: 숫자 ↔ 문자열

문자열로 선언된 값도 int() , float() 함수로 형 변환 가능

>>> a = '76.3' 							# a에 문자열 76.3을 할당, ''은 문자열을 의미
>>> b = float(a) 						# a를 실수형으로 형 변환 후 b에 할당

>>> print (a) 							# a값 출력
76.3
		
>>> print (b) 							# b 값 출력
76.3
>>> print (a + b) 						# a와 b를 더함 그러나 문자열과 숫자열의
Traceback (most recent call last): 		# 덧셈이 불가능하여 에러발생
File "<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'float' objects

a와 b를 실수형으로 덧셈하고, 문자열로 연결하려면? -> 형을맞춰라

>>> a = float(a) 		# a를 실수형으로 형 변환 후 a에 할당
>>> b = a 				# 실수형 a 값을 b에 할당
>>> print (a + b) 		# 두 실수형 더한 후 출력
152.6
>>> a = str(a) 			# 실수형 a 값 문자열로 변환 후 a 할당
>>> b = str(b) 			# 실수형 b 값을 문자열로 변환 후 b 할당
>>> print (a + b) 		# 두 값을 더한 후 출력
76.376.3 				# 문자열간 덧셈은 문자열간 단순 연결

컴퓨터의 반올림 오차

아래와 같이 나오는 이유는 무엇일까?

>>> c = 38.8 		# c에 실수형 38.8 할당
>>> print (c) 		# c 출력
38.8
>>> c 				# c에 있는 값은?
38.799999999999997 	# 응?

컴퓨터의 모든 값은 이진수로 변환되어 메모리에 저장
Python 2.7에서만 나오는 숫자 3.x에선 정상으로 나옴

0.1를 이진수 변환하여라
단순한 실수도 이진수로 변환하면 무한소수가 됨

정수는 32bit, 실수는 64bit. 굉장히 긴 공간 차지
실수는 정수보다 공간 차지하지만

반올림오차는 충분히 작아 반올림을 하여 일반적으로 문제가 되지 않음

[참고] 컴퓨터는 왜 이진수를 쓰나?

컴퓨터는 실리콘이라는 재료로 만든 반도체로 구성됨
반도체는 특정 자극을 줬을 때 전기를 통할 수 있게 하는 물질
전류가 흐를 때 1, 흐르지 않을 때 0으로만 숫자를 표현할 수 있음
이진수 한자리를 bit라 칭하고 8개의 bit는 1byte

6) list

데이터가 100개 있다면 어떻게 관리할 것인가?

100명의 성적 관리를 위한 변수는 몇 개? 100개? 1개?

list 또는 array

  • 시퀀스 자료형, 여러 데이터들의 집합
  • int, float 같은 다양한 데이터 타입 포함

list의 특징

  • 인덱싱 indexing
  • 슬라이싱 slicing
  • 리스트 연산
  • 추가 삭제
  • 메모리 저장 방식
  • 패킹과 언패킹
  • 이차원 리스트

인덱싱 (Indexing)

  • list에 있는 값들은 주소(offset)를 가짐
    -> 주소를 사용해 할당된 값을 호출
colors = ['red', 'blue', 'green']
print(colors[0]) 	# red
print(colors[2]) 	# green
print(len(colors)) 	# 3
					# len은 list의 길이를 반환

슬라이싱 (Slicing)

  • list의 값들을 잘라서 쓰는 것이 슬라이싱
  • list의 주소 값을 기반으로 부분 값을 반환
cities = ['서울', '부산', '인천', '대구', '대전', '광주', '울산', '수원']
print (cities[0:6], " AND ", cities[-9:]) # a 번수의 0부터 5까지, -9부터 끝까지
print (cities[:]) # cities 변수의 처음부터 끝까지
print (cities[-50:50]) # 범위를 넘어갈 경우 자동으로 최대 범위를 지정
print (cities[::2], " AND ", cities[::-1]) # 2칸 단위로, 역으로 슬라이싱

리스트의 연산

  • concatenation, is_in, 연산 함수들
>>> color = ['red', 'blue', 'green']
>>> color2 = ['orange', 'black', 'white']
>>> print (color + color2) # 두 리스트 합치기
>>> len(color) # 리스트 길이
>>> color[0] = 'yellow' # 0번째 리스트의 값을 변경
>>> print (color * 2) # color 리스트 2회 반복
>>> 'blue' in color2 # 문자열 ‘blue‘가 color2 존재 여부 반환
>>> total_color = color + color2

리스트의 연산 – 추가와 삭제

  • append, extend, insert, remove, del 등 활용
# 이전 장과 연결 돼서 실행
>>> color.append("white") 				# 리스트에 “white” 추가
>>> color.extend(["black","purple"]) 	# 리스트에 새로운 리스트 추가
>>> color.insert(0,"orange") 			# 0번째 주소에 “orange” 추가
>>> print (color)
['orange', 'yellow', 'blue', 'green', 'white', 'black', 'purple']
>>> color.remove("white") 				# 리스트에 “white” 삭제
>>> del color[0] 						# 0번째 주소 리스트 객체 삭제
>>> print (color)
['yellow', 'blue', 'green', 'black', 'purple']

Python 리스트만의 특징

  • 다양한 Data Type이 하나에 List에 들어감
>>> a = ["color", 1, 0.2]
>>> color = ['yellow', 'blue', 'green', 'black', 'purple']
>>> a[0] = color # 리스트 안에 리스트도 입력 가능
>>> print (a)
[['yellow', 'blue', 'green', 'black', 'purple'], 1, 0.2

리스트 메모리 저장 방식

  • 파이썬은 해당 리스트 변수에는 리스트 주소값이 저장됨
>>> a = [5, 4, 3, 2, 1]
>>> b = [1, 2, 3, 4, 5]
>>> b = a
>>> print (b)
[5, 4, 3, 2, 1]
>>> a.sort()
>>> print (b)
[1, 2, 3, 4, 5]
>>> b = [6,7,8,9,10]
>>> print (a, b)
[1, 2, 3, 4, 5] [6, 7, 8, 9, 10]

패킹과 언패킹

  • 패킹 : 한 변수에 여러 개의 데이터를 넣는 것
  • 언패킹 : 한 변수의 데이터를 각각의 변수로 반환
>>> 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

이차원 리스트

  • 리스트 안에 리스트를 만들어 행렬(Matrix) 생성
>>> kor_score = [49,79,20,100,80]
>>> math_score = [43,59,85,30, 90]
>>> eng_score = [49,79,48,60,100]
>>> midterm_score = [kor_score, math_score, eng_score]
>>> print (midterm_score[0][2])
20

7. Function and Console I/O

1) function

함수의 개요

  • 어떤 일을 수행하는 코드의 덩어리
# 사각형의 넓이를 구하는 함수
def calculate_rectangle_area (x , y):
  return x * y 	# 가로, 세로를 곱해서 반환
  • 반복적인 수행을 1회만 작성 후 호출
  • 코드를논리적인 단위로 분리
  • 캡슐화 : 인터페이스만 알면 타인의 코드 사용

함수 선언 문법

  • 함수이름, parameter, indentation, return value(optional)
def 함수 이름 (parmaeter #1,…,):
  수행문 #1(statements)
  수행문 #2(statements)
  return <반환값>

함수 선언 예시

def calculate_rectangle_area(x , y)
	return x * y
    
rectangle_x = 10
rectangle_y = 20
print ("사각형 x의 길이: ", rectangle_x)
print ("사각형 y의 길이: ", rectangle_y)

# 넓이를 구하는 함수 호출
print ("사각형의 넓이: ", calculate_rectangle_area(rectangle_x, rectangle_y))

함수 수행 순서

  • 함수 부분을 제외한 메인프로그램부터 시작
  • 함수 호출 시 함수부분을 수행 후 되돌아옴

[참고] 함수 vs 함수

  • 프로그래밍의 함수와 수학의 함수는 유사함
  • 모두 입력 값과 출력 값으로 이루어짐
def f(x):
	return 2 * x + 7
def g(x):
	return x ** 2
x = 2
print(f(x) + g(x) + f(g(x)) + g(f(x))

parameter vs argument

  • parameter : 함수의 입력 값 인터페이스
def f(x) :
	return 2 * x + 7
  • argument : 실제 parameter에 대입된 값
>>> print(f(2))
11

함수 형태

  • parameter 유무, 반환 값(return value) 유무에 따라 함수의 형태가 다름

2) console in/out

어떻게 프로그램과 데이터를 주고 받을 것인가?

개요

터미널 - mouse가 아닌 키보드로 명령을 입력 프로그램 실행
GUI, CLI

Command Line Interface

Graphic User Interface(GUI)와 달리 Text를 사용하여 컴퓨터에 명령을 입력하는 인터페이스 체계

Windows - CMD window, Windows Terminal
Mac, Limux - Terminal

윈도우 cmder 권장

콘솔창 입출력 I = input

input() 함수는 콘솔창에서 문자열을 입력 받는 함수
console_test.py

print("Enter your name:")
somebody = input() # 콘솔창에서 입력한 값을 somebody에 저장
print("Hi", somebody, "How are you today?")

실행

python console_test.py
Enter your name:
Sungchul Choi
Hi Sungcul Choi How are you today?

콘솔창 입출력 II - print

콤마(,) 사용할경우print 문이연결됨

>>> print ("Hello World!", "Hello Again!!!") # , 사용
Hello World! Hello Again!!! # 실행 시 두 문장이 연결 돼서 출력됨

숫자 입력 받기

temperature = float(input("온도를 입력하세요 :")) # 입력 시 바로 형 변환 하기
print(temperature)
python temperature.py
온도를 입력하세요 : 103
103.0

3) print formatting

형식(format)에 맞춰서 출력을 할 때가 있음

프린트문은 기본적인 출력 외에 출력의 양식을 형식을 지정 가능
(1) % string (2) format 함수(3) fstring

print(1,2,3)
print("a" + " " + "b" + " " + "c")
print("%d %d %d" % (1,2,3))
print("{} {} {}".format("a","b","c"))
print(f"value is {value})
profile
🌻

0개의 댓글