回答編集履歴

2

edit

2018/06/07 14:49

投稿

mkgrei
mkgrei

スコア8560

test CHANGED
@@ -93,3 +93,145 @@
93
93
  break
94
94
 
95
95
  ```
96
+
97
+
98
+
99
+ コメント追加
100
+
101
+
102
+
103
+ ```python
104
+
105
+ from collections import defaultdict
106
+
107
+
108
+
109
+ #変数名では抽象化できないので、定石通りラベルを用意して辞書で処理する
110
+
111
+ labels = list('abcd')
112
+
113
+ rates = {'a': 0, 'b': 0.05, 'c': 0.07, 'd':0.12}
114
+
115
+
116
+
117
+ # taxes = {k:0 for k in labels}と同じだが、気分でdefaultdictを使ってみた
118
+
119
+ taxes = defaultdict(float)
120
+
121
+ totals = defaultdict(float)
122
+
123
+
124
+
125
+ def get_input():
126
+
127
+ '''
128
+
129
+ データ入力を受け付ける
130
+
131
+ 3つの数字をゲットする
132
+
133
+ それぞれ、整数、整数、実数
134
+
135
+ 例外処理があればこの中で処理する
136
+
137
+ '''
138
+
139
+ item = int(input('Number'))
140
+
141
+ q = int(input('Quantity'))
142
+
143
+ p = float(input('price'))
144
+
145
+ return item, p, q
146
+
147
+
148
+
149
+ def get_label(item):
150
+
151
+ '''
152
+
153
+ 商品IDを準備しておいたラベルに対応付ける
154
+
155
+ 想定外のIDはNoneを返す
156
+
157
+ '''
158
+
159
+ if 100 <= item < 200:
160
+
161
+ return 'a'
162
+
163
+ elif 200 <= item < 300:
164
+
165
+ return 'b'
166
+
167
+ elif 300 <= item < 400:
168
+
169
+ return 'c'
170
+
171
+ elif 400 <= item < 500:
172
+
173
+ return 'd'
174
+
175
+ else:
176
+
177
+ return None
178
+
179
+
180
+
181
+ def get_total_tax(label, p, q):
182
+
183
+ '''
184
+
185
+ 入力分の総額と税(?)を計算する
186
+
187
+ レートはアイテムごとに異なるが、用意してあるものを引き出すためにラベルを使う
188
+
189
+ '''
190
+
191
+ total = p*q
192
+
193
+ tax = total*rates[label]
194
+
195
+ return total, tax
196
+
197
+
198
+
199
+ def show():
200
+
201
+ '''
202
+
203
+ 出力はここにまとめる
204
+
205
+ 他に税込みも出力できるし、ファイルに書き出すこともできる
206
+
207
+ '''
208
+
209
+ print(f'BeforeTax: {sum(totals.values())} Tax: {sum(taxes.values())}')
210
+
211
+
212
+
213
+ while True:
214
+
215
+ item, p, q = get_input() #入力ゲット
216
+
217
+ label = get_label(item) #ラベルゲット
218
+
219
+ if label is not None: #対応ラベルがある場合のみ総額と税を計算する
220
+
221
+ total, tax = get_total_tax(label, p, q) #総額と税の計算
222
+
223
+ taxes[label] += tax #総額を加算する
224
+
225
+ totals[label] += total #税を加算する
226
+
227
+ else: #対応するラベルがない場合はエラーと表示
228
+
229
+ print('Invalid Input')
230
+
231
+ show() #いずれにしろ暫定総額などを表示する
232
+
233
+ if input('Continue?') != 'y': #入力がy出ない限り打ち切り
234
+
235
+ break
236
+
237
+ ```

1

edit

2018/06/07 14:49

投稿

mkgrei
mkgrei

スコア8560

test CHANGED
@@ -82,13 +82,11 @@
82
82
 
83
83
  totals[label] += total
84
84
 
85
- show()
86
-
87
85
  else:
88
86
 
89
87
  print('Invalid Input')
90
88
 
91
- show()
89
+ show()
92
90
 
93
91
  if input('Continue?') != 'y':
94
92