FaGe's Blog

吹啊吹啊。

标签:字符串

共 11 篇文章

练习48.更复杂的用户输入

练习48.更复杂的用户输入 在以前的游戏中,你只是设置一些简单的预定义字符串作为用户输入处理,用户输入“run”,程序能正常运行,但是你输入“run fast”,程序就会运行失败。我们需要一个设备,它可以识别用户以各种方式输入的语汇。例如下面的机种表述都应该被支持才对: open door open the door go THROUGH the door punch bear Punch The Bear in the FACE 也就是说,如果用户的输入和常用英语很接近也应该是可以的,而你的游戏要识别出它们的意思。为了达到这个目的,我们将写一个模块专门做这件事情。这个模组里边会有若干个类,它们互相...

阅读全文

练习39.字典,可爱的字典

练习39.字典,可爱的字典 接下来我要教你另外一种让你伤脑筋的容器型数据结构,因为一旦你学会这种容器,你将拥有超酷的能力。这是最有用的容器:字典(dictionary)。 Python 将这种数据类型叫做 “dict”,有的语言里它的名称是 “hash”。这两种名字我都会用到,不过这并不重要,重要的是它们和列表的区别。你看,针对列表你可以做这样的事情: >>> things = ['a', 'b', 'c', 'd'] >>> print things[1] b >>> things[1] = 'z' >>> print things[1] z >>> things ['a', 'z', 'c', 'd'] 你可以使用数字作为列表的索引,也就是你可以通过数字找到列表中...

阅读全文

练习21.函数的返回值

练习21.函数的返回值 你已经学过使用=给变量命名,将变量定义为某个数字或者字符串。接下来我们将让你见证更多奇迹。我们要给你演示如何使用=以及一个新的Python关键字return来将变量设置为“一个函数的值”。有一点你需要极其注意,不过我们先来编写下面的脚本吧: def add(a, b): print "ADDING %d + %d" % (a, b) return a + b def subtract(a, b): print "SUBTRACTING %d - %d" % (a, b) return a - b def multiply(a, b): print "MULTIPLYING %d * %d" % (a, b) return a * b def divide(a, b): print "DIVIDIN...

阅读全文

练习18.命名, 变量, 代码, 函数

练习18.命名, 变量, 代码, 函数 标题包含的内容够多的吧?接下来我要教你“函数(function)”了!说到函数,不一样的人会对它有不一样的理解和使用方法,不过我只会教你现在能用到的最简单的使用方式。 函数可以做三样事情: 它们给代码片段命名,就跟“变量”给字符串和数字命名一样。 它们可以接受参数,就跟你的脚本接受argv一样。 通过使用 #1 和 #2,它们可以让你创建“微型脚本”或者“小命令”。 python中你可以使用def新建函数。我将让你创建四个不同的函数,它们工作起来和你的脚本一样。然后我会演示给你各个函数之间的关系。 # this one...

阅读全文

练习46:三叉搜索树

练习46:三叉搜索树 原文:Exercise 46: Ternary Search Tree 译者:飞龙 我打算向你介绍的最后一种数据结构就是三叉搜索树(TSTree),它和BSTree很像,除了它有三个分支,low、equal和high。它的用法和BStree以及Hashmap基本相同,用于储存键值对的数据,但是它通过键中的独立字符来控制。这使得TSTree具有一些BStree和Hashmap不具备的功能。 TSTree的工作方式是,每个键都是字符串,根据字符串中字符的等性,通过构建或者遍历一棵树来进行插入。首先由根节点开始,观察每个节点的字符,如果小于、等于或大于则去往相应的方向。你可以参考这个头...

阅读全文

练习39:字符串算法

练习39:字符串算法 原文:Exercise 39: String Algorithms 译者:飞龙 这个练习中,我会向你展示可能是最快的字符串搜索算法之一,并且将它与bstrlib.c中现有的binstr比较。binstr的文档说它仅仅使用了“暴力搜索”的字符串算法来寻找第一个实例。我所实现的函数使用Boyer-Moore-Horspool(BMH)算法,如果你分析理论时间的话,一般认为它会更快。你也会看到,如果我的实现没有任何缺陷,BMH的实际时间会比binstr简单的暴力搜索更糟。 这个练习的要点并不是真正解释算法本身,因为你可以直接去Boyer-Moore-Horspool 的维基百科页面去阅读它。这个...

阅读全文

练习18:函数指针

练习18:函数指针 原文:Exercise 18: Pointers To Functions 译者:飞龙 函数在C中实际上只是指向程序中某一个代码存在位置的指针。就像你创建过的结构体指针、字符串和数组那样,你也可以创建指向函数的指针。函数指针的主要用途是向其他函数传递“回调”,或者模拟类和对象。在这个练习中我们会创建一些回调,并且下一节我们会制作一个简单的对象系统。 函数指针的格式类似这样: int (*POINTER_NAME)(int a, int b) 记住如何编写它的一个方法是: 编写一个普通的函数声明:int callme(int a, int b) 将函数用指针语法包装:int (*callme)(in...

阅读全文

练习10:字符串数组和循环

练习10:字符串数组和循环 原文:Exercise 10: Arrays Of Strings, Looping 译者:飞龙 你现在可以创建不同类型的数组,并且也知道了“字符串”和“字节数组”是相同的东西。接下来,我们要更进一步,创建一个包含字符串的数组。我也会介绍第一个循环结构,for循环来帮我们打印出这一新的数据结构。 这一章的有趣之处就是你的程序中已经有一个现成的字符串数组,main函数参数中的char *argv[]。下面这段代码打印出了所有你传入的命令行参数: #include <stdio.h> int main(int argc, char *argv[]) { int i = 0; // go through each str...

阅读全文

练习9:数组和字符串

练习9:数组和字符串 原文:Exercise 9: Arrays And Strings 译者:飞龙 上一个练习中,我们学习了如何创建基本的数组,以及数组如何映射为字符串。这个练习中我们会更加全面地展示数组和字符串的相似之处,并且深入了解更多内存布局的知识。 这个练习向你展示了C只是简单地将字符串储存为字符数组,并且在结尾加上'\0'(空字符)。你可能在上个练习中得到了暗示,因为我们手动这样做了。下面我会通过将它与数字数组比较,用另一种方法更清楚地实现它。 #include <stdio.h> int main(int argc, char *argv[]) { int numbers[4] = {0}; ch...

阅读全文

练习8:大小和数组

练习8:大小和数组 原文:Exercise 8: Sizes And Arrays 译者:飞龙 在上一个练习中你做了一些算术运算,并且使用了'\0'(空)字符。这对于其它语言来说非常奇怪,因为它们把“字符串”和“字节数组”看做不同的东西。但是C中的字符串就是字节数组,并且只有不同的打印函数才知道它们的不同。 在我真正解释其重要性之前,我先要介绍一些概念:sizeof和数组。下面是我们将要讨论的一段代码: #include <stdio.h> int main(int argc, char *argv[]) { int areas[] = {10, 12, 13, 14, 20}; char name[] = "Zed"; char full_name[] = { ...

阅读全文