2

大家好,这是我的第一篇文章,我只编写了大约一周的代码,我的学校老师也不是最擅长解释事情的,所以请友好:) 我正在尝试制作一个程序来显示 a 的定义单词然后用户将输入他们认为的单词。如果他们做对了,他们将获得 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
4

2 回答 2

0

如果他们写对了,他们将获得 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
于 2014-01-19T18:25:59.660 回答
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

如果你想打印那个句子然后增加你应该写的分数

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

否则,您将尝试重新定义print哪个是保留关键字。Andand用于布尔运算 AND,而不是创建语句序列。

于 2014-01-19T18:58:12.017 回答