Python - проверка орфографии

Привет всем, это мой первый пост, и я кодирую только около недели, мой школьный учитель также не очень хорош в объяснении вещей, так что будьте добры:) Я пытаюсь создать программу, которая будет отображать определение слово, то пользователь будет вводить то, что, по его мнению, является словом. Если они правильно поняли, им будет начислено 2 балла, если они ошибочно получат 1 букву, им будет начислено 1 балл, а если ошибочно будет более 1 буквы, то они получат дали 0 баллов. в будущем пользователь должен будет войти в систему, но я сначала работаю над этой частью. Есть идеи, как заставить это работать?

    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 ответа

Хорошо, если вы хотите, чтобы все было просто,

  • Ваша первая строка:

    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

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

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

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

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

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

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

Вместо того, чтобы писать свой собственный алгоритм, чтобы взять все это, вам нужно загрузить задачу эксперту difflib.SequenceMatcher.get_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
Другие вопросы по тегам