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_word 与 word_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_word 和 word_list 的所有元素都是小写且没有标点符号。
提示:尝试使用带有可选
key参数的max或min。
在编写任何代码之前,解锁测试以验证你对问题的理解:
$ python ok -q 05 -u
解锁完成后,开始实现你的解决方案。 你可以用以下命令检查正确性:
$ python ok -q 05