From acbbfb582e8528826b1a8209caad82db567db460 Mon Sep 17 00:00:00 2001 From: wizardforcel <562826179@qq.com> Date: Mon, 7 Aug 2017 22:22:26 +0800 Subject: [PATCH] ex17 --- ex17.md | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/ex17.md b/ex17.md index 4242005..4388c2f 100644 --- a/ex17.md +++ b/ex17.md @@ -1,5 +1,13 @@ # 练习 17:字典 +> 原文:[Exercise 17: Dictionary](https://learncodethehardway.org/more-python-book/ex17.html) + +> 译者:[飞龙](https://github.com/wizardforcel) + +> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/) + +> 自豪地采用[谷歌翻译](https://translate.google.cn/) + 你应该熟悉 Python 的`dict`类。无论什么时候,你编写这样的代码: ```py @@ -205,3 +213,25 @@ print("The city for the state 'TX' is: %s" % city) > 如果你是那种担心记不住任何东西的人,那么这个练习会为你将来带来巨大的帮助。能够遵循流程来记住某些东西,有助于克服任何记忆的挫折。你并不是沉浸在“失败”中,而是可以在坚持中看到缓慢的改进。当你这样做,你会看到改善你的回忆的方式和黑魔法,并且你会做得更好。你只需要相信我,这似乎是一种缓慢的学习方式,但它比其他技术要快得多。 +## 从记忆中实现 + +现在是时候走到你的电脑旁边 - 把你的纸质笔记放在另一个房间或地板上 - 并根据记忆尝试你的第一个实现。你的第一次尝试可能完全是一场灾难,也可能完正确。你最可能不习惯从记忆中实现任何东西。只要放下任何你记得的东西,当你到达你的记忆的彼端,回到另一个房间,记忆更多东西。经过几次到你的记忆空间的旅行,你会进入它,记忆会更好地流出来。你完全可以再次访问你的记忆笔记。这一切都关于,试图保持代码的记忆并提高自己的技能。 + +我建议你首先写下你的想法,无论是测试,代码还是两者。然后使用您可以回忆的内容,来实现或回忆代码的其他部分。如果你首先坐下来并记住`test_set`函数名和几行代码,然后把它们写下来。当他们在你的头脑中,立即利用它们。一旦你完成了,尽你最大的努力,使用这个测试来记住或实现`Dictionary.set`函数。您的目标是使用任何信息来构建或者其它信息。 + +你也应该尝试,用你对`Dictionary `的理解来实现代码。不要简单以摄影方式来回忆每一行。这实际上是不可能的,因为没有人有摄影记忆(去查一下,没有人)。大多数人的记忆都不错,能够触发他们可以使用的概念性理解。你应该做同样的事情,并使用你的`Dictionary`的知识来创建自己的副本。在上面的示例中,您知道`Dictionary.set`以某种方式运行,您需要一种方法来获取插槽(链表节点)和桶(链表本身)...所以这意味着,您需要`get_slot`和`get_bucket`。你不是以摄影方式记住每个字符;而是记住所有关键概念并使用它们。 + +## 重复 + +这个练习最重要的部分是,重复几次这个流程,使其没有错误,才能使其更好。你会对这本书中的其他数据结构这样做,所以你会得到大量的练习。如果你必须回去记忆 100 次才行,也是可以的。最终你只需要做 50 遍,然后下一次只有 10 遍,然后最终你将能够轻易从记忆中实现一个`Dictionary `。尽管继续尝试,并尝试像冥想那样接近它,所以你这样做的时候可以放松。 + +## 深入学习 + ++ 我的测试非常有限。写一个更广泛的测试。 ++ 练习 16 的排序算法如何有助于这个数据结构? ++ 当您将键和值随机化,用于这个数据结构时,会发生什么?排序算法有帮助吗? ++ `num_buckets`对数据结构有什么影响? + +## 破坏它 + +你的大脑可能宕机了,要休息一下,然后尝试破坏这个代码。这个实现很容易被数据淹没和压倒。奇怪的边界情况如何呢?你可以将任何东西添加为一个键,或者只是字符串?会造成什么问题?最后,你是否可以对代码暗中耍一些花招,使其看起来像是正常工作,但实际上是以一些机智的方式来破坏它?