質問編集履歴

1

#追記質問 文字の位置を考慮しがら、スペルミスを処理をするには何が必要か

2018/04/12 06:57

投稿

python3_beginer
python3_beginer

スコア46

test CHANGED
File without changes
test CHANGED
@@ -104,6 +104,8 @@
104
104
 
105
105
 
106
106
 
107
+
108
+
107
109
  ```ここに言語を入力
108
110
 
109
111
  コード
@@ -134,6 +136,8 @@
134
136
 
135
137
  elif (len(x[0]) == len(x[-1])):
136
138
 
139
+ #一文字以上異なる場合を処理、 しかし文字の位置が考慮されていないから不十分
140
+
137
141
  match = [i for i in set(x[0]) if i in x[-1]]
138
142
 
139
143
  if len(match) == len(x[0])-1:
@@ -215,3 +219,155 @@
215
219
 
216
220
 
217
221
  ```
222
+
223
+
224
+
225
+
226
+
227
+
228
+
229
+
230
+
231
+ ※追記質問
232
+
233
+
234
+
235
+ 一文字だけ異なる場合のときに、私のループ処理では文字の位置が考慮されていない。
236
+
237
+
238
+
239
+ match = [i for i in set(x[0]) if i in x[-1]]
240
+
241
+
242
+
243
+ 集合の値のみを見ているため、文字の位置が関係していない。
244
+
245
+
246
+
247
+
248
+
249
+ 記入例)
250
+
251
+
252
+
253
+ note one!
254
+
255
+
256
+
257
+ この場合だと、ルール上は 文字の位置まで考慮するため、文字の長さが同じだが、スペルミスが2つ以上のため 0点
258
+
259
+
260
+
261
+ しかし、私のコードだと、文字の位置を考慮していないため、文字の長さが同じ、かつスペルミスが1つのため、1点
262
+
263
+
264
+
265
+ コメント頂いた方のコードを参照すると以下のようになる。
266
+
267
+
268
+
269
+
270
+
271
+
272
+
273
+ ```ここに言語を入力
274
+
275
+ コード
276
+
277
+
278
+
279
+ def mark(right_answer, answer):
280
+
281
+ if len(right_answer) != len(answer):
282
+
283
+ return 0
284
+
285
+
286
+
287
+ #文字の位置を考慮しがら、スペルミスを処理
288
+
289
+
290
+
291
+ diff = sum(
292
+
293
+ 1 for ra, a in zip(right_answer, answer) if ra != a
294
+
295
+ )
296
+
297
+ if diff == 0:
298
+
299
+ return 2
300
+
301
+ if diff == 1:
302
+
303
+ return 1
304
+
305
+
306
+
307
+ return 0
308
+
309
+
310
+
311
+
312
+
313
+ n = int(input())
314
+
315
+ total_score = sum(
316
+
317
+ mark(*input().split()) for _ in range(n)
318
+
319
+ )
320
+
321
+
322
+
323
+ print(total_score)
324
+
325
+
326
+
327
+ ```
328
+
329
+
330
+
331
+ なぜ以下のコードが文字の位置を考慮しがら、スペルミスを処理できる理由が分かるようでわかりません。
332
+
333
+
334
+
335
+ 先頭から文字の一致を確認し、スペルミスがあればその数を合計する処理でしょうか?
336
+
337
+
338
+
339
+
340
+
341
+
342
+
343
+ ```ここに言語を入力
344
+
345
+ コード
346
+
347
+
348
+
349
+ #文字の位置を考慮しがら、スペルミスを処理
350
+
351
+
352
+
353
+ diff = sum(
354
+
355
+ 1 for ra, a in zip(right_answer, answer) if ra != a
356
+
357
+ )
358
+
359
+ if diff == 0:
360
+
361
+ return 2
362
+
363
+ if diff == 1:
364
+
365
+ return 1
366
+
367
+
368
+
369
+ return 0
370
+
371
+
372
+
373
+ ```