【Python】メモアプリを作成してpythonの配列操作、辞書型、while文を学ぶ

【Python】メモアプリを作成してpythonの配列操作、辞書型、while文を学ぶ

当ページのリンクには広告が含まれています。




Pythonの基礎を身につけるために簡単なメモアプリを作ります。

メモアプリの仕様

  • メモを追加するのか、メモを出力するのかのモードを選択させる。
  • 追加モードを選択した場合の動作は以下とする。
    • 「メモのタイトルを入力してください。」という表示をさせる
    • メモのタイトルを入力
    • 「メモの本文を入力してください」という表示をさせる
    • 本文を入力
  • メモの出力を選択した場合、作成したメモを出力させる
  • 定義していないモードを選択した場合は「エラーです」と出力させる
  • メモは常に起動状態にさせておく。

Pythonの基礎

メモアプリを作成するためにPythonの基礎を簡単にまとめておきます。

リストの操作

  • ひとまずリストを作成します。

    1
    2
    3
    >>> s = ['a', 'b', 'c', 'd', 'e', 'f']
    >>> s
    ['a', 'b', 'c', 'd', 'e', 'f']
  • リストの0番目を取り出したいときは以下のとおりです。

    1
    2
    >>> s[0]
    'a'
  • 2番目から5番目の文字列を取り出したいときは以下のように記述します。

    1
    2
    >>> s[2:5]
    ['c', 'd', 'e']
  • 2番目から5番目の文字列を入れ替えたいときは以下のように記述します

    1
    2
    3
    >>> s[2:5] = ['C', 'D', 'E']
    >>> s
    ['a', 'b', 'C', 'D', 'E', 'f']
  • 2番目から5番目の文字列を削除したい場合は、空のリストを代入すれば削除できます。

    1
    2
    3
    >>> s[2:5]=[]
    >>> s
    ['a', 'b', 'f']
  • [:]とすると全部のリストを取得できます。これに空のリストを指定すれば、全削除になります。

    1
    2
    3
    4
    5
    >>> s[:]
    ['a', 'b', 'f']
    >>> s[:] = []
    >>> s
    []
  • 次に文字列を加えたい場合は、.append()メソッドを使用します。

    1
    2
    3
    >>> s.append('a')
    >>> s
    ['a']
  • 先頭に文字列を加えたい場合は、insert()で0を指定して以下のように記述します。

    1
    2
    3
    >>> s.insert(0, 'z')
    >>> s
    ['z', 'a']
  • リストの中の末尾の文字を取り出したい場合は以下のように.pop()を使います。

    1
    2
    3
    4
    >>> s.pop()
    'a'
    >>> s
    ['z']
  • リストの先頭の文字を取り出したいときは0を指定すればOKです。

    1
    2
    >>> s.pop(0)
    'z'
  • リストの中の値を削除するものとしてはdelというのがあります。

    1
    2
    3
    4
    >>> s = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> del s[0]
    >>> s
    [2, 3, 4, 5, 6, 7, 8, 9]
  • 特定の値を指定して削除したい場合は、remove()を用います。

    1
    2
    3
    4
    >>> n = [1, 2, 2, 2, 3]
    >>> n.remove(2)
    >>> n
    [1, 2, 2, 3]
  • remove()は、該当する値がなくなるまで有効です。

    1
    2
    3
    4
    5
    6
    7
    8
    >>> n.remove(2)
    >>> n.remove(2)
    >>> n.remove(2)
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    ValueError: list.remove(x): x not in list
    >>> n
    [1, 3]
  • リストの結合は、extend()が便利です。

    1
    2
    3
    4
    5
    6
    >>> s
    [2, 3, 4, 5, 6, 7, 8, 9]
    >>> n.extend(s)
    >>> n
    [1, 3, 2, 3, 4, 5, 6, 7, 8, 9]
    >>>

辞書型

  • 辞書型は、キーとバリューの組み合わせが含まれているデータのことです。
  • 早速作成してみます。

    1
    2
    3
    >>> memo = {'title': 10, 'content':20}
    >>> memo
    {'title': 10, 'content': 20}
  • typeを見てみると’dict’となります。

    1
    2
    >>> type(memo)
    <class 'dict'>
  • キーを指定すればバリューが取り出せます。

    1
    2
    3
    4
    >>> memo['title']
    10
    >>> memo['content']
    20
  • キーを指定して値を代入することができます。

    1
    2
    3
    >>> memo['title']='XXXX'
    >>> memo
    {'title': 'XXXX', 'content': 20}
  • 新たなキーとバリューを作成することも可能です。

    1
    2
    3
    >>> memo['email'] = 'aaa@example.com'
    >>> memo
    {'title': 'XXXX', 'content': 20, 'email': 'aaa@example.com'}
  • キーは文字だけでなくint(数値)でもOKです。

    1
    2
    3
    >>> memo[1] = 10000
    >>> memo
    {'title': 'XXXX', 'content': 20, 'email': 'aaa@example.com', 1: 10000}
  • 辞書の作成はdictを用いても可能です

    1
    2
    3
    >>> dict(a=20, b=40)
    {'a': 20, 'b': 40}
    >>>

input関数

  • input関数は、Whileループとセットでよく使われます。何らかの入力をコンソール上で要求し、条件を満たす入力がされたらプログラムが終了するコードの例を以下に記載します。
sample.py
1
2
3
4
5
6
7
8
while True:
word = input('enter:')
if word == 'ok':
break
print('next')

# enter:ok ← okと入力
# next

メモアプリの実装



学んだpythonの知識を用いてメモアプリを実装していきましょう。

メモアプリの仕様の中で、簡単に作れそうな部分からコードを書いていきます。

まずは、”メモのタイトルを入力してください”という文字列を出力し、何らかの文字を入力させて出力させてみます。

memoapp.py
1
2
3
4
5
6
7
8
9
10
print('メモを入力してください')
a = input()
print('入力された文字は')
print(a)


# メモを入力してください
# aiueo
# 入力された文字は
# aiueo

次に辞書型でメモのタイトルとメモの本文を定義して、タイトルと本文を登録させるところまで実装します。

memoapp.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
memo = {"タイトル":"未設定", "本文":"未設定"}

print('メモのタイトルを入力してください')
memo["タイトル"] = input()
print('メモの本文を入力してください')
memo["本文"] = input()
print("######################################")
print(" ")
print("入力されたメモは")
print(memo["タイトル"] + ":" + memo["本文"])


# $ ~/python-study /usr/local/bin/python3 "/Users/omathin/python-study/memoapp.py"
# メモのタイトルを入力してください
# pythonコード書いてます
# メモの本文を入力してください
# メモ作成まで完成しました
# ######################################

# 入力されたメモは
# pythonコード書いてます:メモ作成まで完成しました

次に複数のメモを管理できるように配列を使います。まずは2つのメモを管理できるようにします。

memoapp.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

memos = [{"タイトル":"未設定", "本文":"未設定"}, {"タイトル":"未設定", "本文":"未設定"}]

print('1つ目のメモのタイトルを入力してください')
memos[0]["タイトル"] = input()
print('1つ目のメモの本文を入力してください')
memos[0]["本文"] = input()
print('2つ目のメモのタイトルを入力してください')
memos[1]["タイトル"] = input()
print('2つ目のメモの本文を入力してください')
memos[1]["本文"] = input()
print("######################################")
print(" ")
print("入力されたメモは")
print(memos[0]["タイトル"] + ":" + memos[0]["本文"])
print(memos[1]["タイトル"] + ":" + memos[1]["本文"])

# 1つ目のメモのタイトルを入力してください
# python
# 1つ目のメモの本文を入力してください
# コーディング
# 2つ目のメモのタイトルを入力してください
# ruby
# 2つ目のメモの本文を入力してください
# コーディング2
# ######################################

# 入力されたメモは
# python:コーディング
# ruby:コーディング2

次に空の配列を用意して、そこにメモを追加していくような処理にします。

memoapp.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38

memos = []

# memos = [{"タイトル":"未設定", "本文":"未設定"}, {"タイトル":"未設定", "本文":"未設定"}]

print('1つ目のメモのタイトルを入力してください')
title = input()
print('1つ目のメモの本文を入力してください')
content = input()
memo = {"タイトル": title, "本文": content}
memos.append(memo)

print('2つ目のメモのタイトルを入力してください')
title = input()
print('2つ目のメモの本文を入力してください')
content = input()
memo = {"タイトル": title, "本文": content}
memos.append(memo)

print("######################################")
print(" ")
print("入力されたメモは")
print(memos[0]["タイトル"] + ":" + memos[0]["本文"])
print(memos[1]["タイトル"] + ":" + memos[1]["本文"])

# 1つ目のメモのタイトルを入力してください
# python1
# 1つ目のメモの本文を入力してください
# code1
# 2つ目のメモのタイトルを入力してください
# ruby1
# 2つ目のメモの本文を入力してください
# code2
# ######################################

# 入力されたメモは
# python1:code1
# ruby1:code2

メモの出力部分をfor文を用いて出力させます。

memoapp.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

memos = []

print('1つ目のメモのタイトルを入力してください')
title = input()
print('1つ目のメモの本文を入力してください')
content = input()
memo = {"タイトル": title, "本文": content}
memos.append(memo)

print('2つ目のメモのタイトルを入力してください')
title = input()
print('2つ目のメモの本文を入力してください')
content = input()
memo = {"タイトル": title, "本文": content}
memos.append(memo)

print("######################################")
print(" ")
print("入力されたメモは")

for memo in memos:
print(memo["タイトル"] + ":" + memo["本文"])

# 1つ目のメモのタイトルを入力してください
# python1
# 1つ目のメモの本文を入力してください
# code1
# 2つ目のメモのタイトルを入力してください
# ruby1
# 2つ目のメモの本文を入力してください
# code2
# ######################################

# 入力されたメモは
# python1:code1
# ruby1:code2

メモを作成する部分をメソッド化させましょう。

memoapp.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

def create_memo():
print('メモのタイトルを入力してください')
title = input()
print('メモの本文を入力してください')
content = input()
return {"タイトル":title, "本文":content}

memos = []
memos.append(create_memo())

print("######################################")
print(" ")
print("入力されたメモは")

for memo in memos:
print(memo["タイトル"] + ":" + memo["本文"])

# メモのタイトルを入力してください
# 記事作成
# メモの本文を入力してください
# ブログ1記事作成
# ######################################

# 入力されたメモは
# 記事作成:ブログ1記事作成

メモを出力する部分をメソッド化させましょう。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

def create_memo():
print('メモのタイトルを入力してください')
title = input()
print('メモの本文を入力してください')
content = input()
return {"タイトル":title, "本文":content}

def show_memo():
print("######################################")
print(" ")
print("入力されたメモは")
for memo in memos:
print(memo["タイトル"] + ":" + memo["本文"])


memos = []
memos.append(create_memo())

show_memo()



# メモのタイトルを入力してください
# 記事作成
# メモの本文を入力してください
# ブログ1記事作成
# ######################################

# 入力されたメモは
# 記事作成:ブログ1記事作成

モードの選択表示をさせます。

memoapp.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41

def create_memo():
print('メモのタイトルを入力してください')
title = input()
print('メモの本文を入力してください')
content = input()
return {"タイトル":title, "本文":content}

def show_memo():
print("######################################")
print(" ")
print("入力されたメモは")
for memo in memos:
print(memo["タイトル"] + ":" + memo["本文"])

memos = []

print("メモを追加【add】")
print('メモを表示【show】')
mode = input("モードを選んでください:")
if mode == "add":
memos.append(create_memo())
elif mode == "show":
show_memo()
else:
print("エラーです")



# メモを追加【add】
# メモを表示【show】
# モードを選んでください:add
# メモのタイトルを入力してください
# ブログ作成
# メモの本文を入力してください
# 1記事作成
# $ ~/python-study /usr/local/bin/python3 "/Users/omathin/python-study/memoapp.py"
# メモを追加【add】
# メモを表示【show】
# モードを選んでください:show
# ######################################

これだとメモが消えてしまうので、メモアプリが常に起動状態にさせるためにwhileを使用します。

memoapp.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55

def create_memo():
print('メモのタイトルを入力してください')
title = input()
print('メモの本文を入力してください')
content = input()
return {"タイトル":title, "本文":content}

def show_memo():
print("######################################")
print(" ")
print("入力されたメモは")
for memo in memos:
print(memo["タイトル"] + ":" + memo["本文"])

memos = []

while True:
print("メモを追加【add】")
print('メモを表示【show】')
mode = input("モードを選んでください:")
if mode == "add":
memos.append(create_memo())
elif mode == "show":
show_memo()
else:
print("エラーです")



# メモを追加【add】
# メモを表示【show】
# モードを選んでください:add
# メモのタイトルを入力してください
# ブログを作成
# メモの本文を入力してください
# 1記事作成
# メモを追加【add】
# メモを表示【show】
# モードを選んでください:add
# メモのタイトルを入力してください
# 料理を作る
# メモの本文を入力してください
# 卵焼きを作る
# メモを追加【add】
# メモを表示【show】
# モードを選んでください:show
# ######################################

# 入力されたメモは
# ブログを作成:1記事作成
# 料理を作る:卵焼きを作る
# メモを追加【add】
# メモを表示【show】
# モードを選んでください:

ひとまず仕様通りのメモアプリの作成はできたかな、と思います。

他にも、「メモの上限を5つまでにする」とか「メモを削除するモードを加える」とかもチャレンジしてみてください。

まとめ



本記事では、メモアプリを作成しながらpythonの基礎を学ぶ、というテーマでまとめていきました



本記事でまとめた内容をベースに、プログラミングの学習を楽しんでいただけたら幸いです。



Pythonの基礎を学びた方へ(Udemy)

シリコンバレーの現役エンジニアによるUdemyの講座「現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイル」を参照してください。30日間の返金保証付きです。

コメント