Python - 拼写测试

时间:2014-01-19 18:10:02

标签: python testing spelling

大家好,这是我的第一篇文章,我只编写了大约一个星期,我的学校老师也不是最好的解释事情,所以很好:)我正在尝试制作一个程序,将显示一个一个单词的定义然后用户将输入他们认为的单词是什么。如果他们做对了他们将被授予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 个答案:

答案 0 :(得分:0)

  

如果他们做对了,他们将获得2分,如果他们得到1分   信错了然后他们会得到1分,如果超过1个字母   错了,那么他们将获得0分。

这并不像你想象的那么简单。单个错误拼写就意味着,

  1. 插入单个字符apple -> appple
  2. 删除单个字符apple -> aple
  3. 替换单个字符apple - apqle
  4. 您需要将任务卸载到专家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
    

答案 1 :(得分: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这是一个保留关键字。 and用于布尔运算AND,而不是用于创建语句序列。