2014-01-19 3 views
2

Привет всем, это мой первый пост, и я только кодировал около недели, мой школьный учитель тоже не самый лучший из объясняющих вещей, так что будь приятным :) Я пытаюсь сделать программу который будет отображать определение слова, тогда пользователь будет вводить то, что, по их мнению, это слово. Если они правильно это сделают, они получат 2 балла, если они получат 1 букву неправильно, тогда им будет дано 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 

Edit: Когда я запускаю его я получаю недопустимую синтаксическую ошибку на этой линии

if spellinginput == word1 
+2

В чем проблема? – martineau

+1

Вы получите лучший ответ, если сможете задать свой вопрос немного подробнее. Что происходит, когда вы запускаете свой код и как результат отличается от того, что вы ожидали от него? –

+0

Я немного его отредактировал –

ответ

0

Если они получают это право, они будут награждены 2 очка, если они получают 1 письма неправильно то им будет дано 1 балл, и если более 1 буквы ошибочно, то они получат 0 очков.

Это не так просто, как вы могли подумать. Один неправильно правописание будет означать,

  1. вставки одного символа apple -> appple
  2. Удаление одного символа apple -> aple
  3. Замена одного символа apple - apqle

Вместо того, чтобы писать свой собственный алгоритм возьмите все это, вам необходимо загрузить задание эксперту difflib.SequenceMatcher.get_opcode

Это dete rmines, изменения, необходимые для преобразования одной строки в другую, а ваше задание - понимать и анализировать коды операций и определять, превышает ли количество преобразований.

Реализация

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

, если вы хотите напечатать эту фразу, а затем увеличить оценка, которую вы должны сделать Ite

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

иначе вы пытаетесь переопределить print, которая является зарезервированным ключевым словом. И and используется для булевой операции AND, а не для создания последовательности операторов.

+0

Спасибо, теперь я получаю оценку не определен –

+0

Спасибо, он также не напечатает определение. Он просто просит орфографию –