8월31일

Win Cha·2026년 8월 31일

문법에서 프로그램 개발로 그러나 처음 개념과 구조 잡기가 어려웠음.

그러나 강사님 말씀대로,

Top - Down 방식으로
무엇을 출력할지
조건(종결) 그리고 그외는
순차적으로
코드를 입력하고 모르면 찾고,
에러나면 중간에 확인 코드(print "?") 입력하여 해결
그리고 도저히 모르면 ai

파이썬의 CLI 게시판 만들기

-게시글
-CLI : command line Interface (명령어로 컨트롤)
-GUI 없이 개발

  1. 파이썬의 CLI 게시판 만들기
    1) 게시글
    -생성(c), 수정(U), 삭제(D), 보기(R) (목록, 상세 보기)
    2) 회원가입
    -가입
    -내정보(회원정보 보기)
    -회원 정보 수정
    -회원 탈퇴(삭제)

3) DBMS (추후 진행)

  1. 파이썬의 CLI 게시판 만들기 (문제)
    명령어) artticle write (사용자의 입력)
    제목 : ~~~ (사용자의 입력)
    내용 : !!! (사용자의 입력)
    1번 글이 생성되었습니다.
    명령어 ) artticle write
    제목 : ### (사용자의 입력)
    내용 : $$$ (사용자의 입력)
    2번 글이 생성되었습니다.
    명령어) exit

== CLI 게시판 종료 ==

코드 작업 시작--> 프로그램으로 완성하자.

print("-" 21)
print("== CLI 게시판 실행 ==")
print("-"
21)
num=0

while True: # 참인 동안 아래 실행
print("CLI 명령어를 입력하세요: ")
cmd = input()

if cmd == "exit":
    print("== CLI 게시판 종료 ==")
    break

elif cmd == "a w" :  # article write":
    num += 1
    title = input("제목 : ")
    content = input("내용 : ")
    print(f"{num}번 글이 생성되었습니다.")
    print("-" * 23)
    print("")

<추가 코드 작업 내용>

기능 구현 : 생성,지우기, 목록보기, 수정, 상세 보기(수정 중)

print("-" 21)
print("== CLI 게시판 실행 ==")
print("-"
21)
num = 0
articles = [] # 작성된 글(딕셔너리)들을 누적해서 담아둘 가방(리스트)입니다.

while True: # 참인 동안 아래 실행 ('exit' 입력 시 종료)
cmd = input("명령어 )")

if cmd == "exit":
   print("== CLI 게시판 종료 ==")
   break

elif cmd == "a w":  # article write: 게시글 작성
    num += 1
    title = input("제목 : ")
    content = input("내용 : ")

    article_data = {
        "id": num,
        "title": title,
        "content": content
    }
    
    # 코드 실행 시 게시물이 추가 누적
    articles.append(article_data)

    # 글생성 확인
    print(f"{num}번 글이 생성 되었습니다.\n")

elif cmd == "a l":  # article list: 전체 목록 보기
    print("=" * 40)
    print("번호/ 제목       / 내용")
    
    # [설명] 이제 가방(articles) 안에 정상적인 딕셔너리들이 들어있으므로, 아래 코드는 에러 없이 완벽히 작동합니다!
    for art in articles[::-1]:
      print(f"{art['id']}   / {art['title']} / {art['content']}")
    print("=" * 40)

elif cmd == "a d":  # article detail: 게시글의 상세보기
     dread_id = int(input("상세보기 할 글 id 번호를 입력하세요: "))
     is_dreaded = False

     for art in articles:
        # 꺼내온 글상자의 'id' 번호가 사용자가 입력한 dread_id와 일치하는지 검사합니다.
        if art["id"] == dread_id:
          #  print(f"{art['id']}   / {art['title']} / {art['content']}")
           print (f"게시글 No: {art['id']}") 
           print (f"제 목 : {art['title']}")
           print (f"내 용 : {art['content']}")   

          # 글생성 확인
           print(f"{revise_id}번 글이 성공적으로 수정 되었습니다.\n")
           is_dreaded = True  # 수정 후 찾았다고 스위치 참으로 변경
           break        

     if is_dreaded == False:
       print(f"{dread_id}번 글은 목록에 없습니다.\n")       

elif cmd == "d id":  # delete article list (선택 삭제)
    delete_id = int(input("삭제할 글 id 번호를 입력하세요: "))
    
    # [설명] 글을 찾았는지 못 찾았는지 기억해 두기 위한 보조 스위치 변수입니다.
    # [용도] 반복문 안에서 바로 '없습니다'를 출력하면 버그가 나므로, 전체를 다 뒤진 후 판단하기 위해 씁니다.
    is_deleted = False

    for art in articles:
        # 꺼내온 글상자의 'id' 번호가 사용자가 입력한 delete_id와 일치하는지 검사합니다.
        if art["id"] == delete_id:
            articles.remove(art)
            print(f"{delete_id}번 글이 삭제되었습니다.\n")
            is_deleted = True  # 글을 성공적으로 찾아서 지웠다고 스위치를 켭니다.
            break              # 원하는 글을 지웠으므로 탐색 루프를 탈출합니다.

    # [설명] 가방을 다 뒤졌는데도 스위치가 거짓(False) 상태라면, 정말로 글이 없는 것입니다.
    # [용도] 목록에 없는 엉뚱한 번호를 입력했을 때 안내 메시지를 정확한 타이밍에 띄워줍니다.
    if is_deleted == False:
        print(f"{delete_id}번 글은 목록에 없습니다.\n")             

elif cmd == "r a":  # revise article list (선택 수정)
    revise_id = int(input("수정할 글 id 번호를 입력하세요: "))
    
    # [설명] 글을 찾았는지 못 찾았는지 기억해 두기 위한 보조 스위치 변수입니다.
    # [용도] 반복문 안에서 바로 '없습니다'를 출력하면 버그가 나므로, 전체를 다 뒤진 후 판단하기 위해 씁니다.
    is_revised = False

    for art in articles:
        # 꺼내온 글상자의 'id' 번호가 사용자가 입력한 revise_id와 일치하는지 검사합니다.
        if art["id"] == revise_id:
          title = input("제목 : ")
          content = input("내용 : ")

          art["title"] = title
          art["content"] = content         

          # 글생성 확인
          print(f"{revise_id}번 글이 성공적으로 수정 되었습니다.\n")
          is_revised = True  # 수정 후 찾았다고 스위치 참으로 변경
          break        

    if is_revised == False:
       print(f"{revise_id}번 글은 목록에 없습니다.\n")           

else:
  print("지원하지 않는 명령어 입니다.\n")

1차 완료 코드

기능 구현 : 생성,지우기, 목록보기, 수정, 게시글 자세하게 보기(작성일시)

print("-" 21)
print("== CLI 게시판 실행 ==")
print("-"
21)
from datetime import datetime
num = 0
articles = [] # 작성된 글(딕셔너리)들을 누적해서 담아둘 가방(리스트)입니다.

while True: # 참인 동안 아래 실행 ('exit' 입력 시 종료)
cmd = input("명령어 )")

if cmd == "exit":
   print("== CLI 게시판 종료 ==")
   break

elif cmd == "a w":  # article write: 게시글 작성
    num += 1
    title = input("제목 : ")
    content = input("내용 : ")       
    now_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")

    article_data = {
        "id": num,
        "title": title,
        "content": content,
        "date": now_time
    }
    
    # 코드 실행 시 게시물이 추가 누적
    articles.append(article_data)

    # 글생성 확인
    print(f"{num}번 글이 생성 되었습니다.\n")

elif cmd == "a l":  # article list: 전체 목록 보기
    print("=" * 40)
    print("번호/ 제목       / 내용")
    
    # [설명] 이제 가방(articles) 안에 정상적인 딕셔너리들이 들어있으므로, 아래 코드는 에러 없이 완벽히 작동합니다!
    for art in articles[::-1]:
      print(f"{art['id']}   / {art['title']} / {art['content']}")
    print("=" * 40)

elif cmd == "a v":  # article detail view: 게시글의 상세보기
     dread_id = int(input("상세보기 할 글 id 번호를 입력하세요: "))
     is_dreaded = False

     for art in articles:
        # 꺼내온 글상자의 'id' 번호가 사용자가 입력한 dread_id와 일치하는지 검사합니다.
        if art["id"] == dread_id:  
           print (f"게시글 No: {art['id']}") 
           print (f"제 목 : {art['title']}")
           print (f"내 용 : {art['content']}")   
           print (f"작성일시 : {art['date']}")   
           is_dreaded = True  # 해당 글 찾았다고 스위치 참으로 변경
           break        

     if is_dreaded == False:
       print(f"{dread_id}번 글은 목록에 없습니다.\n")       

elif cmd == "a d":  # delete article list (선택 삭제)
    delete_id = int(input("삭제할 글 id 번호를 입력하세요: "))
    
    # [설명] 글을 찾았는지 못 찾았는지 기억해 두기 위한 보조 스위치 변수입니다.
    # [용도] 반복문 안에서 바로 '없습니다'를 출력하면 버그가 나므로, 전체를 다 뒤진 후 판단하기 위해 씁니다.
    is_deleted = False

    for art in articles:
        # 꺼내온 글상자의 'id' 번호가 사용자가 입력한 delete_id와 일치하는지 검사합니다.
        if art["id"] == delete_id:
            articles.remove(art)
            print(f"{delete_id}번 글이 삭제되었습니다.\n")
            is_deleted = True  # 글을 성공적으로 찾아서 지웠다고 스위치를 켭니다.
            break              # 원하는 글을 지웠으므로 탐색 루프를 탈출합니다.

    # [설명] 가방을 다 뒤졌는데도 스위치가 거짓(False) 상태라면, 정말로 글이 없는 것입니다.
    # [용도] 목록에 없는 엉뚱한 번호를 입력했을 때 안내 메시지를 정확한 타이밍에 띄워줍니다.
    if is_deleted == False:
        print(f"{delete_id}번 글은 목록에 없습니다.\n")             

elif cmd == "a r":  # article revise (선택 수정)
    revise_id = int(input("수정할 글 id 번호를 입력하세요: "))
    
    # [설명] 글을 찾았는지 못 찾았는지 기억해 두기 위한 보조 스위치 변수입니다.
    # [용도] 반복문 안에서 바로 '없습니다'를 출력하면 버그가 나므로, 전체를 다 뒤진 후 판단하기 위해 씁니다.
    is_revised = False

    for art in articles:
        # 꺼내온 글상자의 'id' 번호가 사용자가 입력한 revise_id와 일치하는지 검사합니다.
        if art["id"] == revise_id:
          title = input("제목 : ")
          content = input("내용 : ")

          art["title"] = title
          art["content"] = content         

          # 글생성 확인
          print(f"{revise_id}번 글이 성공적으로 수정 되었습니다.\n")
          is_revised = True  # 수정 후 찾았다고 스위치 참으로 변경
          break        

    if is_revised == False:
       print(f"{revise_id}번 글은 목록에 없습니다.\n")           

else:
  print("지원하지 않는 명령어 입니다.\n")

0개의 댓글