프로그래밍 언어발행일 2023. 2. 27.원본 https://blog.naver.com/jword_/223029597232 ↗

파이썬 연습하며 만드는 todo리스트

파이썬 연습하며 만드는 todo리스트 — #파이썬연습 #todo리스트 AI스쿨 msa기반 java 백엔드 코스 중에 공부한 내용을 작성하였습니다 파이썬 ...

#Languages#Naver Blog

#파이썬연습 #todo리스트

​

AI스쿨 msa기반 java 백엔드 코스 중에 공부한 내용을 작성하였습니다

파이썬 프로그램을 만들어보자

이미지

저번주 수업이 진행되었는데요. 이번에 파이썬으로 todo리스트를 만드는 과제를 수행하면서 사용했던 코드들을 정리하고자 합니다.

​

안다고 생각했지만, 모르고있었던 부분이 정말 많았고,생각해낸 기능을 코드로 구현하는 과정자체가 영어로 원하는 문장을 만드는 것 처럼 쉽지 않다는 것을 느꼈습니다

파이썬으로 만드는 todo리스트

이번에 만들 프로그램은 todo리스트입니다. 많은 분들이 매일 매일 todo리스트 만들어 하루 일정 쳐내고 계실텐데요. 제가 만들 프로그램은 여러분들이 사용중이신 프로그램과는 격이 다른, 연습용 프로그램입니다.(GUI같은건 없습니다!)

포인트는 내가 원하는 기능을 어떻게 구현할지에 초점을 두었습니다.여러분들도 코드는 보지 말고 직접 구현해보세요!(예시참고)

일정 추가하기(기본예시)

기본예시

일단 멘토님께서 기본 예시를 전해주셨습니다. 일정 추가에 관한 내용입니다.

todos = \[\]​while True: command = input("명령") if command == "add": name = input("이름") desc = input("설명") date = input("날짜") todos.append((name, desc, date))

todo라는 리스트안에 사용자에게 입력받은 변수인 (name, desc, date) 튜플형태 데이터가 들어갑니다.

명령 add이름 study설명 python날짜 02.27

이런식으로 데이터를 넣을 수 있습니다.

일정 삭제하기(del)

del기능 구현하기

주어진 예시를 참고하여 삭제(del)기능을 구현해보았습니다. 그전에 일단 전체 일정 목록을 볼 수 있는 기능을 구현하는게 좋겠군요.

def show\_list(): print(todos) return todos

show\_list()함수를 만들었습니다. 이건 자주 쓰는 기능이 될 것 같아, 매번 적는 것보다, 함수로 적어서 관리하는게 편합니다.

​

기능 순서

아직 초보자인 저의 소소한 팁하나 방출해볼까 합니다. 기능을 구현할때 머릿속에 어떤 어떤 기능이 필요하다를 남기지 말고 메모장에 적어두는게 좋습니다. 작은 기능 단위로 쪼개다보면, 코딩의 방향성이 잘 잡힙니다.

사용자가 del을 입력했을때 전체 일정 리스트를 보여준다.사용자가 리스트를 보고 삭제할 요소를 입력받는다.입력 받는 요소가 리스트\[튜플\]에 포함되어 있다면, 해당 요소(튜플)를 삭제한다.
elif command == 'del': show\_list() del\_name = input('삭제할 일정') for idx, todo in enumerate(todos): if del\_name in todo: del todos\[idx\] break

위 코드(추가부분)와 이어서 elif문을 사용했습니다.

​

첫줄에는 사용자가 🗹1.del을 입력했을때 전체 리스트를 보여주었습니다.

input을 사용하여 🗹2.사용자가 삭제할 요소를 받았습니다.

for문과 enumerate()를 사용하여, 각요소(튜플) 및 인덱스를 받았고(todos)에 포함 \[(), ()\], if문 in을 사용하여 🗹3.사용자가 입력한 요소가 튜플에 포함되어 있다면, 해당 요소를 삭제하도록 코드를 작성하였습니다.

​

장점: 이 코드의 단점은 todos안의 튜플은 ('이름', '설명', '날짜')로 구성되어 있는데 이중 원하는 요소 하나만 입력해도 한번에 삭제가 가능합니다.

​

단점: 같은 요소가 반복될 경우 문제가 생길 수 있습니다.(개선필요)

일정 수정하기(mod)

mod기능 구형하기

일정을 작성하다 오타나, 날짜를 잘못 기입하는 경우가 발생합니다. 이때 사용될 수정하기 기능을 만들어봅시다.

​

필요한 기능

사용자가 mod을 입력했을때 전체 일정 리스트를 보여준다.사용자가 일정을 본 후, 변경할 일정을 입력받는다.변경할 일정이 todos에 있으면 새로운 요소(new\_value)를 받는다.기존 요소에 새로운 요소(new\_value)를 넣는다.

음... 일단 너무 복잡하니, 필수기능만 일단 몇가지 구현해봅시다.

elif command == 'mod': show\_list() mod\_name = input('수정할 일정') for idx, todo in enumerate(todos): if mod\_name in todo:

일단 삭제부분과 거의 동일하게 코드를 작성하였습니다. 작성하고 보니 수정할 요소가 특정필드('name', 'desc', 'date' 中 1) 어디에 있는지 확인해야할 필요가 있습니다.

mod\_field = input('수정할 필드') command\_name = ('name', 'desc', 'date') field\_idx = command\_name.index(mod\_field)

수정할 필드를 사용자에게 입력 받은 후, command\_name을 todos안의 저장된 튜플과 동일하게 매칭되도록 작성합니다.

command\_name = ('name', 'desc', 'date')

​

이후 사용자에게 입력받은 필드가 몇번째인지 확인하기 위해 index()메서드를 사용했습니다.

*#** 수정 elif command == 'mod': show\_list() mod\_name = input('수정할 일정') mod\_field = input('수정할 필드') command\_name = ('이름', '설명', '날짜') field\_idx = command\_name.index(mod\_field) for idx, todo in enumerate(todos): if* mod\_name in todo: before\_todo = todos\[idx\] new\_value = input('새로운' + command\_name\[field\_idx\]) new\_todo = \[before\_todo\[0\], before\_todo\[1\], before\_todo\[2\], before\_todo\[3\]\] new\_todo\[field\_idx\] = new\_value todos\[idx\] = (new\_todo\[0\], new\_todo\[1\], new\_todo\[2\], new\_todo\[3\])​

최종 완성본입니다. 궂이 before\_todo와 new\_todo를 구체적으로 만든 이유는 아래 print()때문이면서 todos안의 요소들이 모두 튜플이기 때문입니다.

​

튜플은 불변입니다. 따라서 todos\[idx\] = 'new\_value'를 직접적으로 대입할 수 없습니다. 완전히 새로운 튜플을 만들어 덮어씌는건 가능합니다. 그래서 new\_todo라는 리스트를 만들고 각 요소들을 최종적으로 todos\[idx\]에 넣었습니다.

원하는 대로 print()하기

수정이 되었으면, 수정이 완료되었다고 프로그램 상에서 알려주는 기능을 만들고 싶습니다.

name : study -> review desc : python date : 02.27

마지막으로 이렇게 print()하기 위해서는 어떻게 해야할까요? name 필드에서 수정된 study -> review만 출력되게 해야합니다.

​

파이썬 공부하시는 분들은 스스로 한번 생각해보시고 정답을 풀어보세요. 다음글에 정답을 공개하겠습니다.(추후업데이트)

\위에 사용된 코드를 참고해주세요\