commit/obp.RWPy4learner.v1: ream D: 增加内容到 ch01 第四节

8 views
Skip to first unread message

Bitbucket

unread,
May 15, 2012, 6:30:09 AM5/15/12
to zoomquiet...@gmail.com
1 new commit in obp.RWPy4learner.v1:


https://bitbucket.org/ZoomQuiet/obp.rwpy4learner.v1/changeset/a1ea121d5fd6/
changeset: a1ea121d5fd6
user: ream D
date: 2012-05-15 12:29:40
summary: 增加内容到 ch01 第四节
affected #: 2 files

diff -r ff206de25a8e22c85ee332c3644cf751659cfa76 -r a1ea121d5fd6216d4a9dbea6d5e3ae698bb3d3b8 source/ch01/Usefor.rst
--- a/source/ch01/Usefor.rst
+++ b/source/ch01/Usefor.rst
@@ -173,7 +173,139 @@

“对对,程序写好。”小白兴奋道“我这个程序结构真是太巧妙了,当用户输入联系人后, for 进行判断,当判断正确后,就会 +1 读取联系人后面的值,而我在联系人后面的就是联系人的号码!”小白为自己的设计感到无比的自豪。“果然行者说的没错,用 for 和 if 果然就能简化掉很多的程序。”小白兴奋道。

-小白兴奋的把程序那回到班上给大家看,大家使用了一阵子后,同学就普遍反馈了一个问题:“这个通信录就只有这个功能吗?有没有更多的,比如添加联系人什么的功能呢?一个功能这也太简陋了吧!”。“也是,这样的通信录还不能称之为真正的通信录,看来还要进一步对它进行完善”小白想。
+小白兴奋的把程序那回到班上给大家试用,大家使用了一阵子后,同学就普遍反馈了一个问题:“这个通信录就只有这个功能吗?有没有更多的,比如添加联系人什么的功能呢?一个功能这也太简陋了吧!”。“也是,这样的通信录还不能称之为真正的通信录,看来还要进一步对它进行完善”小白想。


-(第四节完)
+“好,为了让我的程序更加易用,拥有添加联系人的功能是必不可少的。我已经用 list 成功的实现了一个拥有查询功能的通信录了。那么,能不能在现有 list 的基础上,继续完善程序,使程序拥有添加联系人的功能呢?“小白对目前的形式进行了分析:“我们目前显示联系人的方式是通过打印 list 中的一个姓名值(包含联系人姓名的值)和这个值后面的一个电话值(包含联系人电话的值)进行的。如果要实现添加联系人的功能,就得往 list 中添加两个值:一个姓名值和一个电话值,这样的话,我原先设计的查找联系人程序就也能适用于这个含有新添加的联系人信息的列表了。按照这样计算的话,下面只要找到在列表中添加新值的办法就行了。”
+
+小白打开 IDLE ,输入 help(list) 查找在 list 中添加新值的办法。很快,他就发现了这样一个东东:
+
+::
+
+ | append(...)
+ | L.append(object) -- append object to end
+
+“append object to end?这不是增加元素到最后的意思吗?最后?这会不会指的是列表的坐后面呢?L 在这里代表的是存放列表的那个变量的名称吧?”一切的猜想充斥着小白的思维,小白决定到 IDLE 中试一试他所做的猜想是否正确。
+
+::
+
+ >>> a=[1,2,3]
+ >>> a.append(4)
+ >>> a
+ [1, 2, 3, 4]
+ >>>
+
+“嗯,看来的确是这样,我的猜想都没有错,a.append(4) 果然把 4 添加到了 [1,2,3] 的最后。既然已经知道了如何人在 list 中添加一个新值,那么,下面,只要把他写到我的程序里就可以了。由于我的程序是通过打印一个姓名值和一个电话值来显示联系人的信息的,if 语句判断的也只是姓名值而已。那么只要在列表里按照 [...,姓名值,电话值,姓名值,电话值,姓名值,电话值,...] 这种模式进行联系人的添加就可以了。下面要做的,只要写两个 raw_input 让用户分别输入姓名值和电话值,这个程序就算完成了。”小白规划好了它的代码应该如何编写,接下来就是要把程序做出来。
+
+::
+
+ _Name = raw_input("输入名字:")
+
+ Info_list = ["张三",123456,"李四",54321]
+
+ Num = 0
+ if _Name == "添加":
+ _add_Name = raw_input("输入新联系人名:")
+ _add_Info = raw_input("输入新联系人电话:")
+ Info_list.append(_add_Name)
+ Info_list.append(_add_Info)
+ for i in Info_list:
+ if _Name == i:
+ print Info_list[Num+1]
+ Num = Num + 1
+ else:
+ Num = Num + 1
+
+小白调试程序,他很快就发现了一个新的问题:
+
+::
+
+ >>> ================================ RESTART ================================
+ >>>
+ 输入名字:添加
+ 输入新联系人名:王五
+ 输入新联系人电话:123
+ >>> ================================ RESTART ================================
+ >>>
+ 输入名字:王五
+ >>>
+
+“咦?怎么第二次运行就不能显示我新增的联系人 王五 的信息呢?”。他发现它的程序只是运行了一遍就退出了,那么自然,退出后那个新增了联系人姓名值和电话值的列表也就没有了。“这样的话,那我的这个添加功能岂不是白做?”小白非常郁闷,自己刚做好的联系人添加功能竟然没有发挥作用。仔细一看,小白才发现他的程序没有加 while 语句。“我真是个大马哈啊,怪不得会这样,赶快加上。”
+
+::
+
+ Info_list = ["张三",123456,"李四",54321]
+
+ Num = 0
+
+ _run = True
+ while _run:
+ _Name = raw_input("输入名字:")
+ if _Name == "添加":
+ _add_Name = raw_input("输入新联系人名:")
+ _add_Info = raw_input("输入新联系人电话:")
+ Info_list.append(_add_Name)
+ Info_list.append(_add_Info)
+ if _Name == "退出":
+ _run = False
+ for i in Info_list:
+ if _Name == i:
+ print Info_list[Num+1]
+ Num = Num + 1
+ else:
+ Num = Num + 1
+
+“调试一下!!”。小白激动的敲着键盘。可接下来的结果却让他大跌眼镜。
+
+::
+
+ >>> ================================ RESTART ================================
+ >>>
+ 输入名字:李四
+ 54321
+ 输入名字:添加
+ 输入新联系人名:王五
+ 输入新联系人电话:123
+ 输入名字:王五
+ Traceback (most recent call last):
+ File "C:\Documents and Settings\Administrator.COMPUTER\桌面\Test.py", line 20, in <module>
+ print Info_list[Num+1]
+ IndexError: list index out of range
+
+“list index out of range??!这是怎么回事,好像是因为 Num+1 的值超出了列表的范围!怎么会这样?”小白一遍又一遍的运行程序,然后仔细观察输出,他发现,每次都是运行到第二次:输入名字 的时候会出错。“为什么会这样呢?问题应该就是出在 Num+1 上,我的程序就是通过这个获取列表中对应的值然后打印,超出范围的话...难道是说这个值太大了吗?而且均在第二次运行发生异常。”突然小白灵光一现:“我明白了,第一次执行的时候 Num 是等于 0 的,执行完一次之后到第二次时,由于 Num 并没有恢复为原来的 0,在没有复 0 的时候执行第二次,在提取列表值的时候自然就会超出列表范围出错了!”小白成功分析出他程序的问题所在,他在它的程序 while 的开头加了个 Num = 0 ,每次执行完一次之后就复 0 。
+
+::
+
+ Info_list = ["张三",123456,"李四",54321]
+
+ _run = True
+ while _run:
+ Num = 0
+ _Name = raw_input("输入名字:")
+ if _Name == "添加":
+ _add_Name = raw_input("输入新联系人名:")
+ _add_Info = raw_input("输入新联系人电话:")
+ Info_list.append(_add_Name)
+ Info_list.append(_add_Info)
+ if _Name == "退出":
+ _run = False
+ for i in Info_list:
+ if _Name == i:
+ print Info_list[Num+1]
+ Num = Num + 1
+ else:
+ Num = Num + 1
+
+“Ok,搞定,既然在 while 开头加了 Num = 0 那么程序的开头就没必要再定义 Num = 0 了,两句意思功效一样吗!”。小白手指一动删掉了程序开头那句 Num = 0。“Ok,执行一遍看看!”小白敲下 F5.
+
+::
+
+ 输入名字:李四
+ 54321
+ 输入名字:添加
+ 输入新联系人名:王五
+ 输入新联系人电话:123
+ 输入名字:王五
+ 123
+
+“Ok,搞定,又一难题解决”小白兴奋道!


diff -r ff206de25a8e22c85ee332c3644cf751659cfa76 -r a1ea121d5fd6216d4a9dbea6d5e3ae698bb3d3b8 source/ch01/usedict.rst
--- a/source/ch01/usedict.rst
+++ b/source/ch01/usedict.rst
@@ -1,11 +1,11 @@
再次优化通信录
====================
+“对,前面已经决定要做一个添加联系人的功能,怎样才能实现添加联系人呢?”小白想啊想啊,这时,他突然想到:“对了,前一次优化,是用了 list ,在《简明 Python》 中,list 属于的章节是数据结构,那么数据结构....”小白想起了简明中对数据结构的描述:


-“对,前面已经决定要做一个添加联系人的功能,怎样才能实现添加联系人呢?”小白想啊想啊,这时,他突然想到:“对了,前一次优化,是用了 list ,在《简明 Python》 中,list 属于的章节是数据结构,那么数据结构....”小白想起了简明中对数据结构的描述:
-
::

+
“数据结构基本上就是——它们是可以处理一些 数据 的 结构 。或者说,它们是用来存储一组相关数据的。

在Python中有三种内建的数据结构——列表、元组和字典。我们将会学习如何使用它们,以及它们如何使编程变得简单”

Repository URL: https://bitbucket.org/ZoomQuiet/obp.rwpy4learner.v1/

--

This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
Reply all
Reply to author
Forward
0 new messages