PYTHON

파이썬 기초 문법

python
파이썬 개발환경 만들기파이썬 개발환경 만들기 1.파이썬을 다운받는다 2.Visual Studio Code 툴을 설치한다. 3.VS Code 개발 환경설정을 한다. ...

파이썬 기초 문법

  1. 파이썬은 인터프리터 언어이다.
  2. 파이썬은 모든 것이 객체이다.
  3. 파이썬은 변수의 타입이 없다. 타입 추론을 지원한다.

변수

# -*- 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)

 

최신글