
유튜브 장도강 채널의 파이썬 기초강의를 복습하고자 작성하였습니다.
단어 선택의 오류나 잘못 이해한 부분을 바로 잡아주신다면 적극 수렴하겠습니다!
주석을 잘 활용해야 코드에 대한 이해력을 높일 수 있으며 코드의 가독성을 높이고 팀 동료들이 코드의 동작 방식을 이해하도록 도울수 있다.
- '#' 뒤에 글을 작성하여 주석처리
- [ctrl+/]로 커서가 있는 곳을 주석처리
2-1)문장 가장 앞으로 이동하여 #을 통해 주석처리할 필요가 없어 용이하다.
2-2)여러 문장을 드래그한 후 적용해도 가능!
3.'''을 이용한 주석 처리
처음과 끝을 '''로 감싸면 전체 주석처리가 가능
- 영문 문자와 숫자를 사용할 수 있다.
- 대소문자를 구별한다.
- 문자부터 시작해야하며 숫자부터 시작하면 안된다.
- _(언더바)로 시작할 수 있다.
- 특수문자는 사용할 수 없다.
- 변수명 중간 띄어쓰기는 사용할 수 없다.
진입코인 = "리플"
진입가격 = 300
#단순 출력
print (진입코인)
print (진입가격)
#단순하지만 간결한 출력
print(진입코인, 진입가격)
#섹시한 출력
print(f"나는 오늘{진입코인}을 {진입가격}원에 구매하였다!")
print()
- 기본형태로 괄호 안에 출력할 변수를 작성
- 여러 개를 동시에 출력할 수 있다.
- 문자열 시작 전 f를 추가하고 {대괄호} 안에 변수명을 작성하면 편리하게 출력 가능
코인들 = ["리플", "비트코인", "이더리움", "도지코인", "솔라나", "폴리곤", "트론"]
#리스트 전체 출력
print(코인들)
#리스트 하나 출력
print(코인들[0])
#슬라이싱(리스트 부분 출력) : 0번째부터 몇개를 가져올 것이냐
print(코인들[0:2])
print(코인들[0:]) #끝까지
변수를 하나씩 선언하는 번거로움을 해결해준다.
[중괄호] 안에 선언할 변수들을 나열한다.
리스트 전체를 출력print[list이름] list뒤에 호출하고 싶은 배열을 쓰면 그 배열만 호출된다.print[list(배열)]
프로그래밍 언어에서 배열은 0부터 시작하니 항상 조심! 슬라이싱 : 리스트 부분 출력print[0:2]
0번 배열부터 몇 번째까지 출력할 것인가 -> [0,1,2]가 아닌 [0,1]이 출력됨 n번 배열부터 끝까지 출력print[n:] 처음부터 n번째 까지 출력print[:n]
주문내역 = ["비트코인"]
#append : 리스트에 새롭게 추가
주문내역.append("이더리움")
주문내역.append("도지코인")
print(주문내역)
#insert : 넣을 위치를 지정하여 추가
주문내역.insert(2, "이오스")
print(주문내역)
list에 새롭게 추가list.append("변수명") n번째 배열에 새로운 변수 추가list.insert(n,"변수명")
코인들 = ["비트코인", "이더리움", "솔라나", "리플"]
#clear() : 리스트 전체 삭제
코인들.clear()
#remove() : 데이터를 찾아서 삭제
코인들.remove("솔라나")
print(코인들)
# #pop() : 순서번호로 삭제
코인들.pop(0)
print(코인들)
#pop()을 이용하여 빠진 값도 받기
삭제한코인 = 코인들.pop(0)
print(코인들)
print(삭제한코인)
리스트 전체 삭제list.clear() 리스트 내 특정 배열 선택 삭제list.remove("삭제할 항목") n번째 배열을 뽑아냄list.pop(n)
.pop 후 출력하면 n번째 배열이 빠진 채 출력 pop을 통해 빠져나간 배열을 받을 변수var을 선언한 후 출력하면var = list.pop(n) print(list) print(var)
list엔 n번째 배열이 빠진 남은 list가 출력되고
var엔 빠진 n번째 배열이 출력된다.
#라이브러리/모듈 : 내가 필요한 것들을 모아 놓은 도구함
import math
#math.@@@로 사용
import time
time.sleep(5) #5초 후 print
print("안녕!")
#as를 통해 라이브러리를 자신이 원하는 글자로 변경
import time as t
t.sleep(5)
print("안녕!")
#from @@@ import * : @@@ 라이브러리의 모든것들을 갖고옴
from time import *
sleep(5)
print("안녕")
#from @@@ import $$$ : @@@ 라이브러리 중 $$$만 불러옴
from time import sleep
sleep(5)
사용법 : import 뒤에 library를 호출improt @@@(library) 호출한 library를 as 를 통해 임의의 변수로 선언 할 수 있다.import time as t t.sleep(5) print("안녕") from library import * 을 통해 library의 모든 기능을 호출 할 수 있다.from time import * sleep(5) print("안녕") from library import function 을 이용해 호출한 라이브러리 중 특정 기능만 호출할 수 있다.from time import sleep sleep(5) print("안녕")
#암호화폐 라이브러리
import ccxt
upbit = ccxt.upbit() #ccxt.@@@ : 전세계 암호화폐 거래소 목록
upbit.load_markets() #업비트 마켓 불러오기
print(upbit.symbols) #업비트 상장 종목
- ccxt : 암호화폐 라이브러리, 전세계 거래소 연결, 호출 가능
- 설치방법 : 터미널 -> pip install cxct
ccxt 라이브러리 안 거래소 중 업비트 호출하여 upbit에 저장upbit = ccxt.upbit() 라이브러리에서 upbit마켓 호출upbit.load_markets 업비트 상장 종목 출력print(upbit.symbols)
#딕셔너리
'''
리스트의 단점을 해소
리스트는 배열안의 나열로 명확하게 알 수 없어
{"키":값}의 형태로 알기 쉽도록 도와줌
'''
infos = {"symbol" : "XRP/KRW", "open":832, "high" : 841, "low":824, "close":826}
print(infos["high"])
import ccxt
upbit = ccxt.upbit()
upbit.load_markets()
infos = upbit.fetch_ticker("XRP/KRW")
print(infos) #업비트 XRP 호출 -> XRP딕셔너리가 나옴
print(infos['symbol']) #infos로 호출한 딕셔너리에서 키를 입력하면 값을 추출
print(infos["close"]) #종가
print(infos["high"]) #고가
- 배열 안에서 한 눈에 정보를 알아보기 힘든 lsit의 단점을 해소
- {"키":값}의 형태로 배열 안에 정보의 키를 알 수 있게 도와준다.
- 위의 infos는 딕셔너리의 일반적인 형태, dic["키"] 를 출력하면 값이 나온다
- ccxt 라이브러리를 호출하면 딕셔너리 형태로 호출되는데 다양한 키값을 호출하여 원하는 정보를 출력할 수 있다.
- upbit.fetch_ticker("XRP/KRW") : 리플의 키값을 받아 infos에 저장
- close : 종가이지만 코인의 거래시간은 24시간이니 호출한 현재가
- high : 고가
#산술 연산자
#더하기
print(4+2)
#빼기
print(4-2)
#곱하기
print(4*2)
#제곱
print(4**2)
#나누기
print(4/2)
#몫(//), 나머지(%)
print(5//2)
print(5%2)
#문자열 연산
print("안녕"+"반가워") #두 문장을 붙임
print("안녕"*5) #문자열은 n번 반복
#리스트 연산
a = ["비트코인", "리플"] + ["도지", "이더리움"] #두개의 리스트를 하나로 합침
print(a)
b = ["비트코인", "리플"]*5 #리스트를 n번 반복하여 출력
print(b)
- 문자열의 합, 곱 연산 가능
- 리스트의 합, 곱 연산 가능
#비교 연산자
# >, <, >=, >= , ==, !=
#bool형으로 결과값 -> True, False
- 간단한 비교연산자
- '='은 대입으로 쓰이기 때문에 같음을 표현하려면 '=='
- 비교연산의 결과값은 bool형으로 True, False로 나타난다.
#도지코인 가격 비교
import ccxt
upbit = ccxt.upbit()
doge_infos = upbit.fetch_ticker("DOGE/KRW")
# print(doge_infos)
#close = 종가이지만 fetch_ticker로 뽑아오는 당시의 가격이라 현재가
doge_price = doge_infos["close"]
print(doge_price > 200)
- 도지의 가격이 200보다 큰 가? (현재(23.6.10)는 90언저리.. ㅜㅜㅜ)
#도지코인 가격 비교
import ccxt
upbit = ccxt.upbit()
doge_infos = upbit.fetch_ticker("DOGE/KRW")
print(doge_infos)
#close = 종가이지만 fetch_ticker로 뽑아오는 당시의 가격이라 현재가
doge_price = doge_infos["close"]
print(doge_price)
print(doge_price > 200)
if doge_price < 200: #if문은 :으로 마무리 / 조건문이 참일때만 아래행 실행
print("doge가 싸다")
else: #if가 아닐경우 = doge_price >= 200 /이분법으로 나눌경우 if ~else문 사용
print("doge가 비싸다")
if doge_price > 900:
print("대코인시대")
elif doge_price > 600: #elif(else if)조건을 세분화 하기 위해 첫번째 if가 아니라면 새로운 조건을 제시
print("상승장의 시작.")
elif doge_price > 300:
print("조금만 더 ")
else:
print("근로소득이 최고지")
- if ~ : -> 기본형태 :(콜론)으로 마무리해야한다 :( :( :( :(
- if문은 참일 경우 하위 명령 실행
- else : -> else 역시 :(콜론)으로 마무리 한다. :) :) :) :)
- else는 if문이 참이 아닐 경우 작동 조건문이 이분법으로 나뉠 경우 if ~ else문을 사용한다.
- elif : -> :(콜론)으로 마무리 :o :o :o :o
- elif 는 else if의 약자로 첫번째 if가 아니라면 새로운 조건을 제시한다.
#반복문
"""
터미널 무한반복 탈출: ctrl + c
"""
#1초 쉬고 반복
import time
while True:
time.sleep(1)
print("ㅎㅎ")
- 위 코드를 실행하면 1초마다 ㅎㅎ이 계속해서 터미널에 반복되는데 이때 프로그램을 종료하고 다시 켜지말고 [ctrl + c]를 누르면 무한반복에서 탈출할 수 있다.
#반복문 : 위 조건문 반복
'''
호출을 while문 밖에서 하면 한번 호출된 가격을 반복해서 의미 없음
따라서 호출도 while문 안에서 해야함
'''
import time
#ccxt 라이브러리 호출
import ccxt
#업비트 도구함
upbit = ccxt.upbit()
while True:
time.sleep(1)
doge_inofs = upbit.fetch_ticker("DOGE/KRW")
doge_price = doge_inofs["close"]
if doge_price > 150:
print("도지 150원 돌파")
elif doge_price > 90:
print("도지 90원 돌파")
else:
print("일해라")
print(doge_price)
- time과 ccxt 두 개의 library 호출
- True로 인해 무한 반복하는 while문에 if로 조건문을 추가하여 도지코인이 특정가격에 도달하면 메세지를 출력하고 그 과정을 1초마다 반복한다.
- 첫번째 i문에서는 도지코인이 150원이 돌파했을 경우
- 두번째 elif문에서는 도지코인이 90원을 돌파하였을 경우
- 두 조건에 만족하지 못한다면 더 열심히 노동해야하라는 격려의 문구와 함께 while문이 반복된다.
- 중요) 도지 가격 호출을 while문 밖에서 실행할 경우 반복문에 진입하기 전 가격만 계속 나오기 때문에 반복문을 만든 의미가 없어진다. 따라서 도지 가격 호출 역시 while문 안에서 해주어야 한다.
#조건반복 while: 조건이 맞을 때만 반복
'''
조건문 if를 while로 변경하는 느낌 -> 참일때 반복
'''
time = 0
while time < 100:
print("Gaming")
time = time + 1 #time을 1씩 증가시킨다.
print("GAME OVER")
- 변수 time을 0으로 초기화 한후 100이 될때 까지 반복한다.
반복되는 과정에서 gamig이라는 문구가 계속 출력되고 그 후 변수 time에 1씩 더하여 100이 되면 반복문을 탈출한다.- 변수time은 반복문이 반복 될 때마다 초기화 되기 때문에 time 자체에 1을 더한다.
#꺼내오는 반복 (for)
import ccxt
upbit = ccxt.upbit()
symbols = ["BTC/KRW", "XRP/KRW", "DOGE/KRW"]
for symbol in symbols: #symbols리스트 안에 하나씩 꺼내오는데 꺼내오는걸 symbol로 저장
infos = upbit.fetch_ticker(symbol)
price = infos["close"]
# print(price)
print(f"{symbol}의 가격은 {price}원 입니다.")
- 궁금한 종목을 symbols 리스트에 추가한다.
- for symbol in symbols: -> symbols에 있는걸 하나씩 반복하는데 각각을 symbol로 저장
- infos = upbit.fetch_ticker(symbol) : 저장된 symbol을 upbit 라이브러리에 있는 종목과 매칭시킨 후 그 정보를 infos에 저장
- price = infos["close"] : infos엔 종목에 대한 딕셔너리가 저장되어 있으니 그 중 close값만 price에 저장한다.
#꺼내오는 반복 (for)
import ccxt
upbit = ccxt.upbit()
upbit.load_markets() #upbit상장한 전체 종목 호출
symbols = upbit.symbols #upbit.load_markets()로 호출한 종목중 symbols만 변수symbols에 저장
my_symbols = ["BTC/KRW", "XRP/KRW", "DOGE/KRW"] #전체 symbols가 아닌 내가 궁금한 symbols
for symbol in symbols: #symbols리스트 안에 하나씩 꺼내오는데 꺼내오는걸 symbol로 저장
if not symbol in my_symbols: #현재 symbol이 my_symbols에 속하지 않다면
continue #위 조건문을 만족하면 아래 반복문을 실행하지 않고 다음 반복으로 넘어감
infos = upbit.fetch_ticker(symbol)
price = infos["close"]
# print(price)
#도지 가격이 80원 이하이면 반복 중단
if symbol == "DOGE/KRW" and price < 80:
break
print(f"{symbol}의 가격은 {price}원 입니다.")
print("프로그램 종료")
- 궁금한 종목을 하나씩 추가하기 번거롭기때문에 전체를 호출한 후 my_symbols를 통해 for문 반복(1)과 더 편리하도록 바꾼다.
- upbit.load_markets() : upbit 상장 전체 종목 호출
- symbols = upbit.symbols : 호출한 종목을 변수 symbols에 초기화
- my_symbols = 전체 호출한 종목 중 반복문에 적용할 관심 종목을 분리
- for symbol in symbols : 호출한 전체 symbols 중 symbol이 있을 경우 반복
- if not symbol in my_symbols : 위의 for문을 내가 원하는 조건에 맞도록 조건문을 설정, my_symbols의 symbol이 아니라면
- continue : 아래 반복문을 실행하지 않고 다시 처음 for문으로 돌아감
- my_symbol이 맞다면 아래 반복문 실행
- infos = upbit.fetch_ticker(symbol) : infos에 symbol의 딕셔너리 저장
- price = infos["close"] : 딕셔너리 중 종가만 price에 저장
- 해당 조건에 맞추려면 BTC, XRP, DOGE만 조건문 통과
- if symbol == "DOGE/KRW" and price < 80 : 하지만 심볼이 도지가 맞고 가격이 80 언더라면 break하는 조건식을 추가한다.
- 현재가격 기준 도지는 80원은 넘기 때문에 list의 순서인 btc, xrp의 가격만 출력되고 doge는 if문에 걸려 프로그램이 종료된다.
- 중요) continue : 조건문이 참이 아닐시 처음으로 돌아가 수행한다.
- 중요) break : 조건문이 참이 아닐시 바로 반복문 종료
- 중요) my_symbols 리스트의 순서가 DOGE가 맨 앞이면 반복문이 빨리 끝날지 궁금하여 순서를 바꾸어 보았지만 결과가 바뀌지 않았다. my_symbols의 순서가 아닌 infos에 저장된 upbit 딕셔너리 순서로 적용되는 것 같음