3-1 变量在第一次被赋值时自动声明。在赋值时解释器会根据语法和右侧的操作数来决定新对象的类型。
3-2 函数总是返回一个值,显式 return 的值或者 None。返回的值的类型也是动态确定。
3-3 因为变量名 xxx 对 Python 来说有特殊含义,对于普通的变量应当避免这种命名风格。
3-4 可以,使用 “;”
3-5 可以,使用 “\” 或者括号
3-6
(a)x = 1, y = 2, z = 3
(b)z = 2, x = 3, y = 1
3-7 40XL, $aving$, 0x40L, thisIsn’tAVar, big-daddy, 2hot2touch, counter-1 不合法。不是以字母或者下划线开头,或者有非字母下划线数字的字符。print, if 是关键字。
3-10
用异常处理取代对 os.path.exists() 的调用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| import os
ls = os.linesep
while True: fname = raw_input('input a filename:')
try: fobj = open(fname, 'r') except IOError, e: break; else: print "Error: '%s' already exists" % fname fobj.close()
all = [] print "\nEnter lines ('.' by itself to quit).\n"
while True: entry = raw_input('>') if entry == '.': break else: all.append(entry)
fobj = open(fname, 'w') fobj.writelines(['%s%s' % (x, ls) for x in all]) fobj.close() print 'Done!'
|
用 os.path.exists() 取代异常处理方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| import os
fname = raw_input('Enter filename:') print
if os.path.exists(fname): fobj = open(fname, 'r') for eachLine in fobj: print eachLine, fobj.close() else: print 'this file not exists'
|
3-11
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| import os
fname = raw_input('Enter filename:') print
if os.path.exists(fname): fobj = open(fname, 'r') for eachLine in fobj: print eachLine.strip() fobj.close() else: print 'this file not exists'
|
3-12
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
| """to read or make a file""" import os
def makeTextFile(): '''make a file''' ls = os.linesep while True: fname = raw_input('input a filename:') try: fobj = open(fname, 'r') except IOError, e: break; else: print "Error: '%s' already exists" % fname fobj.close()
all = [] print "\nEnter lines ('.' by itself to quit).\n"
while True: entry = raw_input('>') if entry == '.': break else: all.append(entry)
fobj = open(fname, 'w') fobj.writelines(['%s%s' % (x, ls) for x in all]) fobj.close() print 'Done!'
def readTextFile(): '''read a file''' fname = raw_input('Enter filename:') print
if os.path.exists(fname): fobj = open(fname, 'r') for eachLine in fobj: print eachLine.strip() fobj.close() else: print 'this file not exists'
def main(): '''main menu''' while True: print '1.Read a file' print '2.Make a file' print 'x.exit' myStr = raw_input('input your choice:') if myStr == '1': readTextFile() elif myStr == '2': makeTextFile() elif myStr == 'x': break
if __name__ == '__main__': main()
|
3-13
Windows 下 curses 模块貌似无法正常使用……
迂回的实现思路是将文件内容按行读取到一个列表里,
然后让用户修改每一行,
最后让用户选择是否保存,
保存则重写文件,
不保存则退出。
Python 核心编程中文第二版课后练习 3.8 答案