python核心编程第二版第9章习题答案文档格式.docx
- 文档编号:21196553
- 上传时间:2023-01-28
- 格式:DOCX
- 页数:31
- 大小:26.67KB
python核心编程第二版第9章习题答案文档格式.docx
《python核心编程第二版第9章习题答案文档格式.docx》由会员分享,可在线阅读,更多相关《python核心编程第二版第9章习题答案文档格式.docx(31页珍藏版)》请在冰豆网上搜索。
,按键后继续执行.
foriinallline:
printi,
ifsum==25:
a=raw_input("
pressanykeytocontinue:
"
sum=0
方法二
importos
F=raw_input('
plsinputafilename:
)
n=0
f=open(F,'
foriinf:
printi,
n+=1
ifn==25:
n=0
os.system('
pause'
f.close()
9-5考试成绩,改进你的考试成绩问题(练习5-3和6-4),要求能从多个文件中读入考试成绩。
文件的数据格式由你自己决定。
scores=[]
if0<
=int(i.strip())<
=100:
scores.append(int(i.strip()))
print'
scorewrong,pleaseagain'
ifint(i.strip())<
60:
scoreisE'
i
elifint(i.strip())<
70:
scoreisD'
80:
scoreisC'
90:
scoreisB'
scoreisA'
f.close()
print'
averagescoreis%.2f'
%(sum(scores)/len(scores))
9–6.文件比较.写一个比较两个文本文件的程序.如果不同,给出第一个不同处的行号和列号.
f1=raw_input('
Enterafilename:
f2=raw_input('
F1=open(f1,'
F2=open(f2,'
F1allline=F1.readlines()
F2allline=F2.readlines()
F1.close()
F2.close()
len1=len(F1allline)
len2=len(F2allline)
minlen1=min(len1,len2)
foriinrange(minlen1):
printF1allline[i],F2allline[i]
ifF1allline[i]!
=F2allline[i]:
minlen2=min(len(F1allline[i]),len(F2allline[i]))
forjinrange(minlen2):
ifF1allline[i][j]!
=F2allline[i][j]:
print'
rowis%d,columnis%d'
%(i+1,j+1)
break
else:
continue
theyareequal\n'
9–7.解析文件.Win32用户:
创建一个用来解析Windows.ini文件的程序.POSIX用户:
创建一个解析/etc/serves文件的程序.其它平台用户:
写一个解析特定结构的系统配置文件的程序.
这题没看懂,抄的别人
option={}
f=open(r'
c:
\windows\win.ini'
forlineinf:
ifline.startswith('
;
):
['
iterm=[]
name=line[1:
line.rfind('
]'
)]
option.setdefault(name,iterm)
if'
='
inline:
option[name].append(line.strip())
printoption
9–8.模块研究.提取模块的属性资料.提示用户输入一个模块名(或者从命令行接受输入).然后使用dir()和其它内建函数提取模块的属性,显示它们的名字,类型,值.
m=raw_input('
Enteramodulename:
module=__import__(m)
m1=dir(module)
printm1
foriinm1:
print'
name:
tyoe:
type(getattr(module,i))
value:
getattr(module,i)
9–9.Python文档字符串。
进入Python标准库所在的目录。
检查每个.py文件看是否有__doc__字符串,如果有,对其格式进行适当的整理归类.你的程序执行完毕后,应该会生成一个漂亮的清单.里边列出哪些模块有文档字符串,以及文档字符串的内容.清单最后附上那些没有文档字符串模块的名字.附加题:
提取标准库中各模块内全部类(class)和函数的文档.
这是入口
#coding:
utf-8
importos
importsys
num=[]
将所有路径文件名全部提取出来'
deffun(dirName):
foriinos.listdir(dirName):
ifos.path.isdir(dirName+"
\\"
+i):
fun(dirName+'
\\'
+i)
else:
num.append(dirName+'
fun(r'
\python27\Lib'
hasDoc=False
strTemp='
fileobj1=open('
hasdoc.txt'
a+'
fileobj2=open('
nodoc.txt'
foriinnum:
printi
fobj=open(i)
foreachlineinfobj:
if(nothasDoc)andeachline.startswith('
hasDoc=True
elifhasDocandeachline.startswith('
hasDoc=False
strTemp+=eachline
break
ifhasDoc:
ifstrTemp!
="
fileobj1.write('
filename:
+i+'
\n'
fileobj1.write("
__doc__"
+"
\n"
fileobj1.write(strTemp+'
fileobj2.write('
文件名:
strTemp="
fobj.close()
fileobj1.close()
fileobj2.close()
9-10.家庭理财。
创建一个家庭理财程序。
你的程序需要处理储蓄、支票、金融市场,定期存款等多种账户。
为每种账户提供一个菜单操作界面,要有存款、取款、借、贷等操作。
另外还要提供一个取消操作选项。
用户退出这个程序时相关数据应该保存到文件里取(出于备份的目的,程序执行过程中也要备份)。
太难了,不会。
9-11.Web站点位置.
a)编写一个URL书签管理程序.使用基于文本的菜单,用户可以添加,修改或者删除书签数据项.书签数据项中包含站点的名称,URL位置,以及一行简单说明(可选).另外提供检索功能,可以根据检索关键字在站点名称和URL两部分查找可能的匹配.程序退出时把数据保存到一个磁盘文件中去;
再次执行时候加载保存的数据.
b)改进a)的解决方案,把书签输出到一个合法且语法正确的HTML文件(.html或htm)中,这样用户就可以使用浏览器查看自己的书签清单.另外提供创建"
文件夹"
功能,对相关的书签进行分组管理.
附加题:
请阅读Python的re模块了解有关正则表达式的资料,使用正则表达式对用户输入的URL进行验证.
不会做,参考自
importre,os
defcheckurl(url):
regex=reaaapile(
r'
^(?
bbb|ftp)?
//'
#bbb:
//orbbbs:
//
(?
[A-Z0-9](?
[A-Z0-9]{0,61}[A-Z0-9])?
\.)+(?
[A-Z]{2,6}\.?
|[A-Z0-9-]{2,}\.?
)|'
localhost'
#localhost
\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})'
\d+)?
/?
|[/?
]\S+)$'
re.IGNORECASE)
ifregex.match(url):
returnTrue
returnFalse
defgeturl():
name=raw_input('
plsinputaurlname:
while1:
url=raw_input('
plsinputaurladdress:
ifcheckurl(url):
print'
wrongurlformat,plsinputagain'
mark=raw_input('
plsinputaurlmark:
folder=raw_input('
plsinputaurlfolder:
return(name,url,mark,folder)
defload(filename):
f=open(filename,'
bmlist=f.readlines()
f.close()
returnbmlist
defsave(bmlist,filename):
w+'
forlineinbmlist:
iflen(line):
continue
f.write(line)
defadd(bmlist,name,url,mark,folder='
default'
bookmark='
bookmark=name+'
+url+'
+mark+'
+folder+os.linesep
ifbookmarknotinbmlist:
bmlist.append(bookmark)
defmodify(bmlist,index,name,url,mark,folder):
bmlist[index]=bk
defdelbm(bmlist,index):
bmlist.pop(index)
deffindbk(bmlist,fname,furl):
fori,iteminenumerate(bmlist):
(name,url,mark,folder)=item.split('
iffnameandfurl:
if(fnameinname)and(furlinurl):
returni
iffnameand(fnameinname):
returni
iffurland(furlinurl):
return-1
defoutput2html(bmlist):
os.mkdir(folder.strip())
filename=name.strip()+'
.html'
f=open(filename,'
fmt='
%d\t%s\t<
ahref=%s>
%s<
/a>
\t%s\t%s<
br>
f.write('
<
html>
head>
title>
bookmark<
/title>
/head>
body>
content=fmt%(i+1,name,r'
bbb:
+url,url,mark,folder)
f.write(content)
/body>
/html>
f.close()
os.rename(filename,folder.strip()+os.sep+filename)
bmlist=load('
url.txt'
printbmlist
whileTrue:
0.quit'
1.addaurlbookmark'
2.modifyaurlbookmark'
3.deleteaurlbookmark'
4.findaurlbookmark'
5.outputurlbookmarkashtml'
iInput=input('
pleaseinputoperationnum:
if(0==iInput):
save(bmlist,r'
break
elif(iInput<
0oriInput>
5):
Errorinputoperation,tryagain.0operationisquit\n'
elif1==iInput:
data=geturl()
add(bmlist,*data)
printbmlist
elif2==iInput:
index=int(raw_input('
bookmarkindex:
modify(bmlist,index,*data)
elif3==iInput:
delbm(bmlist,index)
elif4==iInput:
name=raw_input('
urlname:
urladdress:
index=findbk(bmlist,name,url)
ifindex==-1:
notfound'
printbmlist[index]
elif5==iInput:
output2html(bmlist)
9-12用户名和密码。
回顾练习7-5,修改代码使之可以支持“上次登录时间”。
请参阅time模块中的文档了解如何记录用户上次登录的时间。
另外提供一个系统管理员,他可以导出所有用户的用户名,密码(如需要可以加密),以及上次登录时间。
a)数据应保存在磁盘中,使用冒号:
分隔,一次写入一行,例如“Joe:
boohoo:
953176591.145,文件中数据的行数应该等于你系统上的用户数。
b)进一步改进你的程序,不再一次写入一行,而使用pickle模块保存整个数据对象。
请参阅pickle模块的文档了解如何序列化/扁平化对象,以及如何读写保存的对象。
一般来说,这个解决方案的代码行数要比a)少;
c)使用shelve模块替换pickle模块,由于可以省去一些维护代码,这个解决方案的代码比b)的更少。
fromdatetimeimportdatetime
importhashlib,os
importpickleasp
importshelveass
db={}
defnewuser():
value=[]
prompt='
loginnamedesiredagain:
whileTrue:
name=raw_input(prompt).lower()
ifnotname.isalnum()and'
inname:
nameformaterror'
ifdb.has_key(name):
prompt='
nametaken,tryanother:
pwd=raw_input('
loginpasswddesired:
m=hashlib.md5()
m.update(pwd)
value.append(m.hexdigest())
value.append(datetime.now())
db[name]=value
newuseris%s,registertimeis%s'
%(name,db[name][1])
defolduser():
).lower()
passwd=db.get(name)
ifpasswd[0]==m.hexdigest():
newtime=datetime.now()
if(newtime-db[name][1]).days==0and(newtime-db[name][1]).seconds<
14400:
youalreadyloggedinat%s:
%(db[name][1])
passwd[1]=newtime
welcomeback%s,logintimeis%s'
%(name,passwd[1])
loginincorrect'
defremoveuser():
printdb
inputausernametoremove:
ifnameindb:
db.pop(name)
inputerror'
defuserlogin():
loginnamedesired:
ifnotdb.has_key(name):
usernameisnotindb
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- python 核心 编程 第二 习题 答案
![提示](https://static.bdocx.com/images/bang_tan.gif)