Python3のお勉強 「ToDoリスト」作ってみる

新しいプログラム言語を勉強するときは、実際に何かを作りながら勉強するのがいいとよく聞きます。ある程度プログラムを描いたことがあれば、サイトや本などで構文を勉強するよりも実際に手を動かしながら必要になった構文を調べて行く方が色々覚えやすいと僕も思います。

ということで、僕もPythonの勉強をするためにCLIなToDoリストを書いてみることにしました。

ToDoリスト ソースコード

ToDoの登録、一覧、終了、削除ができる簡単なプログラムです。使っているPythonの機能としては、以下です。

  • 変数
  • ディクショナリ
  • リスト
  • 標準入力、標準出力
  • 繰り返し
  • 分岐
  • 関数

# ToDoリストを登録する変数
todo_list = []
# エントリーポイント
def start_repl():
print("簡単なToDoプログラム")
while True:
print("todo>> ",end='') # endオプションにから文字を入れると改行せずに出力
commands = input().split(' ')
if commands[0] == "bye":
print("バイバイ!")
break
elif commands[0] == "add" and len(commands) >= 2:
add_todo(commands[1])
elif commands[0] == "delete" and len(commands) >= 2:
delete_todo(commands[1])
elif commands[0] == "done" and len(commands) >= 2:
done_todo(commands[1])
elif commands[0] == "list":
if len(commands) >= 2 and commands[1] == "all":
show_todo(True)
else:
show_todo()
elif commands[0] == "help":
show_help()
elif len(commands) > 0:
print("コマンドが見つかりません。({})".format(commands[0]))
return
# データの登録処理
def add_todo(text):
todo_list.append(todo_data(text=text, done=False))
# 登録データをディクショナリで作成する
def todo_data(text='', done=False):
return {"text":text,"done":done}
# noで指定されたToDoを削除する
def delete_todo(no):
todo_list.pop(int(no))
# noで指定されたToDoをdoneにする
def done_todo(no):
todo_list[int(no)]["done"] = True
# 一覧表示する
# 基本的にdoneな項目は表示しない
# "list all"コマンドでdoneな項目も表示
def show_todo(show_all=False):
idx = 0
for todo in todo_list:
if show_all or not show_all and not todo["done"]:
show_todo_format(idx,todo)
idx += 1
# ToDoの表示フォーマットを決める
def show_todo_format(no, todo):
print("No:{0} Text:{1} Done:{2}".format(no, todo["text"], str(todo["done"])))
# ヘルプの表示
def show_help():
message = """
使い方
1. 登録する
add [ToDoの内容]
2. 削除する
delete [list表示時のNo]
3. ToDoに終了フラグを設定する
done [list表示時のNo]
4. 一覧表示
list (省略可: [all])
キーワード「all」をつけて終了したToDoも表示
5. ヘルプの表示
help
6. 終了
bye
"""
print(message)
if __name__ == "__main__":
# execute only if run as ascript
start_repl()
view raw todo.py hosted with ❤ by GitHub

実行結果

$ python3 todo.py
簡単なToDoプログラム
todo>> help

    使い方
    1. 登録する
       add [ToDoの内容]
    2. 削除する
       delete [list表示時のNo]
    3. ToDoに終了フラグを設定する
       done [list表示時のNo]
    4. 一覧表示
       list (省略可: [all])
         キーワード「all」をつけて終了したToDoも表示
    5. ヘルプの表示
       help
    6. 終了
       bye
    
todo>> add 起きる
todo>> add 食べる
todo>> add 寝る
todo>> list
No:0  Text:起きる Done:False
No:1  Text:食べる Done:False
No:2  Text:寝る Done:False
todo>> done 1
todo>> list
No:0  Text:起きる Done:False
No:2  Text:寝る Done:False
todo>> list all
No:0  Text:起きる Done:False
No:1  Text:食べる Done:True
No:2  Text:寝る Done:False
todo>> delete 1
todo>> list
No:0  Text:起きる Done:False
No:1  Text:寝る Done:False
todo>> bye
バイバイ!
    

やってみて

やったこととしては単純で、ユーザからの入力を1行ずつ受け取り解析して入力に対応する処理を実行します。start_repl関数でひたすら入力を受け取り、対応する関数を実行するということを繰り返しています。

何回かPythonのコードを書いたことはありましたが構文は全然覚えれていなく、わからないことが結構あり「Python3 文字列分割」とか「Python3 リスト操作」とかで調べながら作りました。上であげたようにこんな小さいプログラムでもいろんなことを勉強できます。すでに何かしらのプログラム言語を触ったことがある人ならこんな感じでちょっとしたものを作るのはとても勉強になりますよ。