한메타자 같은 타이핑게임 만들기(업그레이드)에 오류가 있는 것 같습니다!
334
작성한 질문수 3
만약 문제가 "남박사"라고 한다면
"남박상"이라고 입력했을 때 정확도 100%가 나오게 됩니다.
그리고
"나박사"라고 입력하면 정확도가 실제 정확도보다 낮게 나옵니다.
break_korean을 했을 때 문제단어는 ['ㄴ', 'ㅏ', 'ㅁ', 'ㅂ', 'ㅏ', 'ㄱ', 'ㅅ', 'ㅏ']이고
사용자 입력은 ['ㄴ', 'ㅏ', 'ㅂ', 'ㅏ', 'ㄱ', 'ㅅ', 'ㅏ'] 이기에
'나'를 지나고 '박사'는 제대로 대응되서 계산하지 못합니다.
어떻게 해결해야 될까요?
답변 2
0
이 강좌는 사실 주 목적은 유니코드에 대한 내용을 이야기 하고자 만들어진 강좌이며 그걸 좀 더 흥미롭게 하기 위해 타이핑 게임이라는 소재를 활용했습니다. 그렇기 때문에 실제 한메타자 같은 타이핑 게임의 완성도에 비해선 떨어질 수 밖에 없는게 사실입니다. 타자게임의 목적에 치중해서 강좌를 만들면 사실 유니코드 내용에 초점이 맞춰지지 않기도 하고 다른 내용이 훨씬 더 복잡해 질 수 있는 문제가 생기기 때문입니다.
일단 말씀하신 내용은 정확도를 판단하는 로직이 단순하게 사용자가 입력한 내용을 초중종성으로 분리해서 각 글자의 위치만 매칭해보기 때문에 생기는 문제입니다. 실제로 타이핑 게임을 생각해보면 그보다 훨씬 더 많은 경우의 수가 있습니다. 말씀하신것 처럼 문제가 "남박사" 라고 가정하고 이야기 해보면
사용자가 "남박상" 이라고 입력한경우 출제 문제의 글자수보다 더 많이 입력된경우
사용자가 "남박" 이라고 입력한경우 출제 문제의 글자수보다 적게 입력된경우
이거 두가지만 처리한다고 해도 기존의 로직으로는 정확도를 계산하기 힘듭니다. 그리고 더 중요한건 정확도와 오류율을 어떻게 정의할지도 식을 생각해봐야 합니다. 일단 즉흥적으로 코드를 짠거라 참고하셔서 이렇게도 하는구나 정도로 보셨으면 좋겠습니다.
# 오타글자 카운팅 변수
error = 0
# 글자 입력이 모자란 경우를 체크하기 위한 변수
last_pos = 0
for i in range(len(q)):
c = q[i]
if i >= len(user_input):
break
# 입력된 글자를 최종 확인한 위치 기억
last_pos = i
# 입력된 글자중 i 번째 글자 v
v = user_input[i]
# 문제와 글자가 일치 하지 않으면
if c != v:
# 문제를 초,중,종성 분리
break_q = break_korean(c)
# 문제의 초,중,종성 갯수를 오류로 판단
error += abs(len(break_q))
# 사용자가 입력한 글자와 문제의 글자수를 확인하기 위해서
# 위에서 저장한 last_pos 값과 문제의 길이를 비교
mod = len(q) - (last_pos + 1)
# 사용자가 문제보다 입력한 글자수가 적다면
if mod > 0:
# 모자란 글자수만큼 루프
for i in range(mod+1, len(q)):
# 해당 하는 글자수만큼 오류카운팅
break_char = break_korean(q[i])
error += len(break_char)
src = break_korean(q)
total_len = len(src)
error_len = error
print(total_len, error_len)
위 코드는 결국 최종적으로 문제의 총 글자(초/중/종성)수와 틀린 글자수를 뽑아내게 됩니다. 이 2가지 데이터로 정확도와 오타율을 다시 계산하시면 전에 작성된 코드보다는 좀 더 정확도가 높아질듯 보입니다만 이 역시 즉흥적으로 생각나는데로 코딩한거라 미처 생각하지 못한 더 많은 경우의 수가 있을 수 있으니 참고하시기 바랍니다.
38강 = 연산자 더하고 빼기
0
60
2
주석처리
0
117
1
함수의 파라미터값 msg
0
155
1
강의자료 이미지 안나옴
0
239
3
강의자료 질문 두번째
0
165
3
강의자료 관련 질문
0
116
1
파이썬 예외 처리 try / except 파일 처리 코드가 실행이 안됩니다.
0
235
1
소수 너무 어려워요
0
245
1
imagefont 함수 사용
0
239
1
pylint
0
357
1
add 함수 문의 ㅠㅠ
0
283
1
형식 문의드립니다.
0
209
1
변수 명을 왜 src, tar로 하셨는지 궁금합니다.
0
602
1
숫자야구 코드를 짜 봤는데 뭔가 이상합니다.
0
253
1
zsh: command not found: pylint
0
269
1
텔레그램 봇 만들기 코드 실행이 안됩니다 박사님..ㅠ
0
546
1
질문드립니다.
1
374
2
list.reverse() 출력에 대해서 질문있습니다.
1
433
1
데코레이터 함수 및 동작시간 질문입니다.~
1
323
2
opencv 사용하면서 궁금한점 (해상도)
1
781
1
질문드립니다.
1
299
1
아래 오류가 뜨면서 vscode가 컴파일이 되지 않는데.. 혹시 왜이럴까요?
1
445
1
크롤링안되는 현상 문의 드립니다.
1
421
1
파이썬 크롤링 관련 문의
1
277
1





