파이썬 개발환경 만들기파이썬 개발환경 만들기
1.파이썬을 다운받는다
2.Visual Studio Code 툴을 설치한다.
3.VS Code 개발 환경설정을 한다.
...
파이썬 기초 문법
- 파이썬은 인터프리터 언어이다.
- 파이썬은 모든 것이 객체이다.
- 파이썬은 변수의 타입이 없다. 타입 추론을 지원한다.
변수
# -*- coding: utf-8 -*- a = 1 b = 1.2 c = "Text" d = 'Text' e = True f = False g = ''' 안녕하세요. 반갑습니다. 하하하하하하핳하하하하하하하하하하 ''' print(type(a)) #int print(type(b)) #float print(type(c)) #str print(type(d)) #str print(type(e)) #bool print(type(f)) #bool print(type(g)) #str
연산자
a = 3 b = 4 print(a+b) print(a-b) print(a*b) print(a/b) print(a%b) #3 print(a//b) #몫 0 print(2**32) #2의 32승 한번에 주소 4개 이동 print(2**64) #1800경 64bit = 8byte 한번에 주소 8개 이동
문자열
a = '홍길동'
print(a)
print("="*50) #문자열을 연산해서 사용할 수 있다.
b = "가나다라마" #CharSequence : 문자를 순차적으로 만드는거
print(len(b)) #글자길이 출력
print(b[0])
print(b[-1]) # = print(b[4])
print(b[0:3]) #0부터 3번'전'까지
print(b[1:]) #마지막 데이터가 동적일 경우 마지막 숫자 안적으면 된다.
print(b[:3]+"...")#나머지 글자 ...으로 만들기
# '-' 을 기준으로 문자 자르기 :
test = "가나-다-라"
print(test[0:2])
print(test.find("-")) #위치 찾기 함수
print(test.find("-",3)) #찾는 위치의 시작번지
print(test.rfind("-")) #오른쪽(뒤)에서 부터 찾는다
예제
#문제
phone1 = "051-222-3333"
phone2 = "02-7777-9999"
#문제1 끝번호 4자리 찾기
print(phone1[phone1.rfind("-")+1:])
print(phone2[phone2.rfind("-")+1:])
#문제1 풀이. 변수화시켜서 간략하게 만들기
si1 = phone1.rfind("-")+1
si2 = phone2.rfind("-")+1
print(phone1[si1:])
print(phone2[si2:])
#문제2 가운데 번호 찾아내기
print(phone1[phone1.find("-")+1:phone1.rfind("-")])
print(phone2[phone2.find("-")+1:phone1.rfind("-")])
#문제2 풀이
fi = phone1.find("-")
li = phone1.rfind("-")
print(phone1[fi:li])
배열
#배열
list1 = [1,2,3,4]
list2 = [5,6,7,8]
print(list1[0])
print(list1[-1])
#일차원데이터 = 백터
list3 = list1 + list2
print(list3)
#이차원데이터 = 메트릭스
#방법1
ist4 = [list1 + list2]
#방법2
list4 = [[list1] + [list2]]
print(list4)
#배열에 데이터 추가하기
#방법1
list2.append(9)
#방법2
list2 = list2 + [9]
print(list2)
#요소 제거
print("="*50)
arr = [5,6,7,8]
arr.remove(8) #8이라는 데이터를 삭제
print(arr) #[5,6,7]
del arr[0] #0번지 데이터를 삭제
print(arr) #[6,7]
#끝에 추가
print("="*50)
arr2 = [5,6,7,8]
arr2.append(9)
print(arr2)
#원하는 위치에 추가
print("="*50)
arr3 = [5,6,7,8]
arr3.insert(2,500)
print(arr3)
#정렬
print("="*50)
arr4 = [8,5,1,3]
#오름차순 정렬
arr4.sort()
print(arr4)
#내림차순 정렬
arr4.reverse()
print(arr4)
반복문
#반복문
#for문에서 print 4칸 들여쓰기 문법 지키기
print("="*50)
arr5 = [1,3,5,7]
for i in arr5:
print(i)
print("="*50)
for i in range(0, 6): #start : 0, end : 6 -> end 직전까지
print(i)
튜플
#tuple #tuple은 변경 불가능한 데이터이다. #옵저버 : 기존 데이터를 기억하기 때문에 변경을 감지할 수 있다. #깊은복사 : 변경할 때 메모리 공간 복사 #tuple로 만들면 새로만든 메모리 주소만 비교하면된다. tuple1 = (1,2,3,4) print(tuple1) print(tuple1[0]) print(type(tuple1))
딕셔너리
#딕셔너리(사전) : 자바스크립트와 제이슨과 구조 똑같아서 파싱할 필요 없다.
#{ "key" : value } 딕셔너리
#{ key : value } 자바스크립트
#{ "key" : value } 제이슨
dic1 = {"username":"sai", "password":"1234","age":19}
print(dic1)
print(type(dic1))
print(dic1["password"]) #홑따옴표로 써도 된다.
print("="*50)
users = [
{"username":"sai", "password":"1234","age":19},
{"username":"choi", "password":"1234","age":30}
]
print(users[1]["age"])
for user in users:
print(user["username"])
조건문
# 컨디션
isChecked = False
if isChecked:
print("안녕")
else:
print("굿바이")
num = 10
if num > 10:
print("만점")
elif num > 5: #elif = else if
print("평균")
else:
print("미만")
# or, and
if True or False:
print("투루입니다.")
if True:
#pass : 조건안에 실행문으로 아무거도 안적고 싶을 때
pass
#조건부 표현식
score = 80
message = "success" if score > 60 else "faile" #score가 60이상이면 "success" 그 외에는 "faile"
print(message)
함수
#함수 #함수선언 def #함수는 오버로딩 할 수 없다. #선택적 매개변수(디폴트로 초기화 가능) #전역변수를 함수 내부에서 사용하려면 global def add(n1, n2): #타입이 없다. -> 추상화 필요없음 #print(n1+n2) return n1+n2 #리턴 안적고 프린트만해도 된다. print(add(1,3)) def minus(n1,n2=5): #default값 넣어줄 수 있다. return n1-n2 #오버로딩 할 수 있을까? -> No! : 먼저 선언한 함수가 없어진다. #def minus(n1): # return n1 print(minus(10)) print(minus(10,9)) #일급객체 : 어디안에 꼭 포함 안되도 되는 것, 최상위에 존재할 수 있어야한다. sum = 20 def vartest(): num = 30 print(num) vartest() def vartest2(): sum = 10 print(sum) vartest2() def vartest3(): print(sum) vartest3() def vartest4(): global sum #전역변수 sum 사용할 수 있다. -> 타입이 없어서 가능 sum = sum + 1 #21 vartest4() print(sum)
모듈/패키지
#모듈 : 변수, 함수, 클래스 모아둔 파일(=.java)
#패키지 : 여러 모듈을 하나의 디렉토리로 모아둔 것
def sayHello():
print("Hello everyone")
num = 10
import hello as h #파일명에 별칭 붙여줄 수 있다. #from hello import sayHello, num #콤마로 여러가지 불러올 수 있다. from hello import * #전부 가지고 온다. num =50 h.sayHello() sayHello() print(num) print(h.num)
#from 파일명/폴더명 import 파일명, 변수, 클래스 함수 #의존성 관리 도구 PIP import sys from http import server #이미 import된 모듈 #print(sys.modules) #기본 내장 라이브러리 #문자길이 len #list = [1,2,3] #print(len(list)) print(sys.path)
클래스
#클래명 : 파스칼 표기법 #클래스를 메모리에 띄우려면 개발자가 직접 띄어줘야 한다.(u) class User: username = "sai" password = "1234" u = User() # 클래스 메모리에 띄워진다. print(u.username)
생성자
#생성자
class User:
#파이썬은 여기에 파라미터 선언 못함(다른 값이 된다.)
#생성자의 self는 객체 생성시 자동 주입된다.
#__init__ 이 함수가 생성자 (오버로딩 불가) -> 디폴드값 넣을 수 있다.
def __init__(self, username, password="1234"): #User 객체 만들때 무조건 생성
self.username = username #자바의 this = self
self.password = password
u = User("sai","1234")
u1 = User("cos")
print(u.username)
#클래스를 딕셔너리로 바꿔준다. 생성자가 있어야 가능하다.
print(u.__dict__)
# 함수하나 들고 있는 클래스
class Animal:
def sound(self):
print("동물소리")
class Dog(Animal):
def sound(self):
print("강아지소리")
class Dog(Animal):
pass
d = Dog()
d.sound()
a = Animal()
a.sound()
예외처리
#예외처리 : 통신할 때는 무조건 필요
#예외는 항상 런타임시에 일어난다.
try:
print(2/0)
except Exception as e: #Excetpion : 최상위 클래스(부모)
print(e) #이 부분에서 로그를 남길 수도 있고 개발자에게 문자 메시지를 남길 수도 있다.
finally: #무조건 실행
print("끝")
json 데이터 요청
pip requests 다운로드 받는 방법
VS Code 터미널에서 pip install requests
#json 데이터 요청하기 #Buffer로 받으면 데이터를 가변형태로 받을 수 있다. import requests #통신에 필요한 라이브러리 url = ''' https://yts.mx/api/v2/list_movies.json?sort_by=rating&page_number=1&limit=2 ''' #홑따옴표 세개 response = requests.get(url) #print(response.status_code) #response[200] / 200 #print(response.text) #json text #print(response.content) #print(response.json) responseDic = response.json() #딕셔너리로 받는다. movies = responseDic["data"]["movies"] print(type(movies)) movie1 = movies[0] movie1Title = movie1["title"] movie1Rating = movie1["rating"] print(movie1Title) print(movie1Rating)
예제
Q.20개의 영화 데이터의 제목, 평점, 러닝시간, 미디엄-커버이미지를 반복문 돌려서 출력하시오.
import requests
url = '''
https://yts.mx/api/v2/list_movies.json?sort_by=rating&page_number=1&limit=20
'''
response = requests.get(url)
responseDict = response.json() # 딕셔너리 타입으로 변환
movies = responseDict["data"]["movies"]
for movie in movies:
print("제목: " + movie["title"])
print("평점: " + str(movie["rating"]) + "점")
print("러닝시간: " + str(movie["runtime"]) + "분")
print("사진: " + movie["medium_cover_image"])
print("=" * 50)