728x90
반응형

OPEN WEATHER를 이용해 날씨 API 불러오기에 이어서 이번엔 유튜브 API 불러오기 도전!

저번에 진행한 프로젝트에서 전기차 관련 영상을 볼 수 있는 페이지를 만들기 위하여 유튜브 API를 사용해 보았다.

내가 구현한 기능은 API를 사용하여 영상을 불러오고 지정된 키워드를 선택하면 해당 키워드와 관련된 영상이 나오는 것이였다.

솔직히 API를 받아와서 영상받아오는건 쉬웠는데 영상 보는 페이지 꾸미는게 더 어려웠다...?

어쨌든 API 불러오는 방법 포스팅 시작!

 

유튜브 API 받아오기

1. Google Cloud 접속하기

https://console.cloud.google.com/welcome?project=youtube2-402602

 

Google 클라우드 플랫폼

로그인 Google 클라우드 플랫폼으로 이동

accounts.google.com

 

2. API 및 서비스 > 프로젝트 선택 > 새 프로젝트 생성

 

 

3. 프로젝트 생성 후 검색 창에 YouTube Data API v3 검색 > API 사용 선택

 

4. API 키 생성하기

사용자 인증 정보 만들기 > API 키를 선택하면 키가 발급된다.

나중에 영상을 불러올 주소를 받으면 해당 주소에 발급받은 키를 넣으면 된다.

 

5. YouTube API 통해 동영상 리스트 가져오기

사용 설정된  API 및 서비스 > YouTube Data API v3 > API 탐색기에서 사용해 보기

6. 카테고리에서 동영상 > list 선택 후 우측에 사용해 보기 

 

7. API 통신 테스트

요청 파라미터에 값을 입력 후 EXECUTE 선택

  • part : snippet으로 설정하는 경우 영상의 제목, 설명 등을 식별하는 다른 속성을 포함하여 불러온다.
  • chart : mostPopular로 설정할 경우 가장 인기있는 동영상을 불러온다.
  • maxResults : 불러올 영상의 최대 갯수를 설정한다.
  • regionCode : 지정된 지역에서 동영상을 선택한다.

 

아래와 같이 데이터가 잘 불러와 지는 걸 볼 수 있다.

 

나중에 자신이 원하는 곳에 영상을 불러오고 싶다면 아래의 주소에서 [YOUR_API_KEY]에 자신이 발급받은 API키를 넣어 입력하면 된다. 위에서 본 데이터와 동일한 정보의 데이터가 JSON 형태로 나온다.

※ 아래의 주소는 이전에 변수를 입력한 창에서 HTTP를 선택하면 GET 방식의 동일한 주소가 나온다.

https://youtube.googleapis.com/youtube/v3/videos?part=snippet%20&chart=mostPopular&maxResults=10&regionCode=kr&key=[YOUR_API_KEY]


Iframe 사용하여 영상 불러오기

1. IFrame Player API 접속 > 플레이어 매개변수 표시

https://developers.google.com/youtube/youtube_player_demo?hl=ko

 

YouTube 플레이어 데모  |  YouTube IFrame Player API  |  Google for Developers

YouTube 플레이어 데모 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 달리 명시되지 않는 한 이 페이지의 콘텐츠에는 Creative Commons Attribution 4.0 라이선스에 따

developers.google.com

 

2. IFrame 삽입 코드 html에 입력

[영상 ID]로 된 곳에 JSON으로 받아본 데이터에서 볼 수 있었던 영상의 ID를 입력하면 해당 영상이 화면에 뜨게 된다.

<iframe id="ytplayer" type="text/html" width="720" height="540" src="https://www.youtube.com/embed/[영상 ID]"
frameborder="0" allowfullscreen>

 

※ 아래 영상은 위와 같은 방법을 사용해 해당 글 HTML에 적용하여 영상을 불러오고 있는 것이다.

 


Youtube API 할당량 초과 에러

 영상을 계속 새로 불러오다보면 갑자기 영상이 안불러와 지는 상황이 생길 수 있는데 이는 유튜브 API 일일 할당량 한도를 초과한 것이다. 검색해보니 이럴 때에는 할당량 한도 연장 신청을 해야 하는데 시간이 좀 걸린다고 한다. 나같은 경우는 프로젝트를 진행하면서 바로 영상이 불러와 지는지 계속 확인해야했기 때문에 프로젝트를 아예 새로 생성해서 새로운 API를 받아오는 방법을 선택했다.

애드센스도 지금 몇주 째 승인안해주는데 연장 승인은 또 언제 해주겠어...?


 

📍Open Weather에서 날씨 API 받아오는 방법

https://mzero.tistory.com/18

 

Open Weather로 날씨 API 불러오기

미니 프로젝트로 만드는 웹 페이지에 이것저것 추가하다가 날씨 정보를 불러오고 싶었다. 다양한 방법을 찾아보다 날씨 정보를 무료 API로 받아 올 수 있는 Open Weather 사이트를 이용해 보았다. htt

mzero.tistory.com

 

728x90
반응형
728x90
반응형

📥MariaDB 설치

📍 Download URL : https://mariadb.org

10.11.6 버전 다운로드 : 버전이 낮을수록 안정화가 되어있기 때문에 최신 버전 사용을 선호하진 않는다.

※ X86-64 : 64 bit

 

MariaDB Foundation - MariaDB.org

… Continue reading "MariaDB Foundation"

mariadb.org

설치 확인

 

📍  DB Client Tool

- HeidiSQL  사용

 

📍  MariaDB or MySQL 절대 권한 계정 및 패스워드

- 계정 : root

- 패스워드 : 설치 시 입력한 패스워드

- 사용하는 port : 3306

- 기본 IP : 127.0.0.1 (프라이빗 ip로 자신의 노트북에서만 접속할 수 있음)

- 기본 Host : localhost

- 데이터 베이스를 관리하는 영역 mysql


🔍DB 사용 방법

📍  절대권한(root)으로 접속해서 생성해야 함

📍  사용자 생성 : 계정 및 패스워드 생성

 

📍 Database 생성 : 사용자가 사용할 공간 만들기

(Oracle은 제외한다. Oracle은 사용자 생성이 곧 DB 생성과 같기 때문이다.)

create database 후 root 새로고침

 

📍 권한 부여 : 사용자가 접속하고,DB를 사용할 수 있는 권한 부여

 

📍 사용자, DB, 권한부여 후 할일

  1. 사용자로 접속
  2. Table 설계(DB 설계)
    → 테이블을 어떻게 만들지 모델링 하는 것
    → 데이터를 저장할 수 있는 공간 : 테이블
    → 테이블 내에 데이터를 저장하는 원소값 : 컬럼(열)
    → 테이블 하나를 만들기 위해서는 컬럼(열)이 하나 이상 존재해야 한다.
    → 컬럼은 타입(또는 길이와 함께)으로 정의된다.
    → CHAR(10)는 고정형 데이터 타입
    → VARCHAR(10)는 가변형 데이터 타입
    → 성격에 맞는 데이터끼리 테이블로 모아야 함
  3. Table을 이용해서 입력, 수정, 삭제, 조회 → (CRUD)를 수정함

📌관계형 데이터 베이스

📍 1 : m 형태

📍 1개인 쪽이 부모 테이블, m개인 쪽이 자식 테이블

📍 부모 쪽 테이블에는 PK(기본키)가 존재하야 하고 자식 테이블에는 PK를 참조하는 FK(외래키)가 존재해야 함

📍 PK - 고유한 값, 중복 불가

 

좌 logical / 우 physical

✏️데이터 베이스 입력

📍 규칙 타입 이름

📍 제약조건 :   constraint 제약조건 이름 primary key (컬럼명)

 

📍commit /  rollback

  • 데이터에 대한 입력/수정/삭제 시에는 commit 수행
  • 만약 입력/수정/삭제를 되돌리려면 rollback 수행
  • commit 이후에는 rollback이 안된다
  • mysql or mariadb는 자동 commi된다
  • oracle은 항상 commit 해야 한다

📍 데이터 입력 / 수정 / 삭제 / 조회

  • 데이터 입력
Insert Into 테이블명 (컬럼명1, ...컬럼명N) Values (값1, ...값N)
  • 데이터 수정
Update 테이블명
Set 수정할컬럼명1 = 수정할값, 수정할컬럼명2 = 수정할값
Where 수정 조건 제시 (필수)
  • 데이터 삭제
Delete From 테이블명
Where 삭제 조건 제시 (필수)
  • 데이터 조회
Select 조회할컬럼1, 조회할컬럼2, ...
From 테이블명

 

📍 데이터 조회 / 수정/ 삭제 해보기

  • 회원정보 전체 조회하기
    - 회원정보 테이블 : member
    - 모든 컬럼의 데이터를 조회하라는 의미
SELECT * FROM member;

 

  • 조건 걸어서 조회하기
    - 회원중에 아이디가 a001인 회원의 이름 조회하기
    - 컴파일(해석) 순서 : select > from member > where 조건들 > 조회할 컬럼
SELECT mem_id, mem_name
FROM member
WHERE mem_id = 'a001';

 

  • 조건 걸어서 수정하기
    - 상품분류코드가 P201에 대해서 상품분류명을 "향수"로 수정하기
UPDATE lprod
SET lprod_nm = '향수'
WHERE lprod_gu = 'P201';

  • 조건 걸어서 삭제하기
    - 상품분류코드가 P201인 데이터를 삭제하기
    - 삭제는 조건에 맞는 행이 삭제됨
    - 자식 테이블에서 참조를 하고 있기 때문에 삭제 불가
Delete From lprod
Where lprod_gu = 'P201';

 

728x90
반응형
728x90
반응형

💡 데이터베이스 개요

📍 데이터베이스 : 데이터를 관리하는 곳

📍 DBMS : 데이터베이스 관리 시스템

📍 RDBMS : 관계 데이터베이스 관리 시스템

📍 DB Server : DB(DBMS or RDBMS 같은 의미로 사용됨)가 구축된 시스템을 의미함

📍 RDBMS의 종류

           - Oracle : 오라클, 최적화 OS는 리눅스 다만 모든 OS에 다 안정화되어 있음

           - MySQL : 오라클, 최적화 OS는 리눅스 다만 모든 OS에 다 안정화되어 있음

           - MS-SQL : 마이크로소프트, 최적화 OS는 윈도우, 보안에 취약함

           - MariaDB : 오픈소스기반 DB, 최적화 OS는 리눅스 다만 모든 OS에 다 안정화되어 있음


📂파일시스템 vs DBMS

📍 파일 시스템

  • 파일 시스템은 데이터들이 모아져 있는 파일을 저장 장치에 저장하고 사용하기 위한 일종의 규칙이나 체계를 뜻하며, 파일의 이름을 붙이거나 쉽게 파일에 접근할 수 있도록 배치를 신경 쓰는 등 파일과 관련된 기능을 수행하는 시스템이다.
  • 파일의 기본적인 구성요소는 순차적인 레코드들이다. 여기서 레코드란 파일을 다룰 때 실제로 읽고 쓰는 단위로서 사용되는 데이터 단위를 뜻한다.
  • 파일 시스템에서는 데이터 정의가 응용 프로그램에 내포되어 있어 응용 프로그램과 데이터 간의 의존관계가 존재하게 된다. 그렇기 때문에 데이터의 구조, 접근 방법이 변경되면 기존의 프로그램과 데이터를 함께 변경해야한다.
  • 프로그램에서 데이터를 접근하고 조작하는 것 이외에 별도의 제어가 없다.
파일 시스템 장점 파일 시스템 단점
리속도가 DB에 비해 빠르다 데이터 무결성을 유지하기가 어렵다.
구현이 간편하다 다수 사용자를 위한 동시성 제어가 제공되지 않는다.
비용이 저렴하다. 쉬운 질의어가 제공되지 않는다.
  보안 기능이 미흡하다.
  회복 기능이 없다.
  데이터 독립성이 없어 유지보수 비용이 크다.
  데이터 공유가 잘 되지 않는다. 
  생산성이 낮다

 

📍 DBMS

  • 데이터베이스는 조직에 필요한 정보를 얻기 위해 논리적으로 연관된 데이터를 모아 구조적으로 통합해 놓은 것을 말한다.
  • 데이터베이스 시스템은 데이터의 검색과 변경을 주로 수행한다. 여기서 변경은 삽입, 삭제, 수정 등의 작업을 말한다.
  • 데이터베이스는 각 조직에서 사용하던 데이터를 모아서 통합하고 공유할 목적으로 구축된다.

📍 DBMS 특징

  • 실시간 접근성 (Real Time Processing) : 의사 결정에 즉각 반영
  • 계속적인 변화 (Continuous evolution) : 삽입, 삭제, 갱신등 현재 최신의 상태 유지
  • 동시 공용 (Concurrent Sharing) : 다수의 사용자가 동시에 접근, 이용가능
  • 내용에 의한 참조 (Content reference) : 실제 데이터 값을 참조함 

📍 DBMS 정의

  1. 통합된 데이터 (Intergrated Data)
    여러 곳에서 사용하던 데이터를 통합하여 하나로 저장한 데이터를 말한다. 통합 시 각자 사용하던 데이터의 중복을 최소화하여 데이터의 불일치 현상을 없앤다.
  2. 저장된 데이터 (Stored Data)
    문서로 보관된 데이터가 아니라 디스크, 데이프 같은 컴퓨터 저장장치에 저장된 데이터를 의미한다.
  3. 운영 데이터 (Operational Data)
    조직의 목적을 위해 사용되는 데이터로 업무를 위한 검색을 목적으로 저장된 운영데이터를 의미한다.
  4. 공용 데이터 (Shared Data)
    한사람 또는 한 업무를 위해 사용되는 데이터가 아닌 공동으로 사용하는 데이터를 의미한다.
DBMS 장점 DBMS 단점
자료의 독립성 시스템의 부하 및 복잡성
- 데이터 무결성 보장 별도의 관리 이력 필요
개발 생산성 보장 (표준 SQL, 개발기간 절감, 운영비용 절감)  추가 도입비용 발생

💻클라이언트와 서버

📍 Request와 Response의 관계

📍 서버 

  • 데이터를 포함하거나 네트워크의 다른 컴퓨터에서 액세스하는 기능을 제공하는 컴퓨터
  • 다수의 클라이언트에게 서비스를 제공하기 때문에 고사양의 하드웨어를 갖춘 컴퓨터이지만, 하드웨어의 사양으로 서버와 클라이언트를 구분하는 것은 절대 아니며, 사양의 관계없이 서비스를 제공하는 소프트웨어가 실행되는 컴퓨터를 서버라고 한다.

📍 클라이언트 

  • 서버로부터 서비스나 데이터를 요청하는 컴퓨터
  • 서버와 이어진 모든 기기(컴퓨터의 경우 WIFI / 모바일은 모바일 네트워크)와 단말기에서 이용하는 웹에 접근하는 SW이며, 주로 서버에 요청을 보내고 응답을 받는 역할을 한다.
728x90
반응형
728x90
반응형

주제 : 회원전용 도서관리 프로그램 작성하기

<요구 사항>
📍최초 메뉴
       : 회원 번호는 문자열 무엇이든 상관없이 등록
       : 서비스 종료시 프로그램 자체 종료
 [서비스 이용을 위한 회원 인증]
  1. 회원번호 등록
  2. 회원 인증
  3. 서비스 종료

📍회원 인증이 된 경우 메뉴
       : 도서 정보 - 도서번호, 도서제목, 재고권수
       : 도서 상태 확인 - 특정 도서에 대한 정보 조회(도서번호, 도서제목, 현재권수/전체권수)
 [도서 서비스 메뉴]
  1. 도서 입고
  2. 도서 대출
  3. 도서 반납
  4. 도서 상태 확인
  5. 도서 전체 목록 확인
  6. 도서 서비스 종료(회원 인증 메뉴로 갑니다.)

 

 

내가 만든 코드

1. class LibraryKiosk 생성

class LibraryKiosk :
    def __init__(self) :
        self.books = {}

    def add_book(self, book_id, title, quantity) :
        if book_id in self.books : 
            self.books[book_id]["quantity"] += quantity
            self.books[book_id]["register_quantity"] += quantity
        else :
            self.books[book_id] = {"title" : title, "quantity" : quantity, "register_quantity" : quantity}
        print(f"도서번호 : {book_id} / 제목 : {title} / 입고수량 : {quantity} 입고성공😍")

    def borrow_book(self, book_id):
        if (book_id in self.books) and (self.books[book_id]['quantity']) > 0 :
            self.books[book_id]['quantity'] -= 1
            print("대출이 완료되었습니다.")
            print(f"도서번호 : {book_id} / 제목 : {self.books[book_id]['title']} / 남은재고수량 : {self.books[book_id]['quantity']}")
        else:
            print("도서가 존재하지 않거나, 대출할 재고가 없습니다.")

    def return_book(self, book_id) :
        if book_id in self.books and (self.books[book_id]["register_quantity"] - self.books[book_id]["quantity"]) > 0 :
            self.books[book_id]["quantity"] += 1
            print(f"도서번호 : {book_id} / 제목 : {self.books[book_id]['title']} / 남은재고수량 : {self.books[book_id]['quantity']}")
        else:
            print("해당 도서가 존재하지 않습니다.")

    def check_book(self, book_id) :
        if book_id in self.books :
            (print(f"도서번호 : {book_id} / 제목 : {self.books[book_id]['title']} / 현재수량 : {self.books[book_id]['quantity']} / 전체수량 : {self.books[book_id]['register_quantity']}"))
        else:
            print("해당 도서가 존재하지 않습니다.")

    def list_book(self):
        for i in self.books.keys():
            print(f"{self.books[i]['title']}")

 

2. bookKiosk 함수 생성

def bookKiosk(register_num, customer) :
    if register_num in customer :
            kiosk = LibraryKiosk()
            while True :
                choice = input("""
                               <도서 서비스 메뉴>
                               1. 도서 입고
                               2. 도서 대출
                               3. 도서 반납
                               4. 도서 상태 확인
                               5. 도서 전체 목록 확인
                               6. 도서 서비스 종료(회원 인증 메뉴로 돌아갑니다)
                               원하는 번호(1~6)를 선택하세요.
                               """)
                
                if choice == "1" :
                    print("도서 입고")
                    book_id = input("도서 번호를 입력해 주세요 : ")
                    title = input("도서 제목를 입력해 주세요 : ")
                    quantity = int(input("입고할 권수를 입력해 주세요 : "))
                    kiosk.add_book(book_id, title, quantity)
                    
                elif choice == "2" :
                     print("도서 대출")
                     book_id = input("대출할 도서번호를 입력해주세요 : ")
                     kiosk.borrow_book(book_id)
                    
                elif choice == "3" :
                     print("도서 반납")
                     book_id = input("반납할 도서번호를 입력해주세요 : ")
                     kiosk.return_book(book_id)
                    
                elif choice == "4" :
                     print("도서 상태 확인")
                     book_id = input("확인할 도서번호를 입력해주세요 : ")
                     kiosk.check_book(book_id)
        
                elif choice == "5" :
                     print("도서 전체 목록 확인")
                     kiosk.list_book()
                
                elif choice == "6" :
                    print("도서 서비스 종료(회원 인증 메뉴로 돌아갑니다.)")
                    break
                else :
                    print("다시 선택해주세요")
    else :
        print("등록되지 않은 회원입니다.")

 

3. main 함수 생성

def main() :
    customer = []
    while True : 
        choice = input("""
                        <서비스 이용을 위한 회원 인증>
                        1. 회원번호 등록
                        2. 회원 인증
                        3. 종료
                        원하는 번호(1~3)를 선택하세요
                        """)
    
        if choice == "1" :
            print("회원번호 등록")
            user_num = input("등록할 회원번호를 입력해주세요: ")
            
            customer.append(user_num)
               
        elif choice == "2" :
            print("회원 인증")
            register_num = input("등록하신 회원번호를 입력해주세요 : ")
            bookKiosk(register_num, customer)
                                                                                              
        elif choice == "3" :
            print("종료")
            break
            
        else :
            print("다시 선택해주세요")

if __name__ == "__main__":
    main()

 

4. 결과

 <서비스 이용을 위한 회원 인증>
                        1. 회원번호 등록
                        2. 회원 인증
                        3. 종료
                        원하는 번호(1~3)를 선택하세요
                         1
회원번호 등록
등록할 회원번호를 입력해주세요:  001

                        <서비스 이용을 위한 회원 인증>
                        1. 회원번호 등록
                        2. 회원 인증
                        3. 종료
                        원하는 번호(1~3)를 선택하세요
                         2
회원 인증
등록하신 회원번호를 입력해주세요 :  001

                               <도서 서비스 메뉴>
                               1. 도서 입고
                               2. 도서 대출
                               3. 도서 반납
                               4. 도서 상태 확인
                               5. 도서 전체 목록 확인
                               6. 도서 서비스 종료(회원 인증 메뉴로 돌아갑니다)
                               원하는 번호(1~6)를 선택하세요.
                                1
도서 입고
도서 번호를 입력해 주세요 :  001
도서 제목를 입력해 주세요 :  파이썬
입고할 권수를 입력해 주세요 :  5
도서번호 : 001 / 제목 : 파이썬 / 입고수량 : 5 입고성공😍

                               <도서 서비스 메뉴>
                               1. 도서 입고
                               2. 도서 대출
                               3. 도서 반납
                               4. 도서 상태 확인
                               5. 도서 전체 목록 확인
                               6. 도서 서비스 종료(회원 인증 메뉴로 돌아갑니다)
                               원하는 번호(1~6)를 선택하세요.
                                2
도서 대출
대출할 도서번호를 입력해주세요 :  001
대출이 완료되었습니다.
도서번호 : 001 / 제목 : 파이썬 / 남은재고수량 : 4

                               <도서 서비스 메뉴>
                               1. 도서 입고
                               2. 도서 대출
                               3. 도서 반납
                               4. 도서 상태 확인
                               5. 도서 전체 목록 확인
                               6. 도서 서비스 종료(회원 인증 메뉴로 돌아갑니다)
                               원하는 번호(1~6)를 선택하세요.
                                3
도서 반납
반납할 도서번호를 입력해주세요 :  001
도서번호 : 001 / 제목 : 파이썬 / 남은재고수량 : 5

                               <도서 서비스 메뉴>
                               1. 도서 입고
                               2. 도서 대출
                               3. 도서 반납
                               4. 도서 상태 확인
                               5. 도서 전체 목록 확인
                               6. 도서 서비스 종료(회원 인증 메뉴로 돌아갑니다)
                               원하는 번호(1~6)를 선택하세요.
                                4
도서 상태 확인
확인할 도서번호를 입력해주세요 :  001
도서번호 : 001 / 제목 : 파이썬 / 현재수량 : 5 / 전체수량 : 5

                               <도서 서비스 메뉴>
                               1. 도서 입고
                               2. 도서 대출
                               3. 도서 반납
                               4. 도서 상태 확인
                               5. 도서 전체 목록 확인
                               6. 도서 서비스 종료(회원 인증 메뉴로 돌아갑니다)
                               원하는 번호(1~6)를 선택하세요.
                                5
도서 전체 목록 확인
파이썬

                               <도서 서비스 메뉴>
                               1. 도서 입고
                               2. 도서 대출
                               3. 도서 반납
                               4. 도서 상태 확인
                               5. 도서 전체 목록 확인
                               6. 도서 서비스 종료(회원 인증 메뉴로 돌아갑니다)
                               원하는 번호(1~6)를 선택하세요.
                                6
도서 서비스 종료(회원 인증 메뉴로 돌아갑니다.)

                        <서비스 이용을 위한 회원 인증>
                        1. 회원번호 등록
                        2. 회원 인증
                        3. 종료
                        원하는 번호(1~3)를 선택하세요
                         3
종료

 

728x90
반응형
728x90
반응형

실습 1

전화번호를 전달받아서, 뒤 4자리를 제외하고 나머지 별(*)로 표시하는 함수 만들어서 출력하기
- 함수명 : solution
- 예시 : 010-1234-5678 ==>*******5678

 

내가 만든 코드

def solution(phone_number) :
    new_number = '*' * (len(phone_number) - 4) + phone_number[-4:]
    return new_number
    
solution("010-1234-5678")

 

'********5678'

 

강사님 코드

def solution_t(phone_number) :
    new_number = '*' * len(phone_number[:-4]) + phone_number[-4:]
    return new_number

solution_t("010-1234-5678")

 

'********4567'

실습 2

연속된 정수 데이터 제거하기
 - 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하기
 - 단, 제거된 후 남은 숫자들은 원본 데이터 타입으로 출력하기
 - 함수명 : solution
 - 예시 : [1, 1, 3, 3, 0, 1, 1] ===> [1, 3, 0, 1]

 

내가 만든 코드

def solution() :
    list = [1, 1, 3, 3, 0, 1, 1]
    new_list = []
    for i in range(len(list)) :
        if i == 0 or list[i] != list[i - 1] :
            new_list.append(list[i])           
    return new_list

solution()

 

[1, 3, 0, 1]

 

강사님 코드

def solution_t(num_list) :
    rs_list= []
    last_num = -1
    
    for i in num_list :
        if i == last_num :
            continue
            
        rs_list.append(i)    
        last_num = i
        
    return rs_list

solution_t([1, 1, 3, 3, 0, 1, 1])

 

[1, 3, 0, 1]
728x90
반응형
728x90
반응형

정규표현식(Regular_Expression)


<정규표현식 패턴>

- 대괄호 [] : 대괄호 안에 있는 문자 중에 하나라도 매치되면 추출
- 점(.) : 앞뒤 문자의 사이에 보통 주로 사용함. 하나의 문자를 의미함
            예시 : a.c의 패턴인 경우 "abc", "abc"....
- 반복(*) : 앞의 문자가 0번 이상 반복될 때 추출
                예시 : ab*c의 패턴인 경우 "ac", "abc", "abcd", "abbbbbbbbbbc"....
- 반복(+) : 앞의 문자가 1번 이상 반복 될 때 추출
                예시 : ab+c의 패턴인 경우 "abc", "abbc", "abbbbbc"...
- 반복({m, n}) : 앞의 문자가 최소 m번, 최대 n번 반복될 때 추출 됨
                          예시 : a{2, 4}의 패턴인 경우 "aa", "aaa", "aaaa"....
- 시작(^)과 끝($) : 각 문자열의 시작과 끝을 나타냄
                                예시 : ^abc의 패턴인 경우 "abc"로 시작하는 문자열에 대해 추출
                                 예시 : $abc의 패턴인 경우 "abc"로 끝나는 문자열에 대해 추출
- 물음표(?) : 바로 앞의 문자가 0 또는 1회 나타날 수 있음을 의미함
                      예시 : a?의 패턴인 경우 "a" 또는 ""일 경우 추출함
- 역슬래시(\) = 이스케이프라고 읽음 : 특수문자를 일반 문자로 인식하게 함
- 소괄호() = 그룹화라고 읽음 : 괄호 안의 패턴을 하나의 그룹으로 묶어서 처리가능
                                                    예시 : (abc)+의 패턴인 경우 "abc", "abcabc", "abcabcabc"....
- [0-9] : 0에서 9까지의 숫자중 하나
- [!@#$%^&*(),.?";{}|<>] : 특수 기호 중 하나
- [ㄱ-ㅎㅏ-ㅣ가-힣] : 한글 중 하나
- [a-zA-Z] : 알파벳 소문자 또는 대문자 중 하나
- \d : 숫자 중 하나
- \b : 단어의 경계를 나타냄(보통 문장의 처음과 끝에 제시)
→ 위의 패턴들은 조합해서 사용 가능

정규표현식 쓰기 위해 라이브러리 불러오기

import re

 

 "abcdefg" 문자열에서 ade에 대한 문자만 추출하기

- r은 패턴을 인식시켜주는 역할

- findall : 임의 문자열에서 패턴에 맞는 값을 모두 찾아서 리스트 타입으로 반환한다.

text = "abcdefg"

### 추출할 패턴 정의하기
pattern = re.compile(r"[ade]")

### text 문자열에서 패턴에 맞는 값만 추출하기
rs_text = pattern.findall(text)
print(rs_text)
['a', 'd', 'e']

 

점(.) 패턴을 이용하기

- 문자열 "abcdef afceeeazc"에서 a로 시작해서 c로 끝나는 3단어 추출하기
- 출력 예시 : [abc, afc, axc]

text = "abcdef afceeeazc"
pattern = re.compile(r'a.c')

rs_test = pattern.findall(text)
print(rs_test)
['abc', 'afc', 'azc']
728x90
반응형

+ Recent posts