Python核心编程(第二版)-第三章答案

3-1.标识符。为什么Python中不需要变量名和变量类型声明?

答:python是动态类型语言,对象在创建时才确定类型和内存,赋值给一个变量其实时将引用赋值给变量,对应的引用计数加1.

3-2.标识符。为什么Python中不需要声明函数类型?

答:与3-1相同,函数也是一个对象,对象的类型和内存时在运行时(创建时确定的),语法会根据右侧的操作数来确定对象的类型。

3-3.标识符。为什么应当避免在变量名的开始和结尾使用双下划线?

答:python中变量以下划线开头或者结尾有特殊的含义
xxx :双下划线开头和结尾,时python系统的变量名称如:doc
__xxx:双下划线开头表示类中私有变量的命名

3-4.语句。在Python中一行可以书写多个语句吗?

答:可以,每个语句之间用分号“;”风格,但是这种写法可读性差,违反python易读,简洁的原则

3-5.语句。在Python中可以将一个语句分成多行书写吗?

答:可以,一行过长的语句可以使用反斜杆‘\’来分成多行书写。对于赋值的语句()和[]内容也可以分成多行书写

3-6.变量赋值。

(a)赋值语句x, y, z = 1, 2, 3会在x、y、z中分别赋什么值?
(b)执行z, x, y = y, z, x后,x、y、z中分别含有什么值?
答:

x, y, z = 1, 2, 3  #多元赋值,其实本质是元组的赋值,只不过()可写可不写,但是为了可读最好还是写成(x, y, z) = (1, 2, 3)的形式
z, x, y = y, z, x #这是python三值互换的例子,无需第三个中间变量即可实现

下面的问题涉及了makeTextFile.py和readTextFile.py脚本。

3-8.Python代码。将脚本拷贝到你的文件系统中,然后修改它。可以添加注释,修改提示符(‘>’太单调了)等,修改这些代码,使他们看上去更舒服
# -*- coding:utf-8 -*-
'create makeTextFile.py --create text file'
import os
#给lineseq创建引用,1.变量名更短更好书写 2.加快读取速度
#lineseq是行分割符号,会根据不同的系统选择不同的换行符,unix \n   windows \r\n
ls=os.linesep
#用户输入一个不存在的文件名称
while True:
	#缩减最好不要用tab,敲4下空格,会使代码的跨平台性能更强
    fname=raw_input('Enter filename: ')
    fname='C:\\Users\\17759\\Desktop\\10000\\'+fname
    if os.path.exists(fname):
        print 'Enter again,%s is already exists'%fname
    else:
    	print fname
        break
#用户输入要存入的文件的内容,每行以一个‘.’表示输入一行结束
#这种写法会将列表值覆盖
content=[]
print "please enter your contents and quit by '.' :"
while True:
	line=raw_input('enter content:')
	if line=='.':
		print 'quit,input over'
		break
	else:
		content.append(line)
print content
#建列表值写入文件
for line in content:
	f_content=open(fname,'a')
	data=line+ls
	f_content.write(data)
f_content.close()
print 'write file over'
#-----------------------------------读取文件开始---------------------------------------
# -*- coding:utf-8 -*-
'create readTextFile.py --read text file'
import os
ls=os.linesep
#判断用户输入的文件是否存在
while True:
	#缩减最好不要用tab,敲4下空格,会使代码的跨平台性能更强
    fname=raw_input('Enter filename: ')
    fname='C:\\Users\\17759\\Desktop\\10000\\'+fname
    if os.path.exists(fname):
        print 'success,%s is exists'%fname
        break
    else:
    	print 'Enter again,%s is not find'%fname
        

#以try-except-else的模式读出文件内容并存入list
content=[]
print "reading....,please wait mediate"
try:
	f_content=open(fname,'r')
except IOExcept,e: 
	print e
else:
	#readlines() 按行读取存入list并写把每一行的\r\n(window)换行符一并读出,read和readline读出来的都是str
	data=f_content.readlines()
	print data
f_content.close()
print 'read file over'
3-9.移植。如果你在不同类型的计算机系统中分别安装有Python,检查一下,os.linesep的值是否有不同。记下操作系统的类型及linesep的值。
print os.linesep #linux 下显示 \r
print os.linesep #windows下显示 \r\n
3-11.字符串格式化。不再抑制readTextFile.py中print语句生成的NEWLINE字符,修改你的代码,在显示一行之前删除每行末尾的空白。这样,你就可以移除print语句末尾的逗号了。提示:使用字符串对象的strip()方法。
#字符串自带的内建函数strip()可以去除字符串两侧的\r\n换行符号
content=[]
print "reading....,please wait mediate"
try:
	f_content=open(fname,'r')
except IOExcept,e: 
	print e
else:
	#for循环打印,for循环本身有read的功能,print自带输出换行,加上','可去除,并去除首位空格和换行符号
	for line in f_content:
		print line,
		content.append(line.strip())
		print content
f_content.close()
print 'read file over'
3-12.合并源文件。将两段程序合并成一个,给它起一个你喜欢的名字,比如readNwriteTextFiles.py。让用户自己选择是创建还是显示一个文本文件。
# -*- coding:utf-8 -*-
'create readNWreiteTextFile.py --readNWrite text file'
#注意编辑脚本时tab和四个空格不能混用,否则会报‘IndentationError:unindent does not match any outer indentation level’错误,如果使用subline编辑器,则可以选中看,tab显示的‘----’,四个空格显示‘....’
import os
ls=os.linesep
#创建一个txt文件并写入数据
def writefile():
    #python中True和1不一样
    status=True
    in_status=True
    while status:
        fname=raw_input('please enter a file name: ')
        fname='C:\\Users\\17759\Desktop\\10000\\'+fname
        if os.path.exists(fname):
            print 'the file is already exists,please try again'
        else:
            status=False
    content=[]
    while in_status:
        line=raw_input("please input content and end with '.':")
        if line.strip()=='.':
            in_status=False
        else:
            content.append(line.strip())
    for eachline in content:
        f_file=open(fname,'a')
        data=eachline+ls
        f_file.write(data)
    f_file.close()
#读取文件内容并打印到dos
def readfile():
    try:
        fname=raw_input('please input you want read de filename: ')
        fname='C:\\Users\\17759\Desktop\\10000\\'+fname
        f_file=open(fname,'r')
    except IOExcept,e:
        print e
    else:
        for eachline in f_file:
            print eachline.strip()
        f_file.close()

print 'a.write file'
print 'b.read file'
print 'c.exit'
status3=True
while status3:
    choice=raw_input('please input you choice:')
    if choice.strip()=='a':
        writefile()
        status3=False
    elif choice.strip()=='b':
        readfile()
        status3=False
    elif choice.strip()=='c':
        print 'exit'
        status3=False
    else:
        print 'your input is error,please input again'
3-13.*添加新功能。将你上一个问题改造好的readNwriteTextFiles.py增加一个新功能:允许用户编辑一个已经存在的文本文件。你可以使用任何方式,无论是一次编辑一行,还是一次编辑所有的文本。需要提醒一下的是,一次编辑全部文本有一定难度,你可能需要借助GUI工具包或一个基于屏幕文本编辑的模块比如curses模块。要允许用户保存他的修改(保存到文件)或取消他的修改(不改变原始文件),并且要确保原始文件的安全性(不论程序是否正常关闭)

GUI的text组件内容学到再做

[参考文章]https://www.cnblogs.com/tmyyss/p/3751634.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值