2014-01-19 1 views
2

안녕하십니까,이 사람은 내 첫 번째 게시물이고 약 1 주일 만 코딩했습니다. 학교 선생님도 일을 설명하는 데 너무 좋지 않습니다. :) 프로그램을 만들려고합니다. 그 단어의 정의를 표시합니다 다음 사용자가 그들이 생각하는 단어를 입력합니다. 그들은 그것을 얻으면 그들은 2 점을 받게됩니다, 그들이 1 개의 문자를 잘못하면 그들은 1 점을 부여 받게됩니다. 편지가 틀린 경우 0 점이 부여됩니다. 앞으로 사용자는 로그인해야하지만이 부분부터 먼저 작업하고 있습니다. 이 아이디어를 어떻게 활용할 수 있습니까?Python - 스펠링 테스트

score = score 
definition1 = "the round red or green fruit grown on a tree and used in pies" 
word1 = "apple" 
def spellingtest(): 
    print (definition1) 
spellinginput = input ("enter spelling") 
if spellinginput == word1 
    print = ("Well done, you have entered spelling correctly") and score = score+100 

편집 : 내가 그것을 실행하면 내가이 줄에 잘못된 구문 오류가

if spellinginput == word1 
+2

무엇이 문제입니까? – martineau

+1

좀 더 자세하게 질문 할 수 있다면 더 나은 응답을 얻을 수 있습니다. 코드를 실행할 때 어떤 일이 생기며 결과가 예상 한 것과 어떻게 다릅니 까? –

+0

조금 편집했습니다 –

답변

0

그들은 1 편지 오해하는 경우가 바로 그들이, 2 점을 수여됩니다 얻을 경우 1 점을 받으면 문자가 잘못되면 0 점이 부여됩니다.

생각만큼 쉽지 않습니다. 하나의 잘못된 철자는 단일 문자를 교체 apple - apqle

대신에 자신의 알고리즘을 작성하는 단일 문자 apple -> appple

  • 단일 문자의 삭제 apple -> aple
    1. 삽입을 의미 이 모든 작업을 수행 할 때 전문가에게 작업을로드 해제해야합니다. difflib.SequenceMatcher.get_opcode

      rmines, 한 문자열을 다른 문자열로 변환하는 데 필요한 변경 사항 및 작업은 opcode를 이해하고 구문 분석하고 변형 수가 하나를 초과하는지 판단하는 것입니다.

      구현

      misspelled = ["aple", "apqle", "appple","ale", "aplpe", "apppple"] 
      from difflib import SequenceMatcher 
      word1 = "apple" 
      def check_spelling(word, mistake): 
          sm = SequenceMatcher(None, word, mistake) 
          opcode = sm.get_opcodes() 
          if len(opcode) > 3: 
           return False 
          if len(opcode) == 3: 
           tag, i1, i2, j1, j2 = opcode[1] 
           if tag == 'delete': 
            if i2 - i1 > 1: 
             return False 
           else: 
            if j2 - j1 > 1: 
             return False 
          return True 
      

      출력은 간단하게 유지하려면

      for word in misspelled : 
          print "{} - {} -> {}".format(word1, word, check_spelling(word1, word)) 
      
      
      apple - aple -> True 
      apple - apqle -> True 
      apple - appple -> True 
      apple - ale -> False 
      apple - aplpe -> False 
      apple - apppple -> False 
      
  • +0

    아마도 Levenshtein 대신 두 개의 인접한 문자를 하나의 단일 오류로 바꾸는 것을 고려해보십시오. – Hyperboreus

    +0

    고마워, 내가 새롭고 이걸로 내 수업에 나가면 이상하게 보일거야. 어떻게 입력이 정확한 철자법과 일치하는지 "잘 했어. 맞아." 올바른 맞춤법입니다 ... "일치하지 않는 경우 –

    0

    좋아,

    • 첫 번째 라인 :

      당신이 무엇을 달성하고자하는 확실하지

      score = score

    , 당신이 제로로 초기화해야합니다

    score = 0 
    
    • 당신의 if 성명에서

      if spellinginput == word1

    끝에 콜론이 없습니다.

    • 함수

      def spellingtest():

    는 정의를 인쇄하도록되어 있지만 호출되지 않습니다. 또한 전역 변수를 사용하므로 권장하지 않습니다. 그것은 당신이 그 문장을 인쇄 한 후 늘리려면

    def spellingtest (definition): 
        print (definition) 
    

    는 그런 다음

    spellingtest(definition1) 
    
    • 마지막 라인

      print = ("Well done, you have entered spelling correctly") and score = score+100

    를 호출 할 필요가 있어야한다 너 wr해야 점수 ite

    print ("Well done, you have entered spelling correctly") 
    score = score + 100 
    

    그렇지 않은 경우 예약어로 print을 다시 정의하려고합니다. and은 부울 연산 AND에 사용되며 일련의 명령문을 만들지는 않습니다.

    +0

    감사합니다. 이제 점수가 정의되지 않습니다. –

    +0

    감사합니다. 정의도 인쇄되지 않습니다. 철자를 묻는 것뿐입니다. –