15일차

Kangdh·2026년 9월 1일

파이썬 교육

목록 보기
16/33

리스트 내용 수정하기

elif cmd.startswith("article edit"):
cmdBits = cmd.split(" ")
if len(cmdBits) < 3:
  print("다시 입력해주세요")
  continue
if not cmdBits[2].isdigit():
  print("숫자를 입력해주세요")
  continue
if article["id"] != int(cmdBits[2]):
  print("{}번 게시글은 없습니다.".format(cmdBits[2]))
for article in articles:
  if article["id"] == int(cmdBits[2]):
    edit_num = int(cmdBits[2])
    print("수정할 제목을 입력해주세요")
    articles[edit_num].update(title=input())
    print("수정할 내용을 입력해주세요")
    articles[edit_num].update(body=input())
    print('{}번 글이 수정되었습니다.')
    print(articles[edit_num])

원래 있던 글을 수정하는 코드를 만들어봤다.
없는 번호의 글을 찾으면 해당 게시글은 없다고 안내, 기존 내용과 새로운 내용을 교체할 수 있도록 .update를 사용하였다.

elif cmd.startswith("article detail"): # 작성된 글 자세히 보기
cmdBits = cmd.split(" ")
if len(cmdBits) < 3:
print("다시 입력해주세요")
continue
if not cmdBits[2].isdigit():
print("숫자를 입력해주세요")
continue
if article["id"] != int(cmdBits[2]):
print("{}번 게시글은 없습니다.".format(cmdBits[2]))
for article in articles:
if article['id'] == int(cmdBits[2]):
print("날짜 : {}".format(dt))
print("제목 : {}".format(title))
print("내용 : {}".format(body))

작성된 글 자세히 보기에 해당하는 코드를 만들었다.

못한것들 : 입력받은 시간,날짜에 따라 시간만 보일지, 날짜가 보일지 코드짜기, 작성날짜 / 수정날짜(날짜는 구현했지만 작성당시 날짜와 시간)

from datetime import datetime
now = datetime.now()
today = datetime.today()
formatted_today = today.strftime("%H:%M")
formatted_another = datetime.now().strftime("%Y-%m-%d")
if now == today:
print(formatted_today)
else:
print(formatted_another)

시간을 이런느낌으로 비교하게끔 만들었는데 내가 원하는대로 작동되진않았다.

def errorfinder():
if len(cmdBits) < 3:
print("다시 입력해주세요")
if not cmdBits[2].isdigit():
print("숫자를 입력해주세요")
if article["id"] != int(cmdBits[2]):
print("{}번 게시글은 없습니다.".format(cmdBits[2]))

중간중간 코드에 중복되는 값들이 보여 def 함수로 묶어주고 errorfinder라고 이름 붙여서 만약 값이 없거나 잘못 입력됐을경우 재입력을 요구하는 텍스트를 띄우게끔 만들었다.
이렇게 만들어두고 필요한 위치마다 넣어주어서 작동되나 확인해봤는데 오류없이 잘 되는거같다.

cmdBits = cmd.split(" ")

이 코드까지 같이 넣고 실행시켰을때는 cmdBits가 없다는 오류가 나왔다. 따라서 이 코드까지는 원래 코드에 넣어두고 나머지만 errorfinder()로 만들것이다.

def parse_id(cmd):

# "article delete 3" -> 3 을 뽑아준다. 잘못된 명령이면 None
cmdBits = cmd.split(" ")
if len(cmdBits) < 3:
    print("명령어를 확인해주세요(길이 모자람)")
    return None
if not cmdBits[2].isdigit():
    print("명령어를 확인해주세요(번호대신 str 입력)")
    return None
return int(cmdBits[2])

강사님이 알려주신 코드를 보니 cmdBits = cmd.split(" ") 가 꼭 안빠져도 됐었다. 저것도 반복되는 코드이긴하나 오류가 나길래 이 문장은 꼭 내가 사용할 코드 안쪽에 있어야한다고 생각했는데 잘못 생각했었던것 같다.

def makeTestData():

프로그램 실행되자마자 실행
기능 : 게시글 데이터 3개 생성

다음은 해당 기능을 가진 함수를 만들어야한다.

프로그램이 돌자마자 실행되야한다는건, CLI 커맨드 입력 직전에 실행되어야한다는 뜻인거 같으니,
print("== CLI 게시판 실행 ==") 바로 밑에쪽으로 붙여서 코드를 만들어야할것이다. 이러면 프로그램 실행되자마자 실행이 될 것이니 다음으로는 기능을 구현시켜야한다.

def makeTestData():
for last_article_id in range(0,3):
id = last_article_id
regDate = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
updateDate = regDate
title = "01000010"
body = "TestData"
article = {"id" : id, "title" : title, "body" : body, "regDate" : regDate, "updateDate":updateDate}
articles.append(article)

프로그램이 돌자마자 3개의 리스트를 만들어내는 함수이다. 원래 있던 article write의 코드와 똑같은데 for last_article_id in range(0,3)을 넣어주면서 0부터 2까지 3개의 리스트를 만들게끔 하였다.

def makeTestData():
#시작하자마자 넣어둘 테스트용 글 3개를 만들어서 리스트로 리턴한다
#1번은 이전 날짜 -> 목록 날짜 표기 테스트용
return [
{"id" : 1, "regDate" : "2025-12-12 12:12:12", "updateDate" : "2025-12-12 12:12:12", "title" : "제목1","body":"내용1"},
{"id" : 2, "regDate" : now(), "updateDate" : now(), "title" : "제목2","body":"내용2"},
{"id" : 3, "regDate" : now(), "updateDate" : now(), "title" : "제목3","body":"내용3"}

이건 강사님이 알려주신 코드인데. 위에처럼 하는것도 가능은 하겠지만 이런 방식으로 하는게 훨씬 깔끔하고 간단해보인다. 그리고 내가 짠 코드는 값이 고정되어 세개의 리스트가 동일한 내용으로 저장된다는 단점이 있는데, 이 코드같은 경우는 세 개의 리스트 값을 다 다르게 줄 수 있으므로 보기에 편한다.또 내 코드는 너무 길다.

생각하지 못했던 것 : 시간을 나타내는 코드도 함수로 묶기, 날짜 혹은 시간을 알려주는 코드 묶기

Article 딕셔너리를 클래스 문법으로 변경하기

@dataclass

dataclass는 데이터를 담는 클래스이며, import 후에 @dataclass라는 데코레이터를 사용하면 된다.

@dataclass
class Article:
id: int
regDate: str
updateDate: str
title: str
body: str

이런식으로 사용할 수 있다.

그동안 배웠던건 확실히 새발의 피였다. 지금부터가 진짜 뭔가를 한다는 느낌이 든다.
해왔던걸 계속 다시 하면서 까먹지않게끔 해야겠다

0개의 댓글