Chapter 1. 파이썬 소개
프로그래밍이란?
프로그램 : 컴퓨터에게 작업을 어떻게 시킬 지를 기록해놓은 작업 지시서. 파워포인트, 카카오톡과 같은 앱들이 모두 프로그램.
프로그램 내부 : '무엇을 어떻게 해라' 와 같은 형태의 명령어(instruction)들이 들어 있다.
#################파이썬 설치
파이썬 3.8.2(64bit)
1. 관리자권한으로 실행
2. Add python 3.8 to Path 체크하기
대표사진 삭제
사진 설명을 입력하세요.
3. Install Now
4. 설치완료
http://www.python.org: 파이썬 다운 주소
The Python Tutorial — Python 3.8.2 documentation
The Python Tutorial Python is an easy to learn, powerful programming language. It has efficient high-level data structures and a simple but effective approach to object-oriented programming. Python’s elegant syntax and dynamic typing, together with its interpreted nature, make it an ideal language f...
docs.python.org
https://docs.python.org/3.8/tutorial/index.html파이썬 튜토리얼 관련 주소
이미지 썸네일 삭제
Welcome to Python.org
The official home of the Python Programming Language
www.python.org
https://docs.python.org/ko/3.8/tutorial/index.html(한글버전)
파이썬 자습서 — Python 3.8.2 문서
파이썬 자습서 파이썬은 배우기 쉽고, 강력한 프로그래밍 언어입니다. 효율적인 자료 구조들과 객체 지향 프로그래밍에 대해 간단하고도 효과적인 접근법을 제공합니다. 우아한 문법과 동적 타이핑(typing)은, 인터프리터 적인 특징들과 더불어, 대부분 플랫폼과 다양한 문제 영역에서 스크립트 작성과 빠른 응용 프로그램 개발에 이상적인 환경을 제공합니다. 파이썬 인터프리터와 풍부한 표준 라이브러리는 소스나 바이너리 형태로 파이썬 웹 사이트, https://www.python.org/ , 에서 무료로 제공되고, 자유롭게 배포할 수 있습니다. ...
docs.python.org
5. IDLE 관리자권한으로 실행
대표사진 삭제
사진 설명을 입력하세요.
6. 원하는 셋팅 변경 Option - Configure Idle( setting )
전송중...
사진 설명을 입력하세요.
7. File - New File 하면 R의 스크립트파일처럼 주석처리 및 코딩 가능하다
파이썬의 특징
1) 범용 프로그래밍 언어.
2) 생산성이 뛰어남.
3) 간결하면서 효율적으로 빠르게 프로그램을 작성할 수 있다.
4) 초보자에게 좋은 언어 : 인터프리터 언어(interpreted language)이기 때문.
프로그레머가 한 줄의 문장을 입력하고 엔터키를 누르면, 인터프리터가 이것을 해석하여 바로 실행.
파이썬은 실행 전에 컴파일할 필요가 없다.
다른 언어는 실행하기 전에 컴퓨터가 이해할 수 있는 기계어로 컴파일하는 과정이 필요.
파이썬은 작성한 문장의 실행 결과를 즉시 확인할 수 있기 때문에 초보 프로그래머에게 편리.
5) 파이썬은 문법이 쉬워서 코드를 보면 직관적으로 알 수 있는 부분이 많다.
예) if " 사과 " in [" 딸기 ", " 바나나 ", " 포도 ", " 사과 "]:
print(" 사과가 있습니다 ")
6) 파이썬은 다양한 플랫폼에서 사용
7) 라이브러리가 풍부
8) 애니메이션이나 그래픽을 쉽게 사용
전송중...
파이썬의 라이브러리
요새는 Django 에서 Flask 로 이동되어가고 있는 중
문자열 출력
-> 파이썬에서 “ “ 로 둘러싸이면 문자열이 된다. 문자열에 + 연산자를 붙이면 문자열과 문자열이 연결된다.
전송중...
사진 설명을 입력하세요.
문자열에 * 를 이용하여 반복하여 출력할 수 있다.
전송중...
사진 설명을 입력하세요.
여러 개의 값들을 화면에 차례대로 출력할 수 있다.
전송중...
사진 설명을 입력하세요.
import turtle
t=turtle.Turtle()
전송중...
사진 설명을 입력하세요.
t.shape("turtle")
전송중...
사진 설명을 입력하세요.
t.forward(100)
전송중...
사진 설명을 입력하세요.
t.left(90)
전송중...
사진 설명을 입력하세요.
반복하면
전송중...
사진 설명을 입력하세요.
이렇게 그릴 수 있다.
터틀 그래픽 데모
전송중...
사진 설명을 입력하세요.
전송중...
사진 설명을 입력하세요.
스크립트(script mode) 모드
파이썬 파일 만들때는 기존 라이브러리 명을 다 피해야 한다.
--> 가장 편한 방법은 파일명 뒤에 '_hjs'와 같이 이름을 붙이면 된다.
프로그램 안의 코드가 길어질 경우, 하나의 파일로 만들고, 코드들을 저장.
실행할 때는 파일을 읽어서 처음부터 파일의 끝까지 모든 코드를 실행.
이와 같이 사용할 수 있는 모드
py 파일은 그 자체가 모듈
문자열에 숫자를 더하면 오류 발생, 곱셈은 연산 가능
import turtle
colors = ["red", "purple", "blue", "green", "yellow", "orange"]
t = turtle.Turtle()
turtle.bgcolor("black")
t.speed(0)
t.width(3)
length=10
while length<500:
t.forward(length)
t.pencolor(colors[length%6]) # 0 1 2 3 4 5 의 6가지 색
t.right (89) # 오른쪽으로 89도 회전
length += 5
전송중...
실행결과 : 네모 하나씩 그려진다.
Chapter 2. 변수 소개
01 이번 장에서 만들 프로그램
(1) 첫 번째 프로그램은 두 개의 정수를 가지고 덧셈 연산을 실행한 후에, 연산 결과를 화면에 출력한다.
(2) 집의 크기를 입력받아서 터틀 그래픽으로 화면에 그린다.
02 변수(variable) #1
변수의 소개 변수(variable)는 값을 저장하는 상자로 생각할 수 있다
변수는 컴퓨터 메모리 공간에 만들어 진다
파이썬에서 변수를 생성하려면
‘=’ : 같다라는 의미가 이니라, 오른쪽의 값을 왼쪽의 변수에 저장하라는 의미.
* 메모리(memory)란?
컴퓨터 메모리는 on과 off 상태로 변경할 수 있는 전자 스위치로 구성.
하나의 전자 스위치가 저장할 수 있는 정보를 비트(bit)라고 부른다.
이들 전자 스위치를 설정해서 원하는 정보를 저장하도록 할 수 있다.
메모리에 쓸 수도 있고, 읽을 수도 있다.
08 사용자로부터 정수 입력받기 #1
inputt( ) 함수 :
파이썬에서 사용자로부터 무엇인가를 입력받을 경우 사용.
사용자의 입력을 무조건 문자열 형태로 반환.
연산을 위해 정수로 변환할 경우 int( ) 로 감싸야 한다.
input( ) 함수는 ( … ) 안의 메시지를 화면에 출력하고 사용자의 입력을 기다린다.
사용자가 입력하면 input( ) 함수는 종료.
전송중...
사진 설명을 입력하세요.
예제 )
x = int(input("첫 번째 정수 입력: "))
y = int(input("두 번째 정수 입력: "))
sum = x+y
name = input("이름 입력: ")
print(name, "씨 안녕?")
print("파이썬 오신 것 환영.")
# 사용자의 대답을 변수에 저장한다.
stadium = input("경기장은 어디입니까? ")
winner = input("이긴팀은 어디입니까? ")
loser = input("진 팀은 누구입니까? ")
vip = input("우수선수는 누구입니까? ")
score = input("스코어는 몇대몇입니까? ")
# 변수와 문자열을 연결하여 기사를 작성한다.
print("")
print("======================================")
print("오늘", stadium, "에서 야구 경기가 열렸습니다.")
print(winner,"과",loser,"은 치열한 공방전을 펼쳤습니다.")
print(vip, "이 맹활약을 하였습니다.")
print("결국",winner,"가", loser,"를", score,"로 이겼습니다.")
print("======================================")
전송중...
사진 설명을 입력하세요.
street = input("주소는 어디인가요? ")
type = input("주거형태가 무엇인가요?")
number_of_rooms = input("방의 수는 몇 개 인가요?")
price = input("가격은 얼마입니까? ")
print("################")
print("# #")
print("#부동산매물광고#")
print("# #")
print("################")
print("")
print(street,"에 위치한 아주 좋은 ", type, "가 매물로 나왔습니다. 이 ", type,
"는 ", number_of_rooms, "개의 방을 가지고 있으며, 가격은 ", price,"입니다.")
전송중...
사진 설명을 입력하세요.
파이썬 연산자(사칙연산)
전송중...
사진 설명을 입력하세요.
# 파이썬은 나눗셈 연산 시 항상 실수로 반환( 6/3 = 3.0 )
※ 주의 : 파이썬 버전 2.X 에서는 '/' 연산자의 결과가 정수가 된다.
나눗셈의 몫을 정수로 계산하고 싶을 경우 '//' 사용
04 나머지 연산자 (%)
나머지 연산자는 나누어서 남는 나머지를 반환
전송중...
사진 설명을 입력하세요.
나머지 연산자의 용도 1 : 짝수와 홀수의 구분
어떤 수 x를 2로 나누어서 나머지가 0이면 짝수.
전송중...
사진 설명을 입력하세요.
나머지 연산자의 용도 2 : 초 단위의 시간을 받아서 몇 분 몇 초인지를 계산
1,000 초가 몇 분, 몇 초에 해당하는지를 계산
전송중...
사진 설명을 입력하세요.
[Lab] 다각형 그리기
사용자가 입력한 각형 수를 이용하여 해당되는 다각형을 그리기.
전송중...
사진 설명을 입력하세요.
[Lab] 화씨 온도를 섭씨 온도로 변환하기
화씨온도를 받아서 섭씨온도로 바꾸는 프로그램을 작성.
전송중...
사진 설명을 입력하세요.
ftemp = int(input("화씨온도: "))
ctemp = (ftemp-32.0)*5.0/9.0
print("섭씨온도 : ", ctemp)
전송중...
사진 설명을 입력하세요.
[Lab] BMI(Body Mass Index) 계산하기
사용자로부터 신장과 체중을 입력받아서 BMI 값을 출력하는 프로그램을 작성.
전송중...
사진 설명을 입력하세요.
weight = float(input("몸무게 입력 kg : "))
height = float(input("키 입력 m :"))
bmi = (weight / (height**2))
print("당신의 BMI = ", bmi)
전송중...
사진 설명을 입력하세요.
[Lab] 자동판매기 프로그램
자동 판매기를 시뮬레이션하는 프로그램을 작성.
자동 판매기는 사용자로부터 투입한 돈과 물건값을 입력 받는다.
물건값은 100원 단위라고 가정.
프로그램은 잔돈을 계산하여 출력한다.
자판기는 동전 500원, 100원짜리만 가지고 있다고 가정
money = int(input("투입한 돈: "))
price = int(input("물건 값 :"))
change = money - price
print("거스름돈 :", change)
coin500s = change // 500 # 500으로 나누어서 몫이 500원 짜리의 개수
change = change % 500 # 500으로 나눈 나머지를 계산한다.
coin100s = change // 100 # 100으로 나누어서 몫이 100원짜리의 개수
print("500원 동전의 개수:", coin500s)
print("100원 동전의 개수:", coin100s)
전송중...
사진 설명을 입력하세요.
05 지수 연산자 ( ** )
지수(power)를 계산하려면 ** 연산자를 사용.
지수연산자는 다른 연산자보다 높은 우선순위를 가진다.
지수 연산자는 오른 쪽에서 왼쪽으로 연산된다.
예) 10*2**7=1280
2**2**3은 2**(2**3)의 순으로 연산.
따라서 2**3=8 2**8=256
2 ** 7 은 파이썬에서 2의 7승이 된다.
전송중...
사진 설명을 입력하세요.
01-3 파이썬으로 무엇을 할 수 있을까?
GUI 프로그래밍
GUI(Graphic User Interface) 프로그래밍이란 쉽게 말해 윈도우 창처럼 화면을 보며 마우스나 키보드로 조작할 수 있는
프로그램을 만드는 것이다. 파이썬으로 GUI 프로그램을 만드는 것은 다른 언어를 이용해 만드는 것보다 훨씬 쉽다.
대표적인 예로 파이썬 프로그램을 설치할때 함께 설치되는 기본 모듈인 Tkinter(티케이인터)를 이용해 만드는 GUI 프로그램을 들 수 있다.
실제로 Tkinter를 이용한 파이썬 GUI 프로그램의 소스 코드는 매우 간단하다.
Tkinter를 이용하면 단 5줄의 소스 코드만으로도 윈도우 창을 띄울 수 있다. 놀랍지 않은가!
※ 파이썬에는 wxPython, PyQT, PyGTK 등과 같이 Tkinter보다 빠른 속도와 보기 좋은 인터페이스를 자랑하는 것들도 있다.
※ C언어와 궁합이 잘 맞는다.
수치 연산 프로그래밍
사실 파이썬은 수치 연산 프로그래밍에 적합한 언어는 아니다. 수치가 복잡하고 연산이 많다면 C같은 언어로 하는 것이 더 빠르기 때문이다.
하지만 파이썬에는Numeric Python이라는 수치 연산 모듈이 제공된다.(Numpy, 넘파이)
이 모듈은 C로 작성되었기 때문에 파이썬에서도 수치 연산을 빠르게 할 수 있다.
데이터베이스 프로그래밍
파이썬은 사이베이스(Sybase), 인포믹스(Infomix), 오라클(Oracle), 마이에스큐엘(MySQL), 포스트그레스큐엘(PostgreSQL) 등의 데이터베이스에 접근할 수 있게 해주는 도구들을 제공한다.
또한 이런 굵직한 데이터베이스를 직접 이용하는 것 외에도 파이썬에는 재미있는 모듈이 하나 더 있다.
바로피클(pickle)이라는 모듈이다. 피클은 파이썬에서 사용되는 자료들을 변형없이 그대로 파일에 저장하고 불러오는 일들을 맡아 한다.
이 책에서는 외장 함수에서 피클을 어떻게 사용하고 활용하는지에 대해서 알아본다.
데이터 분석, 사물 인터넷
파이썬으로 만들어진 판다스(Pandas)라는 모듈을 이용하면 데이터 분석을 더 쉽고 효과적으로 할 수 있다.
데이터 분석을 할 때 아직까지는 데이터 분석에 특화된 "R"이라는 언어를 많이 사용하고 있지만,
판다스가 등장한 이후로 파이썬을 이용하는 경우가 점점 증가하고 있다. 사물 인터넷 분야에서도 파이썬은 활용도가 높다.
한 예로 라즈베리파이(Raspberry Pi)는 리눅스 기반의 아주 작은 컴퓨터이다.
라즈베리파이를 이용하면 홈시어터나 아주 작은 게임기 등 여러 가지 재미있는 것들을 만들 수 있는데
파이썬은 이 라즈베리파이를 제어하는 도구로 사용된다. 예를 들어 라즈베리파이에 연결된 모터를 작동시키거나
램프에 불이 들어오게 하는 일들을 파이썬으로 할 수 있다.
파이썬으로 할 수 없는 일
시스템과 밀접한 프로그래밍 영역
파이썬으로 도스나 리눅스 같은 운영체제, 엄청난 횟수의 반복과 연산을 필요로 하는
프로그램 또는 데이터 압축 알고리즘 개발 프로그램 등을 만드는 것은 어렵다.
즉, 대단히 빠른 속도를 요구하거나 하드웨어를 직접 건드려야 하는 프로그램에는 어울리지 않는다.
모바일 프로그래밍
파이썬은 구글이 가장 많이 애용하는 언어이지만 파이썬으로 안드로이드 앱(App)을 개발하는 것은 아직 어렵다.
안드로이드에서 파이썬으로 만든 프로그램들이 실행되도록 지원하긴 하지만 이것만으로 앱을 만들기에는 아직 역부족이다.
아이폰 앱을 개발하는 것 역시 파이썬으로는 할 수 없다.
import sys
sys.exit()
전송중...
사진 설명을 입력하세요.
조건문 if
다음은 간단한 조건문 if를 이용한 예제이다.
전송중...
사진 설명을 입력하세요.
반복문 for
다음은 for를 이용해서 [1, 2, 3]안의 값들을 하나씩 출력해 주는 것을 보여주는 예이다.
전송중...
사진 설명을 입력하세요.
다중값을 하나씩 a에 대입해서 사용.
전송중...
사진 설명을 입력하세요.
for문을 이용하면 실행해야 할 문장을 여러 번 반복해서 실행시킬 수 있다.
위의 예는 대괄호([ ]) 사이에 있는 값들을 하나씩 출력한다.
위 코드의 의미는 "[1, 2, 3]이라는 리스트의 앞에서부터 하나씩 꺼내어 a라는 변수에 대입한 후 print(a)를 수행하라"이다.
당연히 a에 차례로 1, 2, 3이라는 값이 대입되며 print(a)에 의해서 그 값이 차례대로 출력된다.
다음은 while을 이용하는 예이다.
전송중...
사진 설명을 입력하세요.
while이라는 영어 단어는 "~인 동안"이란 뜻이다.
for문과 마찬가지로 반복해서 문장을 수행할 수 있도록 해준다.
위의 예제는 i 값이 3보다 작은 동안 i=i+1 과 print(i)를 수행하라는 말이다.
i=i+1 이라는 문장은 i의 값을 1씩 더하게 한다.
i 값이 3보다 커지게 되면 while문을 빠져나가게 된다.
파이썬의 함수는 다음과 같은 형태이다
전송중...
사진 설명을 입력하세요.
전송중...
사진 설명을 입력하세요.
파이썬에서 def는 함수를 만들 때 사용하는 예약어이다.
위의 예제는 sum이라는 함수를 만들고 그 함수를 어떻게 사용하는지를 보여준다.
sum(a, b)에서 a, b는 입력값이고, a+b는 결과값이다.
즉 3, 4가 입력으로 들어오면 3+4를 수행하고 그 결과값인 7을 돌려 준다.
03. 파이썬 기본 자료 구조
1. 기본 자료 구조
1) 리스트
2) 튜플
3) 딕셔너리
2. 시리즈와 데이터프레임은 판다스를 설치해야 가능하다.
파이썬의 리스트는 배열과 유사한 형태로 되어있다.
전송중...
사진 설명을 입력하세요.
전송중...
사진 설명을 입력하세요.
#문자와 숫자가 동시에 넣기 가능
전송중...
사진 설명을 입력하세요.
#인덱스 번호는 -1과 같은 '-'값도 데이터를 추출할 수 있다.
전송중...
사진 설명을 입력하세요.
daishin 리스트에 대한 인덱싱을 그림으로 표현하면 그림 3.3과 같이 나타낼 수 있습니다.
인덱싱할 때 언제 양수 인덱싱을 사용하고 음수 인덱싱을 사용할지에 대한 규칙이나 제약은 없습니다.
프로그래밍할 때 필요에 따라 적절하게 사용하면 되는 것입니다.
전송중...
사진 설명을 입력하세요.
>>> kospi_top10 = ['삼성전자', 'SK하이닉스', '현대차', '한국전력', '아모레퍼시픽', '제일모직',
'삼성전자우', '삼성생명', 'NAVER', '현대모비스']
>>> kospi_top10
['삼성전자', 'SK하이닉스', '현대차', '한국전력', '아모레퍼시픽', '제일모직', '삼성전자우', '삼성생명', 'NAVER', '현대모비스']
>>> print("시가총액 5위: ", kospi_top10[4])
시가총액 5위: 아모레퍼시픽
전송중...
사진 설명을 입력하세요.
전송중...
사진 설명을 입력하세요.
슬라이싱은 "[시작 인덱스: 끝 인덱스]"와 같은 형태로 표현하면 되는데,
위 코드에서는 0이 시작 인덱스이고 5가 끝 인덱스입니다.
따라서 kospi_top10[0:5]는 kospi_top10이라는 리스트에서 0번 위치에서부터 5번 위치까지를 가져오라는 의미가 됩니다.
그림 3.4와 같이 kospi_top10이라는 이름의 리스트에 앞에서부터 인덱스를 붙여보면 [0:5]라는 슬라이싱의 의미를
더 쉽게 파악할 수 있습니다.
전송중...
사진 설명을 입력하세요.
전송중...
사진 설명을 입력하세요.
전송중...
사진 설명을 입력하세요.
전송중...
사진 설명을 입력하세요.
1-4) 리스트에 데이터 삽입하기
>>> kospi_top10 = ['삼성전자', 'SK하이닉스', '현대차', '한국전력', '아모레퍼시픽', '제일모직',
'삼성전자우', '삼성생명', 'NAVER', '현대모비스']
>>> kospi_top10.append('SK텔레콤')
# append는 항상 맨 뒤에 추가해주는 함수이다.
전송중...
사진 설명을 입력하세요.
# .insert 함수(삽입될 번호, "삽입될 값")
전송중...
사진 설명을 입력하세요.
1-5) 리스트 데이터 삭제
>>> del kospi_top10[-1]# del은 함수가 아닌 키워드이다.
>>> kospi_top10
['삼성전자', 'SK하이닉스', '현대차', 'SK 텔레콤', '한국전력', '아모레퍼시픽', '제일모직', '삼성전
자우', '삼성생명', 'NAVER']
>>> len(kospi_top10)
10
2) 튜플(데이터 조작 불가)
3.1절에서는 파이썬의 리스트라는 자료구조를 배웠습니다.
이번 절에서 배울 튜플(tuple)도 여러 개의 데이터를 순서대로 담아두는 데 사용합니다.
단, 튜플과 리스트는 다음과 같은 두 가지 차이점이 있습니다.
튜플은 리스트보다 속도가 빠르다는 장점이 있습니다.
따라서 한번 데이터를 저장해둔 후 추가하거나 삭제할 필요가 없는 경우라면
되도록 리스트보다는 튜플을 사용하는 것이 좋습니다.
1) 리스트는 '[' 와 ']'를 사용하는 반면 튜플은 '('와 ')'를 사용한다.
2) 리스트는 리스트 내의 원소를 변경할 수 있지만 튜플은 변경할 수 없다.
>>> t = ('Samsung', 'LG', 'SK')
>>> t
('Samsung', 'LG', 'SK')
>>> len(t)
3
>>> t[0]
'Samsung'
>>> t[1]
'LG'
>>> t[2]
전송중...
값을 변경할 수 없기 때문에 오류가 발생한다.
주의할 점은 튜플을 생성할 때는 '('와 ')' 기호를 사용하지만 데이터에 접근하는 인덱싱이나
슬라이싱에서는 데이터의 범위를 '['와 ']' 기호로 표현한다는 점입니다.
즉, 다음 코드는 파이썬 문법에 어긋나기 때문에 에러가 발생합니다.
전송중...
사진 설명을 입력하세요.
3) 딕셔너리
파이썬의 딕셔너리도 영어사전과 유사하게 키(key)와 값(value)이라는 쌍으로
데이터를 구성해서 저장함으로써 더 쉽게 저장된 값을 찾을 수 있는 구조입니다.
>>> cur_price = {}
>>>
>>> cur_price['daeshin'] = 30000
>>>
전송중...
사진 설명을 입력하세요.
>>> cur_price['daeshin'] = 30000
>>>
---> 키 이름은 daeshin은 30000만(daeshin은 키, 30000은 값)
>>> cur_price['Daum KAKAO'] = 80000
>>> cur_price
{'Daum KAKAO': 80000, 'daeshin': 30000}
딕셔너리에 들어 있는 데이터의 개수를 확인할 때도 리스트나 튜플과 동일하게
len 내장 함수를 사용하면 됩니다. 현재 cur_price 딕셔너리에는 두 개의 키-값 쌍이 입력돼 있으므로
len 내장 함수의 반환값이 2가 됨을 확인할 수 있습니다.
>>> len(cur_price)
2
파이썬의 딕셔너리는 리스트와 튜플과 달리 인덱싱을 지원하지 않습니다.
딕셔너리는 리스트와 튜플과 달리 데이터를 순서대로 저장하는 것이 아니라
키와 값의 쌍이 서로 연결되도록만 저장하기 때문입니다. 따라서 다음과 같이
딕셔너리에 정숫값을 이용해 인덱싱하면 오류가 발생합니다.
전송중...
사진 설명을 입력하세요.
딕셔너리는 리스트나 튜플과 달리 원소를 추가한 순서대로 데이터가 저장돼 있지 않기 때문에
딕셔너리에 추가한 데이터를 얻으려면 키 값을 사용해야 합니다. 앞서 'daeshin'이
키이고 30000이 값이라고 했습니다. 따라서 cur_price 딕셔너리로부터
'daeshin'의 '현재가'를 구하려면 'daeshin'이라는 키 값을 사용하면 됩니다. 마찬가지로 'Daum KAKAO'라는 문자열이 키이므로 'Daum KAKAO'의 현재가도 'Daum KAKAO'라는 키를 통해 구할 수 있습니다.
전송중...
사진 설명을 입력하세요.
# 딕셔너리는 어펜드 인덱스 지원하지않는다.
>>> cur_price['naver'] = 800000
>>> cur_price
{'Daum KAKAO': 80000, 'naver': 800000, 'daeshin': 30000}
전송중...
키 이름은 무조건 문자열로만 써야 한다.
3-2) 딕셔너리로부터 키-값 구하기 (keys(), values())
딕셔너리에는 키-값 쌍이 저장된다고 했습니다. 그렇다면 딕셔너리에 있는 키 값만 구하려면 어떻게 해야 할까요?
이를 위해 파이썬의 딕셔너리는 keys()라는 메서드를 제공합니다.
따라서 키 값만 구하고 싶을 때 "딕셔너리이름.keys()"라고 호출하면 됩니다.
그런데 언제 딕셔너리로부터 키 값만 구해야 할까요?
다음 코드의 cur_price 딕셔너리에는 세 종목에 대한 현재가가 저장돼 있습니다.
cur_price 딕셔너리를 통해 어떤 주식 종목에 대한 현재가를 조회하고 싶다면
먼저 해당 종목명이 cur_price라는 딕셔너리에 있는지 확인해야 합니다.
이를 위해서는 cur_price라는 딕셔너리에서 키 값을 구해와야겠죠?
>>> cur_price = {'Daum KAKAO': 80000, 'naver':800000, 'daeshin':30000}
>>> cur_price.keys()
dict_keys(['naver', 'Daum KAKAO', 'daeshin']) #결과값 내부가 리스트로 잡힌다.
>>>
전송중...
사진 설명을 입력하세요.
위 코드를 살펴보면 키 값을 구하기 위해 딕셔너리의 이름인 cur_price 다음에 마침표를
하나 붙이고keys()라고 적는 것을 확인할 수 있습니다.
이러한 방식은 리스트에서 insert나 append 같은 메서드를 호출하는 방식과 동일합니다.
keys() 메서드의 반환값을 보면 'Daum KAKAO'와 'naver'가 파이썬의 리스트로 표현된 것 같기도 한데
그 앞에 'dict_keys'라는 것이 있습니다.
사실 keys() 메서드의 반환값은 리스트는 아니며,
리스트로 만들려면 list라는 키워드를 이용해 타입을 변환해줘야 합니다.
전송중...
사진 설명을 입력하세요.
그러나 이처럼 단순히 list를 통해 반환값을 받으면 사용하기 어려울 것입니다.
항상 변수를 통해서 반환값을 바인딩하는 것이 좋습니다.
다음과 같이 stock_list라는 이름의 변수로 list의 반환값을 바인딩하도록 해줍니다.
stock_list가 바인딩하고 있는 값을 보면 파이썬의 리스트임을 확인할 수 있습니다.
전송중...
사진 설명을 입력하세요.
딕셔너리에서 키 목록을 구하는 것과 비슷하게 값 목록을 구하려면 values()라는 메서드를 사용하면 됩니다.
cur_price 딕셔너리에서 값 목록을 리스트로 만들어 바인딩해 봅시다
전송중...
사진 설명을 입력하세요.
'Samsung'이라는 종목의 현재가를 cur_price라는딕셔너리로부터 구해야 한다고 해봅시다.
이를 위해서는 앞서 이야기한 것처럼 먼저 'Samsung'이라는 키 값이
cur_price 딕셔너리에 있는지 확인해야 합니다. 딕셔너리의 키 값은
keys() 메서드를 통해 얻을 수 있었죠? 다음과 같이in 이라는 키워드와
keys() 메서드의 반환값을 이용하면 이를 쉽게 조회할 수 있습니다.
전송중...
in은 for문으로 만들어진 연산
'naver'는 cur_price 딕셔너리의 키 중 하나이기 때문에 키를 통해 현재가 데이터를 구할 수 있습니다.
그러나 'Samsung'은 키에 포함돼 있지 않기 때문에 'Samsung'이라는 키를 사용하면 오류가 발생합니다.
전송중...
사진 설명을 입력하세요.
전송중...
사진 설명을 입력하세요.
2) 논리 연산자
비교 연산자를 이용해 상한가를 확인하는 코드를 작성해봤습니다.
그러나 사실 한국 거래소(www.krx.co.kr)의가격제한폭 제도를 살펴보면
정확한 상한가를 산출하는 방식은 기준 가격(전일 종가)에
단순히 0.3을 곱하는 것이 아니며 다음과 같이 조금 복잡하게 계산됩니다
1차 계산: 기준 가격에 0.3을 곱한다. (30%)
2차 계산: 기준 가격의 호가 가격단위에 미만을 절사한다.
3차 계산: 기준 가격에 2차 계산에 의한 수치를 가감하되, 해당 가격의 호가 가격단위 미만을 절사한다.
예를 들어, 기준 가격이 9,980원인 경우 다음과 같이 계산됩니다.
1차 계산: 9,980원 x 0.3 = 2,994원
2차 계산: 2,990원(기준 가격(9,980원)의 호가 가격단위인 10원 미만 절사)
3차 계산:
합산가격: 9,980원 + 2,990원 = 12,970원
호가 가격단위 적용: 12,970원의 호가 가격단위인 50원 미만 절사(2차 절사)
상한가: 12,950원
표 4.2 호가 가격 단위
전송중...
사진 설명을 입력하세요.
전송중...
사진 설명을 입력하세요.
>>> cur_price = 9980
>>> cur_price >= 5000 and cur_price < 10000
True
>>>
전송중...
사진 설명을 입력하세요.
>>> day1 = 10000
>>> day2 = 13000
>>> ((day2- day1) == (day1 * 0.3)) or ((day2-day1) > (day1 * 0.292))
True
>>>
전송중...
사진 설명을 입력하세요.
3) 파이썬 if 문
"위키북스의 현재가가 10,000원 이상이면 10주 매수"
"위키북스의 현재가가 9,000원 이하이면 10주 매도"
>>> wikibooks_cur_price = 11000
>>> if wikibooks_cur_price >= 10000:
print("Buy 10")
Buy 10
>>>
1) 조건문에는 if라는 키워드를 사용한다.
2) if 다음에는 '조건'이 존재하는데 이 조건이 참(True)이면 들여쓰기한 문장이 실행된다.
3) if 문의 끝에는 콜론(:)을 입력한다.
4) if 문의 조건이 참(True)일 때 실행되는 문장은 들여쓰기해야 한다.
####호가단위 만들어주는 if ~ elif 문
>>> price = 7000
>>> if price < 1000:
bid = 1
elif price >= 1000 and price < 5000:
bid = 5
elif price >= 5000 and price < 10000:
bid = 10
elif price >= 10000 and price < 50000:
bid = 50
elif price >= 50000 and price < 100000:
bid = 100
elif price >= 100000 and price < 500000:
bid = 500
elif price >= 500000:
bid = 1000
>>> bid
10
>>>
4-1) for와 range
>>> range(1,10)
range(1, 10)
>>>
파이썬 range에서 중요한 점은 시작 숫자와 끝 숫자를 지정했을 때 끝 숫자는 범위에 포함되지 않는다는 점입니다.
이를 확인하기 위해 range(1, 10)을 list()를 통해 리스트 객체로 변환해보면 리스트에 정말로
1부터 9까지만 저장돼 있음을 확인할 수 있습니다.
>>> list(range(1,10))
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>>
>>> for i in range(0, 11):
print(i)
0
1
2
3
4
5
6
7
8
9
10
>>>
>>> for i in list(range(0, 11)):
print(i)
0
1
2
3
4
5
6
7
8
9
10
>>>
4-2) for와 리스트
>>> interest_stocks = ["Naver", "Samsung", "SK Hynix"]
>>> for company in interest_stocks:
print("%s: Buy 10" % company)
Naver: Buy 10
Samsung: Buy 10
SK Hynix: Buy 10
>>>
4-4) for와 딕셔너리
키와 값을 모두 꺼내는 함수 : items()
for문도 매개변수를 두 개 입력해야 한다.
>>> interest_stocks = {"Naver":10, "Samsung":5, "SK Hynix":30}
>>> for company, stock_num in interest_stocks.items():
print("%s: Buy %s" % (company, stock_num))
SK Hynix: Buy 30
Naver: Buy 10
Samsung: Buy 5
>>>
--------------
>>> interest_stocks = {"Naver":10, "Samsung":5, "SK Hynix":30}
>>> for company in interest_stocks.keys(): #전달 받을 때 키 이름, 값을 받을 변수 두 가지 모두 필요하다.
print("%s: Buy %s" % (company, interest_stocks[company]))
#두 가지 %에 전달할 값은 튜플형태로 묶어줘야 한다. (딕셔너리[키명]) 과 같이 값을 꺼낼 수 도 있다.
SK Hynix: Buy 30
Naver: Buy 10
Samsung: Buy 5
>>>
# 사용자로부터 시작값과 끝값을 입력받는다. 거기에 대한 연속적인 숫자가 만들어진다.
사용자로부터 값을 2개 받아야 하니까 필요한 함수는 input 함수,
숫자를 연속적으로 만들거니까 필요한 함수는 range함수,
문자를 숫자로 변환해줄 int 함수
연속적인 숫자에서 짝수값만 출력, 또는 홀수값만 출력(리스트 안에 홀수가 무엇이 있는지 출력해라)
풀이 :
x1 = int(input("시작 값을 입력하세요(숫자) : "))
x2 = int(input("끝 값을 입력하세요(숫자) : "))
x3 = list(range(x1, x2+1))
for i in range(len(x3)):
if x3[i] % 2 != 0:
print(x3[i])
전송중...
사진 설명을 입력하세요.
반복문 연습
num = 0
while 1:
print(num, "test1")
if num == 10:
break
num += 1
num2 = 0
while num2 < 10:
num2 += 1
if num2 == 5: # 반복문 중 특정 값을 제외하고 싶을 경우에 사용
continue
print(num2, "test2")
전송중...
사진 설명을 입력하세요.
전송중...
사진 설명을 입력하세요.
### 1차원 리스트 #####
apart = [101, 102, 103, 104]
for i in apart:
print("Newspaper delivery :", i)
#### 2차원 리스트 #####
apart2 = [[101,102,103,104],[201,202,203,204],[301,302,303,304],[401,402,403,404]]
print(type(apart2[0]))
for i in range(len(apart2)):
for j in range(len(apart2)):
if apart2[i][j] == 203:
continue
else:
print("Newspaper delivery :", apart2[i][j])
전송중...
사진 설명을 입력하세요.
'PYTHON' 카테고리의 다른 글
20200420 - Python 파이썬 PyQt5 기본함수 사용 (0) | 2020.04.20 |
---|---|
20200410 - R 파이썬 함수, 클래스, 파일다루기, 실전 프로젝트, 파이썬과 COM (0) | 2020.04.10 |
20200408 - R 대시보드(flexdashboard, shiny 패키지, 보고서 다루기) (0) | 2020.04.08 |
20200406 - R 파싱하여 데이터 가져오기, 웹 페이지 크롤링, 트리맵, 워드클라우드, 차트 (0) | 2020.04.06 |
20200403 - R, 텍스트 마이닝(형태소 분석, 품사 추출, 빈도표 만들기, 시각화) (0) | 2020.04.03 |
댓글