![python](https://www.saichoiblog.com/wp-content/uploads/2021/09/python-320x180.jpg)
파이썬 개발환경 만들기파이썬 개발환경 만들기
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)