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

質問編集履歴

1

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

2018/04/12 06:57

投稿

python3_beginer
python3_beginer

スコア46

title CHANGED
File without changes
body CHANGED
@@ -51,6 +51,7 @@
51
51
 
52
52
 
53
53
 
54
+
54
55
  ```ここに言語を入力
55
56
  コード
56
57
 
@@ -66,6 +67,7 @@
66
67
  if x[0] == x[-1]:
67
68
  score += 2
68
69
  elif (len(x[0]) == len(x[-1])):
70
+ #一文字以上異なる場合を処理、 しかし文字の位置が考慮されていないから不十分
69
71
  match = [i for i in set(x[0]) if i in x[-1]]
70
72
  if len(match) == len(x[0])-1:
71
73
  score += 1
@@ -106,4 +108,80 @@
106
108
 
107
109
 
108
110
 
111
+ ```
112
+
113
+
114
+
115
+
116
+ ※追記質問
117
+
118
+ 一文字だけ異なる場合のときに、私のループ処理では文字の位置が考慮されていない。
119
+
120
+ match = [i for i in set(x[0]) if i in x[-1]]
121
+
122
+ 集合の値のみを見ているため、文字の位置が関係していない。
123
+
124
+
125
+ 記入例)
126
+
127
+ note one!
128
+
129
+ この場合だと、ルール上は 文字の位置まで考慮するため、文字の長さが同じだが、スペルミスが2つ以上のため 0点
130
+
131
+ しかし、私のコードだと、文字の位置を考慮していないため、文字の長さが同じ、かつスペルミスが1つのため、1点
132
+
133
+ コメント頂いた方のコードを参照すると以下のようになる。
134
+
135
+
136
+
137
+ ```ここに言語を入力
138
+ コード
139
+
140
+ def mark(right_answer, answer):
141
+ if len(right_answer) != len(answer):
142
+ return 0
143
+
144
+ #文字の位置を考慮しがら、スペルミスを処理
145
+
146
+ diff = sum(
147
+ 1 for ra, a in zip(right_answer, answer) if ra != a
148
+ )
149
+ if diff == 0:
150
+ return 2
151
+ if diff == 1:
152
+ return 1
153
+
154
+ return 0
155
+
156
+
157
+ n = int(input())
158
+ total_score = sum(
159
+ mark(*input().split()) for _ in range(n)
160
+ )
161
+
162
+ print(total_score)
163
+
164
+ ```
165
+
166
+ なぜ以下のコードが文字の位置を考慮しがら、スペルミスを処理できる理由が分かるようでわかりません。
167
+
168
+ 先頭から文字の一致を確認し、スペルミスがあればその数を合計する処理でしょうか?
169
+
170
+
171
+
172
+ ```ここに言語を入力
173
+ コード
174
+
175
+ #文字の位置を考慮しがら、スペルミスを処理
176
+
177
+ diff = sum(
178
+ 1 for ra, a in zip(right_answer, answer) if ra != a
179
+ )
180
+ if diff == 0:
181
+ return 2
182
+ if diff == 1:
183
+ return 1
184
+
185
+ return 0
186
+
109
187
  ```