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组件内容学到再做