Skip to content

Problem 5 (200pts): autocorrect

实现 autocorrect,它接受一个 typed_word、所有 word_list 列表、diff_function 和一个 limit

如果 typed_word 包含在 word_list 列表中,autocorrect 返回该单词。

否则,autocorrect 返回 word_list 中与提供的 typed_word 差异最小的单词,根据 diff_function。 但是,如果 typed_wordword_list 中任何单词的最低差异大于 limit,则返回 typed_word

重要: 如果 typed_word 不在 word_list 中,并且多个字符串与 typed_word 的最低差异相同(根据 diff_function),autocorrect 应返回 word_list 中出现的第一个字符串。

差异函数接受三个参数。 第一个是 typed_word,第二个是源单词(在此情况下,是 word_list 中的一个单词),第三个参数是 limit。 差异函数的输出是一个数字,表示两个字符串之间的差异量。

注意: 一些差异函数可能是非对称的(意思是交换前两个参数可能产生不同的输出),因此确保以正确顺序将参数传递给 diff_function。 我们将在问题 7 中看到一个非对称差异函数的例子。

这里是一个计算两个输入字符串长度差异的最小值 1 + limit 和长度差异的差异函数示例:

>>> def length_diff(w1, w2, limit):
...     return min(limit + 1, abs(len(w2) - len(w1)))
>>> length_diff('mellow', 'cello', 10)
1
>>> length_diff('hippo', 'hippopotamus', 5)
6

假设 typed_wordword_list 的所有元素都是小写且没有标点符号。

提示:尝试使用带有可选 key 参数的 maxmin

在编写任何代码之前,解锁测试以验证你对问题的理解:

$ python ok -q 05 -u

解锁完成后,开始实现你的解决方案。 你可以用以下命令检查正确性:

$ python ok -q 05