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 баллов.
Это не так просто, как вы думаете. Одно неправильное написание будет означать,
- Вставка одного символа
apple -> appple
- Удаление одного символа
apple -> aple
- Замена одного символа
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