摘要:第八章的习题在这一部分结束8–12. (整数)位操作. 编写一个程序, 用户给出起始和结束数字后给出一个下面这样的表格,分别显示出两个数字间所有整数的十进制, 二进制, 八进制和十六进制表示. 如果字符是可打印的ASCII 字符, 也要把它打印出来, 如果没有一个是可打印字符, 就省略掉 ASCII 那一栏的表头.解答:#!/usr/bin/python# -*- coding:utf-8 -*- #Filename:8_12.py'''Created on 2012-8-14@author: wanglei'''def output(range
阅读全文
摘要:8–7. 全数. 完全数被定义为这样的数字: 它的约数(不包括它自己)之和为它本身. 例如: 6的约数是 1, 2, 3, 因为 1 + 2 + 3 = 6 , 所以 6 被认为是一个完全数. 编写一个名为 isperfect()的函数, 它接受一个整数作为参数, 如果这个数字是完全数, 返回 1 ; 否则返回 0 .解答:#!/usr/bin/python# -*- coding:utf-8 -*- #Filename:8_7.py'''Created on 2012-8-13@author: wanglei'''import test8_5,
阅读全文
摘要:这几天看C++的东西,python这边又落下了,后面会接着补上8-1 (a)A,C将会被执行; (b)A,D,E将会被执行(pass不会影戏E的执行) (c)A,B将会被执行8–2. 循环. 编写一个程序, 让用户输入三个数字: (f)rom, (t)o, 和 (i)ncrement . 以 i为步长, 从 f 计数到 t , 包括 f 和 t . 例如, 如果输入的是 f == 2, t == 26, i == 4 , 程序将输出 2, 6, 10, 14, 18, 22, 26.解答:#!/usr/bin/python# -*- coding:utf-8 -*- #Filename...
阅读全文
摘要:7-9. 翻译(a) 编写一个字符翻译程序(功能类似于Unix 中的tr 命令)。我们将这个函数叫做tr(),它有三个字符串做参数: 源字符串、目的字符串、基本字符串,语法定义如下:def tr(srcstr, dststr, string)srcstr 的内容是你打算“翻译”的字符集合,dsrstr 是翻译后得到的字符集合,而string 是你打算进行翻译操作的字符串。举例来说,如果srcstr == 'abc', dststr == 'mno', string =='abcdef', 那么tr()的输出将是'mnodef'.
阅读全文
摘要:7–1. 字典方法。哪个字典方法可以用来把两个字典合并到一起?解答:使用update方法7–2. 字典的键。我们知道字典的值可以是任意的Python 对象,那字典的键又如何呢?请试着将除数字和字符串以外的其他不同类型的对象作为字典的键,看一看,哪些类型可以,哪些不行?对那些不能作字典的键的对象类型,你认为是什么原因呢?解答:试着用list类型作键值,报错;tuple类型是可以的;字典类型报错 报错全是 unhashable type,可见字典的键值必须是可哈希的,而列表和字典是可变的,所以不能哈希7–3. 字典和列表的方法。(a) 创建一个字典,并把这个字典中的键按照字母顺序显示出来。(...
阅读全文
摘要:今天翻电脑时突然发现有个存了很多照片和视频的文件夹,想起来是去年换手机(流行的小5)时拷出来的。看了几张照片,往事又一幕幕的浮现在脑海,好吧,我是个感性的人。所以就想把这些照片翻着看一遍,可是拷出来的照片手机里是按时间自动分文件夹的,一个一个文件夹拷很是麻烦,于是打算写个python小脚本来完成这个工作(扯这么多,终于到主题了,囧)这是待拷贝的文件夹根目录,每个子目录下都有若干照片。废话少说,上代码:# -*- coding: utf-8 -*-#!/usr/bin/python#Filename:copyfile.pyimport os,shutildef mycopy(srcpath,ds
阅读全文
摘要:代码优化能够让程序运行更快,它是在不改变程序运行结果的情况下使得程序的运行效率更高,根据 80/20 原则,实现程序的重构、优化、扩展以及文档相关的事情通常需要消耗 80% 的工作量。优化通常包含两方面的内容:减小代码的体积,提高代码的运行效率。改进算法,选择合适的数据结构一个良好的算法能够对性能起到关键作用,因此性能改进的首要点是对算法的改进。在算法的时间复杂度排序上依次是:O(1) -> O(lg n) -> O(n lg n) -> O(n^2) -> O(n^3) -> O(n^k) -> O(k^n) -> O(n!)因此如果能够在时间复杂度
阅读全文
摘要:最近打算研究一下《编程珠玑》这本神器,第一章主要讲了利用位图这种结构来方便地解决一些问题。在看用位图排序的算法时,有几个小问题总结一下:1.如何生成位于0到n-1之间的k个不同的随机顺序的随机整数要求生成的k个随机数不重复,且每个随机数是小于n的。这个问题当n,k值比较小时,比较容易解决,但当n值比较大时,比如10000000,不得不考虑算法的效率。现给出两种解法(Python实现):'''Created on 2012-7-31@author: wanglei'''import randomdef rand1(n,k): numlist=[i
阅读全文
摘要:6–17.方法.实现一个叫myPop()的函数,功能类似于列表的pop()方法,用一个列表作为输入,移除列表的最新一个元素,并返回它.解答:# -*- coding:utf-8 -*- #!/usr/bin/python#Filename:6-17.py'''Created on 2012-7-30@author: wanglei'''def mypop(alist): list_len=len(alist) if list_len==0: print "列表为空!" return popitem=alist[list_len
阅读全文
摘要:6–15.转换(a)给出两个可识别格式的日期,比如 MM/DD/YY 或者 DD/MM/YY 格式,计算出两个日期间的天数.(b)给出一个人的生日,计算从此人出生到现在的天数,包括所有的闰月.(c)还是上面的例子,计算出到此人下次过生日还有多少天.解答:# -*- coding:utf-8 -*- #!/usr/bin/python#Filename:6-15.py'''Created on 2012-7-27@author: wanglei'''def isleapyear(year): if (year %4==0 and year%100!
阅读全文
摘要:6–14.随机数.设计一个"石头,剪子,布"游戏,有时又叫"Rochambeau",你小时候可能玩过,下面是规则.你和你的对手,在同一时间做出特定的手势,必须是下面一种手势:石头,剪子,布.胜利者从下面的规则中产生,这个规则本身是个悖论.(a) the paper covers the rock,布包石头.(b)石头砸剪子,(c)剪子剪破布.在你的计算机版本中,用户输入她/他的选项,计算机找一个随机选项,然后由你的程序来决定一个胜利者或者平手.注意:最好的算法是尽量少的使用if 语句.解答如下:# -*- coding:utf-8 -*- #!/usr/
阅读全文
摘要:6–10.字符串.写一个函数,返回一个跟输入字符串相似的字符串,要求字符串的大小写反转.比如,输入"Mr.Ed",应该返回"mR.eD"作为输出.解答:#!/usr/bin/python#Filename:6-10.py'''Created on 2012-7-25@author: wanglei'''def charreverse(str): slist=list(str) for i in range(0,len(slist)): if ord(slist[i]) in range(65,91): sl
阅读全文
摘要:6–6. 字符串.创建一个string.strip()的替代函数:接受一个字符串,去掉它前面和后面的空格(如果使用string.*strip()函数那本练习就没有意义了)解答:#/usr/bin/python#!Filename:6-6.py'''Created on 2012-7-24@author: wanglei'''def mystrip(astring): alist=list(astring) list_len=len(alist) while alist[0]==" ": del alist[0] while a
阅读全文
摘要:6–3. 排序(a) 输入一串数字,从大到小排列之.(b) 跟a 一样,不过要用字典序从大到小排列之.解答:# -*- coding:utf-8 -*- '''Created on 2012-7-24@author: wanglei'''#/usr/bin/python#Filename:6-3.pyastr=raw_input("请输入一行数字,以空格分隔: ")astr=astr.split(" ")intlist=[]alist=list(astr)for i in alist: intlist.ap
阅读全文
摘要:尾递归(Tail Recursion) 在传统的递归中,典型的模式是,你执行第一个递归调用,然后接着调用下一个递归来计算结果。这种方式中途你是得不到计算结果,知道所有的递归调用都返回。 这样虽然很大程度上简洁了代码编写,但是让人很难它跟高效联系起来。因为随着递归的深入,之前的一些变量需要分配堆栈来保存。 尾递归相对传统递归,其是一种特例。在尾递归中,先执行某部分的计算,然后开始调用递归,所以你可以得到当前的计算结果,而这个结果也将作为参数传入下一次递归。这也就是说函数调用出现在调用者函数的尾部,因为是尾部,所以其有一个优越于传统递归之处在于无需去保存任何局部变量,从内存消耗上,实现节约特性。.
阅读全文