質問編集履歴
1
#追記質問 文字の位置を考慮しがら、スペルミスを処理をするには何が必要か
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
|
```
|