新しいプログラム言語を勉強するときは、実際に何かを作りながら勉強するのがいいとよく聞きます。ある程度プログラムを描いたことがあれば、サイトや本などで構文を勉強するよりも実際に手を動かしながら必要になった構文を調べて行く方が色々覚えやすいと僕も思います。
ということで、僕も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() |
実行結果
$ 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 リスト操作」とかで調べながら作りました。上であげたようにこんな小さいプログラムでもいろんなことを勉強できます。すでに何かしらのプログラム言語を触ったことがある人ならこんな感じでちょっとしたものを作るのはとても勉強になりますよ。