문자열 다루기
1. replace
- 문장안에 글자를 바꿔주는 메서드
a = '오늘 날씨는 흐림입니다.'.replace("흐림", "맑음")
print(a) # 오늘 날씨는 맑음입니다.
2. find
- 문장안에 글자를 찾아주는 메서드
b = "hello world".find('world')
print(b) # 6 ( world의 시작점인 w가 index 6에 있기 때문에 6이 출력됨 )
3. split
- 문자열을 분리시켜주는 메서드
# split() 괄호안에 구분자를 넣어주면 구분자를 따라 문자열을 분리시켜준다
c = '동해물과 백두산이 마르고 닳도록'.split()
print(c) # ['동해물과', '백두산이', '마르고', '닳도록']
d = '동해물과:백두산이:마르고:닳도록'.split(':')
print(d) # ['동해물과', '백두산이', '마르고', '닳도록']
4. strip
- 문자열 공백 제거 메서드
text = ' text '
print("[" + text.rstrip() + "]") # [ text]
print("[" + text.lstrip() + "]") # [text ]
print("[" + text.strip() + "]") # [text]
문자열 포매팅
1. format 메서드
# 문자열에 인덱스를 설정해주면 format()에 들어있는 인덱스가 문자열 안에 삽입됨
hello = 'Hello {0} {1} {2}'.format('apple', 'banana', 'pen')
print(hello) # Hello apple banana pen
# 인덱스 번호를 생략도 가능하다
hello = 'Hello {} {} {}'.format('apple', 'banana', 'pen')
print(hello) # Hello apple banana pen
2. f-string
shoes = '나이키'
size = 270
print(f'제 신발은 {shoes}이고 size는 {size}입니다.') # 제 신발은 나이키이고 size는 270입니다.
리스트 다루기
1. 리스트 데이터 삭제 / del , pop(), remove()
fruits = ['apple', 'orange', 'mango']
del fruits[1]
print(fruits) # ['apple', 'mango']
fruits = ['apple', 'orange', 'mango']
fruits.pop(1)
print(fruits) # ['apple', 'mango']
fruits = ['apple', 'orange', 'mango']
fruits.remove('orange')
print(fruits) # ['apple', 'mango']
2. 리스트 정렬 / sort()
numbers = [0,1,2,7,3]
numbers.sort() # 오름차순 정렬
print(numbers) # [0, 1, 2, 3, 7]
numbers.sort(reverse=True) # 내림차순 정렬
print(numbers) # [7, 3, 2, 1, 0]
3. enumerate / 리스트에 인덱스 부여
titles = ['출석', '출석인증', '출석이요']
for index, title in enumerate(titles, 1):
print(f'{index}번째 글입니다. 제목: {title}')
#1번째 글입니다. 제목: 출석
#2번째 글입니다. 제목: 출석인증
#3번째 글입니다. 제목: 출석이요
리스트 내포
- [ 표현식 for 변수 in 순회가능한 데이터 ]
# for 사용
nums = [i for i in range(5)]
print(nums) # [0, 1, 2, 3, 4]
nums2 = [100,200,300]
double_nums = [i * 2 for i in nums2]
print(double_nums) # [200, 400, 600]
- [ 표현식 for 변수 in 순회가능한 데이터 if 조건식]
# if 사용
nums3 = [i for i in range(10) if i%2 == 0]
print(nums3) # [0, 2, 4, 6, 8]
nums4 = [100,200,300,400,500]
double_nums2 = [i * 2 for i in nums4 if i >= 300]
print(double_nums2) # [600, 800, 1000]
리스트 내포 실습문제
# 실습문제 1
# 리스트 내포를 사용해서 word_list에 들어있는 첫글자가
# a인것만 뽑아서 list 생성
word_list = ['apple', 'watch', 'apolo','abocada']
#리스트 내포 사용전
result = []
for word in word_list:
if word[0] == 'a':
result.append(word)
print(result) # ['apple', 'apolo', 'abocada']
# 리스트 내포 사용
result2 = [word for word in word_list if word[0] == 'a']
print(result2) # ['apple', 'apolo', 'abocada']
# 실습문제 2
# 리스트 내포를 사용해서 None을 없애본다
word = ['오메가3', 'None', '비타민C500', 'None', '홍삼절편']
# 리스트 내포 사용전
result = []
for i in word:
if i != 'None':
result.append(i)
else:
result.append('')
print(result) # ['오메가3', '', '비타민C500', '', '홍삼절편']
# 리스트 내포 사용
result2 = [i if i != 'None' else '' for i in word] # else가 사용되면 if문을 맨앞에 작성해야한다
print(result2) # ['오메가3', '', '비타민C500', '', '홍삼절편']
할당과 복사
- 파이썬에선 변수에 데이터가 저장되는것이 아니라
변수가 데이터를 가르키는 것이다.
x = [1,2,3,4,5]
y = x
y[2] = 0
# x를 y로 복사했다고 생각하고 y의 인덱스 2번을 0으로 바꿨지만
# 변수의 주소가 같으므로 두개의 변수값이 동일하게 나온다.
print(y) # [1, 2, 0, 4, 5]
print(x) # [1, 2, 0, 4, 5]
# 두 변수의 주소는 동일하게 나온다
print(id(y)) # 2826249916032
print(id(x)) # 2826249916032
리스트 복사방식
- 리스트를 복사할 땐 copy() 함수를 사용해야함
- 중첩 리스트를 복사할땐 copy 모듈의 deepcopy()를 사용해야함
a = [5,6,7,8,9]
b = a.copy()
print(a, b) # [5, 6, 7, 8, 9] [5, 6, 7, 8, 9]
# 주소가 다르게 찍힌다.
print(id(a), id(b)) # 2079301552960 2079301553024
# 중첩 리스트 복사방식
import copy # copy 모듈을 사용해서 deepcopy()를 사용해야한다
c = [[1,2], [3,4,5]]
d = copy.deepcopy(c)
d[0][0] = 0
print(c) # [[1, 2], [3, 4, 5]]
print(d) # [[0, 2], [3, 4, 5]]
문자열 실습문제
# 소요시간을 모두 분으로 바꾸는 프로그램 작성
time = input("시간을 입력하세요 : ")
# 1. 분만 있는경우 ex) 30분
# 2. 시간만 있는 경우 ex) 2시간
# 3. 시간과 분만 있는경우 ex) 2시간 30분
if time.find('시간') == -1 : # find 함수에 -1 값을 주면 값을 찾을 수 없다 판단
# 분만 있는경우
result = int(time.split('분')[0]) # 만약 30분이라고 입력을 했다면 ['30',''] 으로 표시가 되므로
else: # 첫번째 리스트를 출력하기위해 [0]을 넣어줌
if time.find('분') == -1:
#시간만 있는경우
result = int(time.split('시간')[0]) * 60 # 시간은 60분이므로 입력한 시간에 60을 곱해준다
else:
# 시간과 분이 있는 경우
sub = time.split('시간')
result = int(sub[0]) * 60 + int(sub[1].split('분'))
print(result)
매개변수
위치 매개변수(Positional Parameter)
- 가장 기본적인 매개변수
- 함수를 호출할 때 순서대로 데이터를 넘겨줘야함
- 다른 매개변수와 함께 쓸 때는 항상 맨 앞에 써야한다
# 함수 정의
def my_func(a,b):
print(a,b)
#함수 호출
my_func(1,2)
기본 매개변수 (Default Parameter)
- 매개변수의 기본적인 값
- 함수를 정의할 때 매개변수의 기본 값을 지정할 수 있다.
# 함수정의
def post_info(title, content='내용없음'):
print('제목:', title)
print('내용:', content)
# 함수호출
post_info('출석합니다.')
# 제목 : 출석합니다.
# 내용 : 내용없음
키워드 매개변수 (Keyword Parameter)
- 함수 호출 시 키워드를 붙혀 호출한다
- 매개변수의 순서를 지키지 않아도 된다
# 함수정의
def post_info(title, content):
print('제목:', title)
print('내용:', content)
# 함수호출
post_info(content='재밌다', title='코딩')
# 제목 : 코딩
# 내용 : 재밌다
위치 가변 매개변수 (Positional Variable Length Parameter)
- 가변 매개변수 = 개수가 정해지지 않은 매개변수
- 매개변수 앞에 * < 붙음. ( 튜플형 )
# 함수정의1
def print_fruits(*args):
print(args)
# 함수정의2
def print_fruits(*args):
for arg in args:
print(arg)
# 함수호출
print_fruits('apple','orange','mango')
#apple
#orange
#mango
키워드 가변 매개변수 (Keyword Variable Length Parameter)
- 가변 매개변수 = 개수가 정해지지 않은 매개변수
- 매개변수 앞에 ** < 붙음 ( 딕셔너리형 )
# 함수정의1
def comment_info(**kwargs):
print(kwargs)
# 함수정의2
def comment_info(**kwargs):
for key, value in kwargs.items():
print(f'{key} : {value}')
# 함수호출
comment_info(name='파린이', comment='감사합니다')
# name : 파린이
# comment : 감사합니다
람다함수
람다 함수란
- 간단한 형태의 함수
- 다른 함수의 인자(argument)로 넣을 수 있음
- 코드가 간결해지고, 메모리가 절약됨
# 기존 함수
def minus_one(a):
return a-1
# 람다 함수
lambda a : a-1
# 람다 함수 호출방법
# 1. 함수 자체 호출
print((lambda a:a-1)(10))
# 2. 변수에 람다를 담아서 호출
minus_one_2 = lambda a : a-1
print(minus_one_2(100))
#람다함수에서 if 문 사용
# 기존 함수
def is_positive_number(a):
if a > 0:
return True
else:
return False
# 람다 함수
lambda a : True if a > 0 else False
# 람다 함수 호출 (1)
print((lambda a : True if a > 0 else False)(-2))
# 람다 함수 호출 (2)
is_positive_number = lambda a : True if a > 0 else False
print(is_positive_number(2))
map
- 기존 리스트를 수정해서 새로운 리스트를 만들 때 사용
사용방법
# 사용방법
map(함수, 순서가 있는 자료형)
map(int, ['3','4','5','6']
list(map(함수, 순서가 있는 자료형)
list(map(int, ['3','4','5','6'])
# - 예제
# 리스트 모든 요소의 공백 제거
items = [' 로지텍 마우스 ',' 앱솔 키보드 ']
# 1) for문 사용 경우
for i in range(len(items)):
items[i] = items[i].strip()
print(items)
# 2) map 사용
def strip_all(x):
return x.strip()
items = list(map(strip_all, items))
# 3) 람다 사용
items = list(map(lambda x : x.strip(), items))
print(items)
filter
- 기존 리스트에서 조건을 만족하는 요소를 뽑고 싶을 때
# 사용방법
# filter(함수, 순서가있는 자료형)
def func(x):
return x < 0
print(list(filter(func, [-3,-2,0,5,7])))
# -예제
# 리스트에서 길이가 3이하인 문자들만 필터링
animals = ['cat','tiger','dog','bird','monkey']
# 1) for 사용
result = []
for i in animals:
if len(i) <= 3:
result.append(i)
print(result)
# 2) 필터 사용
def word_check(x):
return len(x) <= 3
result = list(filter(word_check, animals))
print(result)
# 3) 람다 사용
result = list(filter(lambda x : len(x) <= 3, animals))
print(result)
클래스와 객체
절차지향
- 기능들을 어떤 순서대로 처리할 것인가에 초점을 맞춤
객체지향
- 객체가 중심이 되고, 객체를 정의하고 객체간 상호작용에 초점을 맞춤
# Unit클래스
class Unit:
"""
속성 : 이름, 체력, 방어박, 공격력
"""
def __init__(self, name, hp, shield, demage):
self.name = name
self.hp = hp
self.shield = shield
self.demage = demage
print(f"[{self.name}](이)가 생성 되었습니다.")
# 객체를 출력할 때 호출되는 메서드
def __str__(self):
return f"[{self.name}] 체력: {self.hp} 방어막: {self.shield} 공격력: {self.demage}"
# 객체 생성
probe = Unit("프로브", 20, 20, 5) # [프로브](이)가 생성 되었습니다.
zealot = Unit("질럿", 100, 60, 16) # [질럿](이)가 생성 되었습니다.
dragoon = Unit("드라군", 100, 80, 20) # [드라군](이)가 생성 되었습니다.
# 객체 호출
print(probe) # [프로브] 체력: 20 방어막: 20 공격력: 5
print(zealot) # [질럿] 체력: 100 방어막: 60 공격력: 16
print(dragoon) # [드라군] 체력: 100 방어막: 80 공격력: 20
여러가지 메서드
데이터 베이스
데이터 베이스 구성요소
- 데이터 베이스 ( database ) : 테이블의 집합
- 테이블 ( table ) : 행의 집합
- 행 ( row ) : 한 단위의 데이터 기록
- 열 ( column ) : 데이터의 항목
DBMS ( Database Management System )
- 데이터 베이스를 관리해주는 프로그램
SQL 이란
- Structured Query Language
데이터 베이스를 관리하기 위해 사용되는 언어
SQLite 데이터 타입
데이터 타입 | 설명 |
Integer | 정수 |
real | 실수 |
text | 문자열 |
null | null 값 ( 데이터 없음 ) |
DDL ( Data Definition Language ) / CREATE, ALTER, DROP
- 데이터 정의 언어
# CREATE TABLE 테이블명 (컬럼1 데이터타입, 컬럼2 데이터 타입);
CREATE TABLE post (id integer, title text);
# 제약 조건
# 1. primary key / 레코드를 구분짓는 값 유일한 값.
# 2. not null / 빠지면 안되는 값
# 3. default / 아무런 데이터가 없으면 데이터에 들어가는 기본 값
CREATE TABLE post (id integer primay key,
title text not null default '제목없음',
content text default '내용없음');
# 4. unique / 중복이 될 수 없는 유일한 값
# autoincrement << 자동 증가 옵션
CREATE TABLE user (id int primary key autoincrement,
nickname text unique);
DML ( Data Manipulation Language ) / INSERT, SELECT, UPDATE, DELETE
- 데이터 조작 언어
# INSERT
# 데이터(행) 추가 명령
# INSERT INTO 테이블명 (컬럼1, 컬럼2) VALUES (값1, 값2);
INSERT INTO post (title, content) VALUES ('코딩', '재밌어요);
# SELECT
# 데이터 조회 명령
# SELECT * FROM 테이블명
SELECT * FROM post
# WHERE / SELECT의 조건
# SELECT * FROM WHERE 조건;
SELECT * FROM post WHERE id=3;
SELECT * FROM post WHERE title like 'startcoding%';
SELECT title content FROM post WHERE id BETWEEN 1 an 10;
SELECT * FROM user address IN ('seoul', 'busan', daegou');
# ORDER BY / 정렬 ASC(오름차순) DESC(내림차순)
# SELECT * FROM 테이블 명 ORDER BY 컬럼명 [ASC|DESC]
SELECT * FROM post ORDER BY title ASC
# UPDATE
# 데이터 수정 명령
#UPDATE 테이블명 SET 컬럼명 = 값, 내용 WHERE 조건식;
UPDATE post SET title = '제목 수정중',
content = '본문 수정중'
WHERE id = 3;
# DELETE
# 데이터 삭제 명령
# DELETE FROM 테이블명 WHERE 조건식;
DELETE FROM post WHERE id = 3;
GROUP BY, JOIN
- 테이블 그룹화명령
# GROUP BY
# 그룹화해서 계산하는 명령
# SELECT count(*) FROM 테이블명 GROUP BY 컬럼명;
SELECT gender, count(*) FROM user GROUP BY gender;
SELECT gender, avg(age) FROM user WHERE age > 20 GROUP BY gender;
# JOIN
# 두 테이블을 묶어서 조회할 때
# SELECT * FROM 테이블명1 INNER JOIN 테이블2 WHERE 조건;
SELECT * FROM post INNER JOIN user WHERE post.author = user.email;
파이썬 SQLite3 사용법
사용순서
- DB 파일열기
- 커서 생성
- SQL명령 실행
- 커밋 또는 롤백
- DB닫기
INSERT
# 모듈 추가
import sqlite3
# 데이터베이스 열기
conn = sqlite3.connect('myvenv/Chapter05/sql.ddl.db')
# 커서 생성
cur = conn.cursor()
# SQL 명령 작성
CREATE_SQL = """
CREATE TABLE IF NOT EXISTS Item(
id integer primary key autoincrement,
code text not null,
name text not null,
price integer not null
)
"""
# INSERT
INSERT_SQL = "INSERT INTO item(code, name, price) VALUES(?,?,?)"
# SQL 명령 실행
cur.execute(INSERT_SQL, ('A00001', '게이밍마우스', 380000))
# 데이터 여러개 한번에 추가
data = (
('A00001', '게이밍마우스', 380000),
('A00002', '최신형 스마트폰', 800000),
('A00003', '가성비 노트북', 650000)
)
cur.executemany(INSERT_SQL, data)
#커밋 : INSERT, UPDATE, DELETE 는 커밋을 해야 데이터베이스에 반영이된다.
conn.commit()
# 데이터 베이스 닫기
conn.close()
SELECT
# 모듈 추가
import sqlite3
# 데이터베이스 열기
conn = sqlite3.connect('myvenv/Chapter05/sql.ddl.db')
# 커서 생성
cur = conn.cursor()
# SQL 명령 작성
SELETC_SQL = "SELECT * FROM item LIMIT 2"
# SQL 명령 실행
cur.execute(SELETC_SQL)
rows = cur.fetchall()
for row in rows:
print(row)
# 데이터 베이스 닫기
conn.close()
UPDATE
# 모듈 추가
from select import select
import sqlite3
# 데이터베이스 열기
conn = sqlite3.connect('myvenv/Chapter05/sql.ddl.db')
# 커서 생성
cur = conn.cursor()
# SQL 명령 작성
UPDATE_SQL = "UPDATE Item SET price = 650000 where code = 'A00002';"
# SQL 명령 실행
cur.execute(UPDATE_SQL)
conn.commit()
# 데이터 베이스 닫기
conn.close()
DELETE
# 모듈 추가
from select import select
import sqlite3
# 데이터베이스 열기
conn = sqlite3.connect('myvenv/Chapter05/sql.ddl.db')
# 커서 생성
cur = conn.cursor()
# SQL 명령 작성
DELETE_SQL = "DELETE FROM Item WHERE code='A00002';"
# SQL 명령 실행
cur.execute(DELETE_SQL)
conn.commit()
# 데이터 베이스 닫기
conn.close()
3주차를 마치며 ...
함수와 클래스를 속성으로 배우려니 이해하기 어려운부분이 많았던 것 같다
코딩은 반복숙달.. 복습만이 살길이요 .. 따라치기만 하지말고 이해를 하도록 노력해야겠다
DB부분은 전 직장에서 하던거라 어렵지 않다 연습해야 할 것은 select시 원하는 값을 출력 되도록
반복문을 어떻게 작성해주느냐 정도? 반복문은 왜이렇게 해도해도 잘 안되는지 ..
더 노력하자 ~
'패스트캠퍼스' 카테고리의 다른 글
[패스트캠퍼스] 파이썬 강의 6주차 / Django, CSS, 템플릿 태그, 장고 배포, gunicorn (0) | 2022.10.03 |
---|---|
[패스트캠퍼스] 파이썬 강의 5주차 / CSS 속성, Git, Django (2) | 2022.09.24 |
[패스트캠퍼스] 강의 4주차 / 정규표현식, 프로세스 , Html, CSS (1) | 2022.09.17 |
[패스트캠퍼스] 파이썬 강의 2주차 / 함수, 튜플, 딕셔너리, 클래스, 생성자, 상속, 오버라이딩, 모듈, 패키치, 파일입출력, 예외처리 (0) | 2022.09.02 |
[패스트캠퍼스] 파이썬 강의 1주차 / 파이썬설치(window, mac), 가상환경, 자료형, 변수, 연산, 제어문, 리스트, 반복문 (0) | 2022.08.29 |