博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《Python核心编程》第二版第八章练习题答案 第三部分
阅读量:6820 次
发布时间:2019-06-26

本文共 3242 字,大约阅读时间需要 10 分钟。

第八章的习题在这一部分结束

8–12. (整数)位操作. 编写一个程序, 用户给出起始和结束数字后给出一个下面这样的表格,

分别显示出两个数字间所有整数的十进制, 二进制, 八进制和十六进制表示. 如果字符是可打印的
ASCII 字符, 也要把它打印出来, 如果没有一个是可打印字符, 就省略掉 ASCII 那一栏的表头.

解答:

#!/usr/bin/python# -*- coding:utf-8 -*- #Filename:8_12.py'''Created on 2012-8-14@author: wanglei'''def output(rangelist):    print " DEC    BIN    OCT    HEX"    print "-------------------------"    for i in rangelist:        print "%3s    %3s    %3s    %3s" %(i,bin(i)[2:],oct(i)[1:],hex(i)[2:])def outputwithascii(rangelist):    print " DEC    BIN    OCT    HEX    ASCII"    print "-----------------------------------"    for i in rangelist:        print "%3s    %3s    %3s    %3s    %3s" %(i,bin(i)[2:],oct(i)[1:],hex(i)[2:],chr(i))def run():    rangelist=[]    beg=input("请输入起始数据: ")    end=input('请输入结束数据: ')    if beg<0 or end<0: #输入的数字不能为负数        print "输入的数不能为负数!"        sys.exit()    if beg
end: #若起始值小于终止值,则进行逆序处理,注意,此处end值要-1 rangelist=range(beg,end-1,-1) else: print "两次输入的数相同,请重新输入!" sys.exit() if beg in range(33,127) or end in range(33,127): outputwithascii(rangelist) else: output(rangelist)run()

测试数据:

请输入起始数据: 9请输入结束数据: 18 DEC    BIN    OCT    HEX-------------------------  9    1001     11      9 10    1010     12      a 11    1011     13      b 12    1100     14      c 13    1101     15      d 14    1110     16      e 15    1111     17      f 16    10000     20     10 17    10001     21     11 18    10010     22     12请输入起始数据: 98请输入结束数据: 123 DEC    BIN    OCT    HEX    ASCII----------------------------------- 98    1100010    142     62      b 99    1100011    143     63      c100    1100100    144     64      d101    1100101    145     65      e102    1100110    146     66      f103    1100111    147     67      g104    1101000    150     68      h105    1101001    151     69      i106    1101010    152     6a      j107    1101011    153     6b      k108    1101100    154     6c      l109    1101101    155     6d      m110    1101110    156     6e      n111    1101111    157     6f      o112    1110000    160     70      p113    1110001    161     71      q114    1110010    162     72      r115    1110011    163     73      s116    1110100    164     74      t117    1110101    165     75      u118    1110110    166     76      v119    1110111    167     77      w120    1111000    170     78      x121    1111001    171     79      y122    1111010    172     7a      z123    1111011    173     7b      {

写了两个函数,一个输出不带ascii码表的结果,一个输出带ascii码表的结果,程序对用户输入的值进行判断,落在可打印的字符范围则

调用outputwithascii()进行输出,否则调用output()输出

8–13. 程序执行性能. 在 8.5.2 节里, 我们介绍了两种基本的迭代序列方法: (1) 通过序列

项, 以及 (2) 通过序列索引遍历. 该小节的末尾我们指出后一种方法在序列很长的时候性能不佳.
(在我的系统下, 性能差了将近两倍[83%]) 你认为它的原因是什么?

为了验证直接迭代序列要比索引迭代快,我写了一小段代码来测试:

#!/usr/bin/python# -*- coding:utf-8 -*- #Filename:8_13.py'''Created on 2012-8-14@author: wanglei'''import timedef compare():    strtime=time.clock()    alist=range(1000000)    for i in range(len(alist)):        print alist[i],    #for i in alist:    #    print i,    endtime=time.clock()    print "运行时间: ",(endtime-strtime)compare()

输出结果:

运行时间:  27.7364464237运行时间:  35.151471639

结果竟然是通过索引运行时间更短一些,这个问题后面再研究一下,后续补上相关思考

 

 

 

转载于:https://www.cnblogs.com/hello--the-world/archive/2012/08/14/2638323.html

你可能感兴趣的文章
[DeviceOne开发]-手势动画示例分享
查看>>
《Activiti实战》读书笔记——5.1.4
查看>>
Linux文件管理类命令
查看>>
Kuerbernetes 1.11 二进制安装
查看>>
SpringMVC异步处理之@Async(附源代码 - 单元测试通过)
查看>>
undefined reference to 'pthread_setspecific '
查看>>
MediaBrowserService 音乐播放项目--IT蓝豹
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
路由器的密码恢复
查看>>
linux yum命令详解
查看>>
2015.12.7 Objective-c CoreGraphic
查看>>
春节将至,观众人归心似箭,作酸诗一首
查看>>
java 多线程暂停与恢复:suspend,resume
查看>>
Jquery 获得<input type="text" id="test">中的value
查看>>
《Android开发从零开始》——38.WebView控件学习
查看>>
Windows Server 2012 Hyper-V PK VMware 性能
查看>>
IOS 手写控件 简单播放器 AVFoundation音乐播放
查看>>
FPGA设计——图像处理(均值滤波)
查看>>
Windows7无法访问共享文件夹(0x800704cf,0x80070035)解决方法
查看>>