回答編集履歴

2

さらなる質問を受けて追記

2021/09/02 07:52

投稿

TakaiY
TakaiY

スコア13792

test CHANGED
@@ -81,3 +81,83 @@
81
81
 
82
82
 
83
83
  こんな感じです。
84
+
85
+
86
+
87
+ ---
88
+
89
+
90
+
91
+ > a1,a2,a3...、b1,b2,b3...、さらに...、等の不特定名称の変数を動的に作成し、これを格納する辞書型の作成方法は有るのでしょうか?
92
+
93
+
94
+
95
+ 番号付きの変数を作りたくなった場合は、それは、リストに入れます。
96
+
97
+ というか、そういう情報を格納するためにリストがあるのです。
98
+
99
+
100
+
101
+ ```python
102
+
103
+ a1 = 10
104
+
105
+ a2 = 20
106
+
107
+ a3 = 30
108
+
109
+ ...
110
+
111
+ ```
112
+
113
+ としたければ、
114
+
115
+ ```python
116
+
117
+ a = []
118
+
119
+ a.append(0)
120
+
121
+ a.append(10)
122
+
123
+ a.append(20)
124
+
125
+ a.append(30)
126
+
127
+ ...
128
+
129
+ ```
130
+
131
+ こうすれば、
132
+
133
+ ```python
134
+
135
+ for i in range(4):
136
+
137
+ print(a[i])
138
+
139
+ ```
140
+
141
+ のようにアクセスできます。
142
+
143
+
144
+
145
+ この方法だと、リストの生成が面倒だという場合、データの設計が間違えている可能性が高いです。たとえば今回のような場合は、
146
+
147
+ ```python
148
+
149
+ a = []
150
+
151
+ for i in range(4):
152
+
153
+ a.append(i * 10)
154
+
155
+ ```
156
+
157
+ と書くことができます。こういう規則が無いのであれば、元データをファイルに作っておいて読む手もあります。
158
+
159
+
160
+
161
+ 数字が付いているとは言っても、 1,2,3,11,12,13...のように飛び飛びにしたい場合もあるでしょう。そういうう場合は、2次元配列にするとか、番号をキーとしたdictを使います。
162
+
163
+ アクセスするときも、1けためと2けためで別に生成するとになるでしょう。

1

質問を受けて追記

2021/09/02 07:52

投稿

TakaiY
TakaiY

スコア13792

test CHANGED
@@ -17,3 +17,67 @@
17
17
  ・変数名を動的に生成したいという場合は、その変数名を大抵リストやdictに置き換えるのが正しい方法です。
18
18
 
19
19
  dictで代替できない理由がありますか?
20
+
21
+
22
+
23
+
24
+
25
+ ---
26
+
27
+
28
+
29
+ > self.var_dict{"id":"self.var_id, "neme":"self.var_name"}と変数名の文字列を要素にした辞書型データは出来るのですが、これから変数名として取り出し、self.var_name="田中"と左辺が文字列でない状態にする方法が判りません。
30
+
31
+
32
+
33
+ dictに変数名を格納するのではありません。
34
+
35
+
36
+
37
+ > 又逆にself.var_dict["name"] = self.「var_+フィールド名 "name"」と直接文字列でない変数名を合成する方法が判りません。異常からvars()を見つけた次第です。上記の様に変数名を直接合成して作成する方法は有のでしょうか?
38
+
39
+
40
+
41
+ 変数名を合成するのでもありません。
42
+
43
+
44
+
45
+ StringVarは変数に入れなければならないわけではないのです。
46
+
47
+
48
+
49
+ StringVarそのものをdictに入れればいいのです。
50
+
51
+
52
+
53
+ ```python
54
+
55
+ var_dict['name'] = StringVar()
56
+
57
+ var_dict['id'] = StringVar()
58
+
59
+ ```
60
+
61
+
62
+
63
+ さらにこれを複数持ちたいのであれば、さらにリストやdictに入れます。
64
+
65
+
66
+
67
+ ```python
68
+
69
+
70
+
71
+ button_dict{'OK'} = {'name': StringVar(),
72
+
73
+ 'id!: StringVar()}
74
+
75
+ button_dict{'Cansel'} = {'name': StringVar(),
76
+
77
+ 'id!: StringVar()}
78
+
79
+ ```
80
+
81
+
82
+
83
+ こんな感じです。