teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

5

上書き

2021/02/03 08:30

投稿

morigami
morigami

スコア5

title CHANGED
File without changes
body CHANGED
@@ -39,7 +39,31 @@
39
39
  {'first': {'Aha-n': ['Aha-n Solo'], 'Aha~n': ['Aha~n Skywalker']}, 'middle': {'': ['Aha-n Solo', 'Aha~n Skywalker']}, 'last': {'Solo': ['Aha-n Solo'], 'Skywalker': ['Aha~n Skywalker']}}
40
40
  ['Aha~n Skywalker']
41
41
  ```
42
+ 修正後のコード
43
+ ```python
44
+ def init(data):
45
+ data['first'] = {}
46
+ data['middle'] = {}
47
+ data['last'] = {}
48
+
49
+ def lookup(data, label, name):
50
+ return data[label].get(name)
51
+
52
+ def store(data, *full_names):
53
+ for full_name in full_names:
54
+ names = full_name.split()
55
+   if len(names) == 2:
56
+ names.insert(1, '')
57
+ labels = 'first', 'middle', 'last'
58
+ for label, name in zip(labels, names):
59
+ people = lookup(data, label, name)
60
+ if people:
61
+ people.append(full_name)
62
+ else:
63
+ data[label][name] = [full_name]
64
+ ```
42
65
 
66
+
43
67
  store関数を用いて複数のデータを入れられるようにしたつもりです。
44
68
 
45
69
  store(d, 'Han Solo') のように一つのデータであれば正しく挙動してくれるのですが

4

更に修正

2021/02/03 08:30

投稿

morigami
morigami

スコア5

title CHANGED
File without changes
body CHANGED
@@ -33,6 +33,12 @@
33
33
  print(d)
34
34
  print(lookup(d, 'last', 'Skywalker'))
35
35
  ```
36
+
37
+ 実行結果
38
+ ```実行結果
39
+ {'first': {'Aha-n': ['Aha-n Solo'], 'Aha~n': ['Aha~n Skywalker']}, 'middle': {'': ['Aha-n Solo', 'Aha~n Skywalker']}, 'last': {'Solo': ['Aha-n Solo'], 'Skywalker': ['Aha~n Skywalker']}}
40
+ ['Aha~n Skywalker']
41
+ ```
36
42
 
37
43
  store関数を用いて複数のデータを入れられるようにしたつもりです。
38
44
 

3

修正

2021/02/03 08:10

投稿

morigami
morigami

スコア5

title CHANGED
File without changes
body CHANGED
@@ -14,7 +14,8 @@
14
14
  def store(data, *full_names):
15
15
  for full_name in full_names:
16
16
  names = full_name.split()
17
+ if len(names) == 2:
17
- if len(names) == 2: names.insert(1, '')
18
+ names.insert(1, '')
18
19
  labels = 'first', 'middle', 'last'
19
20
  for label, name in zip(labels, names):
20
21
  people = lookup(data, label, name)

2

コードをテキストで表示

2021/02/03 08:04

投稿

morigami
morigami

スコア5

title CHANGED
File without changes
body CHANGED
@@ -2,35 +2,37 @@
2
2
 
3
3
  下の画像がその時書いたプログラムと実行結果です。
4
4
 
5
+ ```python
5
- "def init(data):\n",
6
+ def init(data):
6
- " data['first'] = {}\n",
7
+ data['first'] = {}
7
- " data['middle'] = {}\n",
8
+ data['middle'] = {}
8
- " data['last'] = {}\n",
9
+ data['last'] = {}
9
- " \n",
10
+
10
- "def lookup(data, label, name):\n",
11
+ def lookup(data, label, name):
11
- " return data[label].get(name)\n",
12
+ return data[label].get(name)
12
- "\n",
13
- "def store(data, *full_names):\n",
14
- " for full_name in full_names:\n",
15
- " names = full_name.split()\n",
16
- " if len(names) == 2: names.insert(1, '')\n",
17
- " labels = 'first', 'middle', 'last'\n",
18
- " for label, name in zip(labels, names):\n",
19
- " people = lookup(data, label, name)\n",
20
- " if people:\n",
21
- " people.append(full_name)\n",
22
- " else:\n",
23
- " data[label][name] = [full_name]\n",
24
- "\n",
25
- " \n",
26
- "\n",
27
- "d = {}\n",
28
- "init(d)\n",
29
- "store(d, 'Han Solo', 'Aha-n Solo')\n",
30
- "store(d, 'Luke Skywalker', 'Anakin Skywalker', 'Anahaimu Skywalker', 'Aha~n Skywalker')\n",
31
- "print(d)\n",
32
- "print(lookup(d, 'last', 'Skywalker'))"
33
13
 
14
+ def store(data, *full_names):
15
+ for full_name in full_names:
16
+ names = full_name.split()
17
+ if len(names) == 2: names.insert(1, '')
18
+ labels = 'first', 'middle', 'last'
19
+ for label, name in zip(labels, names):
20
+ people = lookup(data, label, name)
21
+ if people:
22
+ people.append(full_name)
23
+ else:
24
+ data[label][name] = [full_name]
25
+
26
+
27
+
28
+ d = {}
29
+ init(d)
30
+ store(d, 'Han Solo', 'Aha-n Solo')
31
+ store(d, 'Luke Skywalker', 'Anakin Skywalker', 'Anahaimu Skywalker', 'Aha~n Skywalker')
32
+ print(d)
33
+ print(lookup(d, 'last', 'Skywalker'))
34
+ ```
35
+
34
36
  store関数を用いて複数のデータを入れられるようにしたつもりです。
35
37
 
36
38
  store(d, 'Han Solo') のように一つのデータであれば正しく挙動してくれるのですが

1

コードをテキストで表示

2021/02/03 07:43

投稿

morigami
morigami

スコア5

title CHANGED
File without changes
body CHANGED
@@ -1,8 +1,36 @@
1
1
  jupyter lab で勉強しながら遊んでたら、プログラムが思ってたのと違う挙動をし始めました
2
2
 
3
3
  下の画像がその時書いたプログラムと実行結果です。
4
- ![イメージ説明](8acac2beebe40dd485873eb033e3988f.png)
5
4
 
5
+ "def init(data):\n",
6
+ " data['first'] = {}\n",
7
+ " data['middle'] = {}\n",
8
+ " data['last'] = {}\n",
9
+ " \n",
10
+ "def lookup(data, label, name):\n",
11
+ " return data[label].get(name)\n",
12
+ "\n",
13
+ "def store(data, *full_names):\n",
14
+ " for full_name in full_names:\n",
15
+ " names = full_name.split()\n",
16
+ " if len(names) == 2: names.insert(1, '')\n",
17
+ " labels = 'first', 'middle', 'last'\n",
18
+ " for label, name in zip(labels, names):\n",
19
+ " people = lookup(data, label, name)\n",
20
+ " if people:\n",
21
+ " people.append(full_name)\n",
22
+ " else:\n",
23
+ " data[label][name] = [full_name]\n",
24
+ "\n",
25
+ " \n",
26
+ "\n",
27
+ "d = {}\n",
28
+ "init(d)\n",
29
+ "store(d, 'Han Solo', 'Aha-n Solo')\n",
30
+ "store(d, 'Luke Skywalker', 'Anakin Skywalker', 'Anahaimu Skywalker', 'Aha~n Skywalker')\n",
31
+ "print(d)\n",
32
+ "print(lookup(d, 'last', 'Skywalker'))"
33
+
6
34
  store関数を用いて複数のデータを入れられるようにしたつもりです。
7
35
 
8
36
  store(d, 'Han Solo') のように一つのデータであれば正しく挙動してくれるのですが