본문 바로가기
[챌린지]/[패스트캠퍼스] 파이썬 초격차

패스트캠퍼스 환급챌린지 31일차 미션 (3월 2일) : 파이썬으로 할 수 있는 모든 것 with 47개 프로젝트 초격차 패키지 수강 후기

by 쿠키토끼 2024. 3. 2.

01. 제목

패스트캠퍼스 환급챌린지 31일차 미션 (3월2일) : 
파이썬으로 할 수 있는 모든 것 with 47개 프로젝트 초격차 패키지 Online 수강 후기
 

02. 포스팅 본문 (학습 일기) 가이드

 
1. 학습 인증샷 2장 이상 포함

카메라로 직접 촬영한 수강 인증 사진 (캡쳐X)

 

2. 학습 후기 700자 이상 (공백 제외)

오늘은 프로젝트 FASTCAMPUS BLOG 게시글 목록, 상세, FASTCAMPUS BLOG 수정, 삭제, 저장하기까지 배웠다.

게시글 목록은

- 게시글 목록 - 

번호 : 1

제목 :  파이썬 공부 2일차

조회수 : 2

이런식으로 게시물 번호, 제목, 조회수 목록 순서대로 결과화면이 나오게 하고, 게시글 수만큼 나열되게 하도록 한다.

인풋값에는 글 번호를 선택해달라고 적고, 관련 없는 번호를 입력시 없는 글 번호라고 표시되게 한다.

게시글 목록 출력 구현은 [Post] (포스트 리스트)에 포스트 객체들이 저장되어 있는데 get 메서드로 각 속성을 가져와서 출력만 시켜주면 되는 것이라 비교적 간단하다.

글 번호 선택하는 경우가 조금 복잡한데 없는 글번호를 선택시 없다고 해주고 계속 물어보게하고 -1 입력시 돌아가게 한다.

정리하면

없는 글 번호 -> 무한반복

-1 입력시 -> 메뉴로 복귀 (break)

올바른 글 번호 -> 게시글 상세 

실습하면서 이전에 있던 게시글 로딩과 메뉴가 출력되면서 프로그램 종료가 되지않아 실행결과가 이상하게 나와서 코드 하나하나 다시 다 뜯어보고 이전 강의 다시 찾아봐서 힘들었다. 틀린게 없는데 뭐가 잘못된건지 한참을 코드 보고 고치고 생각하다가 드디어 해결해서 나름 뿌듯하기도 했다.(사실 뿌듯보다는 체한게 내려간 기분에 가까웠다) 강사님도 같은 부분에서 종료하라 언급했는데 난 진짜 VS code를 종료하라는 줄 알았다. ctrl + c 해서 종료하는 부분도 알려주셨는데 이건 KeyboardInterrupt 오류가 뜨면서 뭐 때문에 안되어서 그냥 프로그램 에서 종료하는 숫자를 넣고 종료했다. 아무튼 이런 오류가 발생하는 부분을 편집안해서 좋았다 사실 초보들은 다양한 어려움을 겪을텐데 그 부분을 해결하는 과정에서 어려움을 많이 겪고 해결이 안되면 자포자기 하기 때문이다.

다음은 게시글 목록을 선택하면 게시글 상세를 확인하는 구현이다.

- 게시글 상세 - 

번호 : 1

제목 : 파이썬 공부 2일차

본문 : 연산 배웠다

조회수 : 3

Q) 수정 : 1  삭제 : 2 (메뉴로 돌아가려면 -1을 입력)

>>>

사용자가 입력한 글번호(앞에서 입력한 번호를 적을시)와 같은 게시글을 찾기 ([Post] 리스트에서)

조회수 증가 및 상세 내용 출력

수정, 삭제 기능을 수행할 때 Post 객체 넘겨 주기(어떤 Post를 수정, 삭제 해야할지 알아야하니까)

위 부분까지 실습 구현은 아래에 첨부했다.

 

다음은 게시글, 수정 ,삭제, 저장하기 이다.

게시글 수정은

사용자가 새로 제목, 본문을 입력한다.

set_post 메서드로 Post 객체를 수정해 준다.

게시글 삭제는 

post_list에서 해당 Post 객체를 삭제해 준다.

게시글 저장하기는

post_list에 저장된 내용을 data.csv 파일제 저장한다.

여기까지로 실습 프로젝트를 마무리했다. 마찬가지로 실습구현은 아래에 첨부했다. (계속 이어오는 프로젝트이지만 수정하고 추가하는 부분이 있어서 각 각 별도로 코드를 첨부했다.)

아주 간단히 프로젝트라서 쉬울 것 같았는데 생각보다 꼬이는 게 많았고 복잡했다. 강사님이 다음 시간엔 인사하고 마무리 하자고 했는데 여기서는 포함이 안되어있어서 아쉬웠다. 이렇게 문법프로젝트도 끝이 나고 이제는 이 탄탄한 문법을 바탕으로 다시 기초 프로젝트로 돌아간다. 부디 이 프로젝트가 많은 도움이 되어서 이전 보다 어려웠던 부분에서 희망이 보이길 조금 기대해본다.

 

아래는 실습 구현을 따라하고 강사님 설명 부분이다.

 

[게시글 목록,삭제]

import os
import csv
from post import Post

# 파일경로
file_path = "./Chapter12/data.csv"

# post 객체를 저장할 리스트
post_list = []

# data.csv 파일이 있다면
if os.path.exists(file_path):
    #게시글 로딩
    print("게시글 로딩중...")
    f = open(file_path, "r", encoding="utf8")
    reader = csv.reader(f)
    for data in reader:
        # Post 인스턴스 생성하기
        post = Post(int(data[0]), data[1], data[2], int(data[3]))
        post_list.append(post)
       
else: # 파일이 없다면
    #파일 생성하기
    f = open(file_path, "w", encoding="utf8", newline="") # 없으면 open 자동 생성
    f.close()

# print(post_list[0].get_title()) # post_list에 저장된 첫번째 객체에 대해서 get_title 메서드를 호출하라

#게시글 쓰기
def write_post():
    """게시글 쓰기 함수"""
    print("\n\n- 게시글 쓰기 -")
    title = input("제목을 입력해 주세요\n>>>")
    content = input("내용을 입력해 주세요\n>>>")
    # 글번호
    id = post_list[-1].get_id() + 1
    post = Post(id, title, content, 0)
    post_list.append(post)
    print("# 게시글이 등록되었습니다")

# 게시글 목록
def list_post():
    """게시글 목록 함수"""
    print("\n\n- 게시글 목록 -")
    id_list = []
    for post in post_list:
        print("번호 :", post.get_id())
        print("제목 :", post.get_title())
        print("조회수 :", post.get_view_count())
        print("")
        id_list.append(post.get_id())

    while True:
        print("Q) 글 번호를 선택해 주세요 (메뉴로 돌아가려면 -1을 입력해주세요)")
        try:    
            id = int(input(">>>"))
            if id in id_list:
                detail_post(id)
                break
            elif id == -1:
                break
            else:
                print("없는 글 번호 입니다.")
        except ValueError:
            print("숫자를 입력해 주세요.")

# 글 상세 페이지
def detail_post(id): # 글번호 id 값을 받음
    """ 게시글 상세 보기 함수 """
    print("\n\n- 게시글 상세 -")

    for post in post_list:
        if post.get_id() == id:
            # 조회수 1증가
            post.add_view_count()
            print("번호 : ", post.get_id())
            print("제목 : ", post.get_title())
            print("본문 : ", post.get_content())
            print("조회수 : ", post.get_view_count())

    while True:
        print("Q) 수정: 1  삭제 : 2 (메뉴를 돌아가려면 -1을 입력)")
        try:
            choice = int(input(">>>"))
            if choice == 1:
                print("수정")
                break
            elif choice == 2:
                print("삭제")
                break
            elif choice == -1:
                break
            else:
                print("잘못 입력하였습니다.")
        except ValueError:
            print("숫자를 입력해 주세요")

# 메뉴 출력하기
while True:
    print("\n\n- FASTCAMPUS BLOG -")
    print("- 메뉴를 선택해 주세요 -")
    print("1. 게시글 쓰기")
    print("2. 게시글 목록")
    print("3. 프로그램 종료")
    try:
        choice = int(input(">>>"))
    except ValueError:
        print("숫자를 입력해 주세요")
    else:
        if choice == 1:
            write_post()
        elif choice == 2:
            list_post()
        elif choice == 3:
            print("프로그램 종료")
            break

 

[게시글 수정, 삭제, 저장하기]

import os
import csv
from post import Post

# 파일경로
file_path = "./Chapter12/data.csv"

# post 객체를 저장할 리스트
post_list = []

# data.csv 파일이 있다면
if os.path.exists(file_path):
    #게시글 로딩
    print("게시글 로딩중...")
    f = open(file_path, "r", encoding="utf8")
    reader = csv.reader(f)
    for data in reader:
        # Post 인스턴스 생성하기
        post = Post(int(data[0]), data[1], data[2], int(data[3]))
        post_list.append(post)
       
else: # 파일이 없다면
    #파일 생성하기
    f = open(file_path, "w", encoding="utf8", newline="") # 없으면 open 자동 생성
    f.close()

# print(post_list[0].get_title()) # post_list에 저장된 첫번째 객체에 대해서 get_title 메서드를 호출하라

#게시글 쓰기
def write_post():
    """게시글 쓰기 함수"""
    print("\n\n- 게시글 쓰기 -")
    title = input("제목을 입력해 주세요\n>>>")
    content = input("내용을 입력해 주세요\n>>>")
    # 글번호
    id = post_list[-1].get_id() + 1
    post = Post(id, title, content, 0)
    post_list.append(post)
    print("# 게시글이 등록되었습니다")

# 게시글 목록
def list_post():
    """게시글 목록 함수"""
    print("\n\n- 게시글 목록 -")
    id_list = []
    for post in post_list:
        print("번호 :", post.get_id())
        print("제목 :", post.get_title())
        print("조회수 :", post.get_view_count())
        print("")
        id_list.append(post.get_id())

    while True:
        print("Q) 글 번호를 선택해 주세요 (메뉴로 돌아가려면 -1을 입력해주세요)")
        try:    
            id = int(input(">>>"))
            if id in id_list:
                detail_post(id)
                break
            elif id == -1:
                break
            else:
                print("없는 글 번호 입니다.")
        except ValueError:
            print("숫자를 입력해 주세요.")

# 글 상세 페이지
def detail_post(id): # 글번호 id 값을 받음
    """ 게시글 상세 보기 함수 """
    print("\n\n- 게시글 상세 -")

    for post in post_list:
        if post.get_id() == id:
            # 조회수 1증가
            post.add_view_count()
            print("번호 : ", post.get_id())
            print("제목 : ", post.get_title())
            print("본문 : ", post.get_content())
            print("조회수 : ", post.get_view_count())
            target_post = post

    while True:
        print("Q) 수정: 1  삭제 : 2 (메뉴를 돌아가려면 -1을 입력)")
        try:
            choice = int(input(">>>"))
            if choice == 1:
                update_post(target_post)
                break
            elif choice == 2:
                delete_post(target_post)
                break
            elif choice == -1:
                break
            else:
                print("잘못 입력하였습니다.")
        except ValueError:
            print("숫자를 입력해 주세요")

# 게시글 수정
def update_post(target_post):
    """게시글 수정 함수"""
    print("\n\n- 게시글 수정 -")
    title = input("제목을 입력해 주세요\n>>>")
    content = input("본문을 입력해 주세요\n>>>")
    target_post.set_post(target_post.id, title, content, target_post.view_count)
    print("# 게시글이 수정되었습니다.")

# 게시글 삭제
def delete_post(target_post):
    """게시글 삭제 함수"""
    post_list.remove(target_post)
    print("# 게시글이 삭제되었습니다.")

# 게시글 저장
def save():
    """게시글 저장 함수"""
    f = open(file_path, "w", encoding="utf8", newline="")
    writer = csv.writer(f)
    for post in post_list:
        row = [post.get_id(), post.get_title(), post.get_content(), post.get_view_count()]
        writer.writerow(row)
    f.close()
    print("# 저장이 완료되었습니다.")
    print("# 프로그램 종료")

# 메뉴 출력하기
while True:
    print("\n\n- FASTCAMPUS BLOG -")
    print("- 메뉴를 선택해 주세요 -")
    print("1. 게시글 쓰기")
    print("2. 게시글 목록")
    print("3. 프로그램 종료")
    try:
        choice = int(input(">>>"))
    except ValueError:
        print("숫자를 입력해 주세요")
    else:
        if choice == 1:
            write_post()
        elif choice == 2:
            list_post()
        elif choice == 3:
            save()
            break

 

03. 필수 본문 내용 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
 

04. 필수 해시태그 

#패스트캠퍼스 #직장인자기계발 #직장인공부 #환급챌린지 #패스트캠퍼스후기 #오공완

05. 필수 URL 

https://bit.ly/48sS29N

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

 

[수강 강의 클립] 

[특별 제공] 한 번에 끝내는 파이썬 필수 문법

-Ch 12. 실전 미니 프로젝트

05. FASTCAMPUS BLOG 게시글 목록, 상세.py

06. FASTCAMPUS BLOG 게시글 수정, 삭제, 저장하기.py

 

[※ 기타사항메모 ※]
{100% 환급챌린지 미션 가이드 참조 : 

https://fastcampus.co.kr/event_online_challenge_2401_mission}

 

커리어 성장을 위한 최고의 실무교육 아카데미 | 패스트캠퍼스

성인 교육 서비스 기업, 패스트캠퍼스는 개인과 조직의 실질적인 '업(業)'의 성장을 돕고자 모든 종류의 교육 콘텐츠 서비스를 제공하는 대한민국 No. 1 교육 서비스 회사입니다.

fastcampus.co.kr