通信录变量版 =============== “Ok,在前面,我已经能够熟练地使用Python进行基本的调试和编写了,好,现在,我就来构思一下我的这个通信录程序应该如何用程序实现!对,我还是初学者,就先不考虑过于高级的功能,就先实现最简单也是最重要的功能--显示联系人的信息吧。”小白想“对,我已经学习过了print "..." 这个输出语句了,那么我们也可以直接用这个语句显示出联系人的信息来!”在明确实现程序的目的与,小白步骤后,小白马上对其进行了程序的实现。 :: print "Name:Jim" print "Tel:13456" print "Name:Tom" print "Tel:12345" raw_input() 运行程序后,得到输出: :: Name:Jim Tel:13456 Name:Tom Tel:12345 "哈哈,真是太棒了,实现一个通信录的基本功能原来就是如此的简单!"小白亢奋了,随即产生了一个完善程序的设想:“能不能在通信录中显示中文呢?俺又不是米国人,就这显示英文的通信录,拿回班里发布还不被人骂死?对,首先实现中文的通信录”小白又确立了下一个奋斗的目标:实现通信录的中文化。 实现程序中文化: ---------------------------------- "中文嘛,还不简单?把print "..."里的英文换成中文就行了?"想到解决办法的小白马上进行了实验。 :: print "姓名:Jim" print "电话:13456" print "姓名:Tom" print "电话:12345" raw_input() 当档,程序写好写好,小白点run运行..咦?它提示了一个显示着 # -*- coding: cp936 -*- 的提示框。“这是什么?”小白想,“先不管他了,先点OK让它顺利运行吧。”小白想,小白点击OK运行,输出了如下结果: :: 姓名:Jim 电话:13456 姓名:Tom 电话:12345 “哈哈哈,看起来是真的实现了 Python 程序的中文化了,可是刚刚点 Run 时出现的显示着: # -*- coding: cp936 -*- 的提示框又是什么呢?为什么有这个东西呢?这个东西起了什么作用呢?”小白又产生了新的问题。“对,因为我是初学者,凡是发现难题我们都要把它弄懂啊,一定要把基础打好,不然以后怎样开发出真正有用的程序来呢?”小白自言自语道。 “对,我就先到网上去搜索一下这句话吧,看看会有什么样的结果”,小白想也不想,迅速打开: cn.bing.com ,输入:-*- coding: cp936 -*- 进行搜索,在返回过来的搜索结果的第二项,小白发现了这个内容。 .. image:: ../_static/snap/ch01-2-search.png “这貌似就是我想要的。”小白点击该网址打开该网页,这是一个论坛,小白搜寻着。“嗯?发现目标,貌似就是这个” .. image:: ../_static/snap/ch01-2-search2.png “哈哈,原来是指定程序运行时的编码啊,看来想要使用中文前提是必须要有正确的编码,可是编码又是什么呢?小白继续 bing ”,果然,第一个内容就出现了小白想要得东西: .. image:: ../_static/snap/ch01-2-search3.png 小白仔细阅读了百度百科上的内容后,明白了编码的意义。“哦,原来编码就是把各种自然语言编译成计算机能够处理的东东啊”,通过百度百科。小白还了解到,中文的编码还有 gbk , gb2312 等。 “那我到底是用什么编码才能更好地进行程序的编写呢?”小白想:“对,我的通信录软件要以推广到全世界为目的,这样的话要兼容适应多种语言才行,那样,有没有一种能适应各种自然语言的编码呢?”小白又开始挠头了。 “对,可以上列表问问啊,列表上行者们这么多,并且都有丰富的软件开发经验,为何不去问问他们呢?” 小白马上列表,进行了询问。 :: 标题:有没有一种能够适应所有自然语言的编码呢? 邮件: 有没有一种能够适应所有自然语言的编码呢?写程序需要呐。 行者的回答只有一句话: :: utf-8 “utf-8”小白叫到。“这看起来更像是一个编码的名字吗!咱就先上网了解了解它的资料,看看他到底是怎样的一种编码吧!”小白想。 小白说着打开 bing ,输入 utf-8 ,他在 bing 的第三项找到他想要的答案。 .. image:: ../_static/snap/ch01-2-search4.png 小白迅速进入其内进行阅读,在仔细地阅读后,小白长长的舒了一口气。 .. image:: ../_static/snap/ch01-2-search5.png “这 utf-8 不错,正是我想找的东西。以后就用他来做我的程序内部所使用的编码吧。”小白想“对,我如果想要改变编码,只要把他提示框显示的 # -*- coding: cp936 -*- 中的 cp936 改成 utf-8 使其变成 # -*- coding: utf-8 -*- 不就行了嘛? ”小白说着的开了刚刚写的程序,点击 Save ,等提示框中的内容显示出来以后点击 ok 键进行确认,然后再点击 Run 进行运行。 :: 姓名:Jim 电话:13456 姓名:Tom 电话:12345 “看起来没有任何问题嘛!好,编码问题终于解决了!!”小白又成功解决了一个问题。 “那好,下面开始继续干我们的通信录制作”对,接下来要做的就是进行数据的录入了”,小白迅速敲击键盘,进行数据点的录入 :: print "姓名:Jim" print "电话:13456" print "姓名:Tom" print "电话:12345" print "姓名:Jack" print "电话:45898" print "姓名:Jenny" print "电话:98563" print "姓名:Tony" print "电话:89514" print "姓名:Ben" print "电话:65544" print "姓名:Tim" print "电话:48165" print "姓名:Jam" print "电话:14564" print "姓名:Sam" print "电话:13456" ....... “哇塞,这也太复杂了吧?这要是把全班的信息都录入的话?要花多长的时间呐?有没有一种更简便又能实现上述功能的办法呢?”小白又在想。 这是,小白的舅舅又走了过来,这个嘛,可以用变量的办法来进行代码的化简,但是至于怎么化简,这点我是不会告诉你的,还得让你自个儿去探索!” 小白:“好,自个儿就自个儿,不就自学个知识,有什么难的。” 小白没有忘记《简明的 Python 教程》这样东西,直觉告诉他想要的东西都在里面,他马上去进行了查找,果然,找到了他想要的东西: .. image:: ../_static/snap/ch01_2_bl.png 小白看完了《简明的 Python 教程》中有关变量的介绍后,豁然开朗: “哦,原来变量就是一个可变的量啊,就是对应标示符里的东西是可变的。” 小白马上打开了 IDLE 进行了实验 :: >>> a=1 #把 1 赋值给变量 a >>> print a #打印 a 1 >>> a=2 >>> print a 2 >>> a="你好" #把 你好 赋值给变量 a >>> print a #打印 a 你好 >>> a="你们好" >>> print a 你们好 >>> “哈哈,果然,变量就是可变的,如果一个变量赋值之后再进行赋值的话,后一个赋值上去的东东就会覆盖前一个赋值上去的东东。”小白道吗,“可是,为什么舅舅会说变量会使程序更简便呢?在这里看来它好像只是能用来储存数据罢了。”小白想啊想,正当他无聊翻看《简明的 Python 教程》时,他看到了这么一些东西: .. image:: ../_static/snap/ch01-2-search6.png “对,变量是可以相加起来的,那么变量可不可以相减呢?”,无聊之中的小白决定试一试。 :: >>> a=3 >>> b=a-1 #变量 b 等于 a-1(3-1) >>> print b 2 >>> c=4 >>> d=c+a >>> print d 8 “哇塞,变量真的可以相加减,那么,有文字的变量可不可以相加呢?”小白想,“还是试试才知道。” :: >>> a="你好" >>> b="吗" >>> c=a+b >>> print c 你好吗 >>> d="他" >>> e=1 >>> print d+e Traceback (most recent call last): File "", line 1, in print d+e TypeError: cannot concatenate 'str' and 'int' objects >>> “咦?怎么会出错了呢?前面明明运行得好好的,但是后面的却错了”小白疑惑起来,“并且返回了一些红色的字回来,诶?等下,那些红色的字好像正在告诉我程序错在哪里了” 小白虽说只是高中生,但是,他还是懂英文的,“至少我有 3000 个高考必修单词嘛”小白想。 他隐隐约约看出来了,“哦,原来他应该是这个意思吧: print d+e 应该就是出错的语句了吧?咦?下面好像就是错误的原因唉: :: TypeError: cannot concatenate 'str' and 'int' objects ”哦,我明白了,它应该说的是“: :: 类型错误:不能连接 'str' 和 'int' 对象 ”哈哈,我的英语还是不错的,竟然能看出他错哪?“,可是,小白又想到了一个新的问题:“str 和 int 又是什么呢?为什么这两个对象就不能链接呢?” ”唉,这已经不是我能解决的问题了,还是上网问问列表吧?“小白迅速打开浏览器,登陆 Gmail ,并且发帖: :: 标题:int 和 str 对象为什么不能连接? 内容: 我在写这么一段程序: >>> d="他" >>> e=1 >>> print d+e 运行时,出现了如下错误: TypeError: cannot concatenate 'str' and 'int' objects 是 str 和 int 类型不能互相相加,这是为什么呢?谢谢。 行者很快做出了答复: :: int 是数字类型,一种层面上就是数字,向 1,2,3,4,5 这样的,而且,简明教程里也有这样的解释: ”数 在Python中有4种类型的数——整数、长整数、浮点数和复数。 2是一个整数的例子。 长整数不过是大一些的整数。 3.23和52.3E-4是浮点数的例子。E标记表示10的幂。在这里,52.3E-4表示52.3 * 10-4。 (-5+4j)和(2.3-4.6j)是复数的例子。“ 反而言之,str 就是字符串,就是我们通常用的,有引号隐着的那些,简明教程里也有这样的解释: ”字符串是 字符的序列 。字符串基本上就是一组单词。“ 两者的区别其实就在于此,int 和 str 是 python 里面最常用的类型。 读完行者的邮件,小白豁然开朗,”哦,原来就是数字与字符的区别,但,这个错误还是我太粗心造成的吧,简明教程里有而我居然没看到“,小白敲了敲自己的脑袋。“好,既然知道了,这就来实践下,巩固下记忆” :: >>> a="你" >>> b="好" >>> print a+b 你好 >>> c="你" >>> b="1" >>> print c+b 你1 >>> “哈哈,果然是这样没错,只要把不同类型的东西变为同一个类型就可以了,把int类型的1加上""不就变成str类型的"1"了吗”小白笑道,突然,小白灵光一闪,“哦,我终于明白了为什么舅舅会说变量能让程序变得更简便了,既然变量可以相加,那么,就可以这么做哈” :: tel="电话:" name="姓名" print name+"张三" print tel+"12345" print name+"李四" print tel+"54321" “不错,不错,果然,这样管理起来轻松多了,好看也好看很多,不过,看起来好像只是省了“电话:”和“姓名”两个字唉,也没省多少,不过,联系人多的话,可能会简便一点吧.......”小白苦笑道。 (第二节完)