【《Python编程:从⼊门到实践》习题答案--第⼗章:⽂件与
异常】
# 10-1 Python学习笔记:在⽂本编辑器中新建⼀个⽂件,写⼏句话来总结⼀下你⾄此学到的Python知识,
# 其中每⼀⾏都以“In Python you can”打头。将这个⽂件命名为,
# 并将其存储到为完成本章练习⽽编写的程序所在的⽬录中。编写⼀个程序,它读取这个⽂件,并将你所写的内容打印三次:
# 第⼀次打印时读取整个⽂件;第⼆次打印时遍历⽂件对象;第三次打印时将各⾏存储在⼀个列表中,再在with 代码块外打印它们。
f_name = 'msg/'
with open(f_name) as f_name1:
print('_________"1"___________')
print(ad().rstrip())
with open(f_name) as f_name1:
print('_________"2"___________')
for i in f_name1:
print(i.rstrip())
with open(f_name) as f_name1:
print('_________"3"___________')
lines = adlines()
for i in lines:
print(i.rstrip())
# 10-2 C语⾔学习笔记:可使⽤⽅法replace() 将字符串中的特定单词都替换为另⼀个单词。下⾯是⼀个简单的⽰例,
# 演⽰了如何将句⼦中的'dog' 替换为'cat':
# >>> message = "I really like dogs."
# >>> place('dog', 'cat')
# 'I really like cats.'
# 读取你刚创建的⽂件中的每⼀⾏,将其中的Python都替换为另⼀门语⾔的名称,如C。将修改后的各⾏都打印到屏幕上。
f_name = 'msg/'
with open(f_name) as f_name1:
lines = adlines()
for line in lines:
c = place('Python','C++')
print(c)
# 10-3 访客:编写⼀个程序,提⽰⽤户输⼊其名字;⽤户作出响应后,将其名字写⼊到⽂件中。
name_info = 'msg/name_info_'
with open(name_info, 'r+') as name_info1:
while True:
name_msg = input('请输⼊你的姓名:')
if name_msg == 'quit':
break
elif name_msg == 'cls':
uncate()
python编程:从入门到实践第二版break
else:
name_info1.write('我的名字叫:' + name_msg + '\n')
# 10-4 访客名单:编写⼀个while 循环,提⽰⽤户输⼊其名字。⽤户输⼊其名字后,在屏幕上打印⼀句问候语,
# 并将⼀条访问记录添加到⽂件中。确保这个⽂件中的每条记录都独占⼀⾏。
f_name = 'msg/name_info_'
with open(f_name,'a') as f_name1:
while True:
msg10_4 = input('请输⼊你的姓名:')
if msg10_4 == 'quit':
break
elif msg10_4 == 'cls':
uncate()
break
else:
print('你好!' + msg10_4)
f_name1.write('登录的⼈是: '+ msg10_4 + '\n')
# 10-5 关于编程的调查:编写⼀个while 循环,询问⽤户为何喜欢编程。每当⽤户输⼊⼀个原因后,都将其添加到⼀个存储所有原因的⽂件中。
f_name = 'msg/name_'
f_name = 'msg/name_'
with open(f_name, 'a') as f_name1:
while True:
inp = input('请输⼊你喜欢编程的原因:(输⼊quit退出)')
if inp == 'quit':
break
elif inp == '':
print('请不要不写字!会浪费地⽅的亲!')
else:
f_name1.write(inp + '\n')
# 10-6 加法运算:提⽰⽤户提供数值输⼊时,常出现的⼀个问题是,⽤户提供的是⽂本⽽不是数字。在这种情况下,当你尝试将输⼊转换为整数时,将引
# 发TypeError 异常。编写⼀个程序,提⽰⽤户输⼊两个数字,再将它们相加并打印结果。
# 在⽤户输⼊的任何⼀个值不是数字时都捕获TypeError 异常,并打印⼀条友好的错误消息。对你编写的程序进⾏测试:先输⼊两个数字,再输⼊⼀些⽂本⽽不是数try:
inp_msg = input('请输⼊数字:')
inp_msg_toInt = int(inp_msg)
except ValueError:
print('只能输⼊整型')
else:
print(inp_msg_toInt)
# 10-7 加法计算器:将你为完成练习10-6⽽编写的代码放在⼀个while 循环中,让⽤户犯错(输⼊的是⽂本⽽不是数字)后能够继续输⼊数字。
while True:
try:
inp_msg = input('请输⼊数字:')
inp_msg_toInt = int(inp_msg)
except ValueError:
print('只能输⼊整型')
else:
print(inp_msg_toInt)
break
# 10-8 猫和狗:创建两个⽂件和,在第⼀个⽂件中⾄少存储三只猫的名字,在第⼆个⽂件中⾄少存储三条狗的名字。编写⼀个程序,尝试读取这些# 并将其内容打印到屏幕上。将这些代码放在⼀个try-except 代码块中,以便在⽂件不存在时捕获FileNotFound 错误,并打印⼀条友好的消息。将其中⼀个⽂件
# 移到另⼀个地⽅,并确认except 代码块中的代码将正确地执⾏。
>>读、写、清屏函数,不⽤try,直接造>>>###
f_name_a = ''
f_name_b = ''
def write(f_name_x,msg):
with open(f_name_x,'a') as f:
f.write(msg)
def read(f_name_x):
with open(f_name_x) as f:
con = f.read()
print(con.rstrip())
def clear(f_name_x):
with open(f_name_x,'w') as f:
clear(f_name_a)
clear(f_name_b)
write(f_name_a,'cat1\n')
write(f_name_a,'cat2\n')
write(f_name_a,'cat3\n')
write(f_name_b,'dog1\n')
write(f_name_b,'dog2\n')
write(f_name_b,'dog3\n')
read(f_name_a)
read(f_name_b)
>>正确答案>>##
def open_file(f_name):
def open_file(f_name):
try:
with open(f_name) as f_n:
con = ad()
except FileNotFoundError:
print('404 not found!')
else:
print(con.rstrip())
ur_list = [ '', '']
for i in ur_list:
open_file(i)
# 10-9 沉默的猫和狗:修改你在练习10-8中编写的except 代码块,让程序在⽂件不存在时⼀⾔不发。
def open_file(f_name):
try:
with open(f_name) as f_n:
con = ad()
except FileNotFoundError:
pass
else:
print(con.rstrip())
ur_list = [ '', '']
for i in ur_list:
open_file(i)
# 10-10 常见单词:访问项⽬Gutenberg(/ ),并⼀些你想分析的图书。下载这些作品的⽂本⽂件或将浏览器中的原始⽂本复制到⽂本⽂件# 你可以使⽤⽅法count() 来确定特定的单词或短语在字符串中出现了多少次。例如,下⾯的代码计算'row' 在⼀个字符串中出现了多少次:
# >>> line = "Row, row, row your boat"
# >>> unt('row')
# 2 >
# >> line.lower().count('row')
# 3 请
# 注意,通过使⽤lower() 将字符串转换为⼩写,可捕捉要查的单词出现的所有次数,⽽不管其⼤⼩写格式如何。
# 编写⼀个程序,它读取你在项⽬Gutenberg中获取的⽂件,并计算单词'the' 在每个⽂件中分别出现了多少次。
f_name = ''
with open(f_name,encoding='utf-8') as f_n:
con = ad()
a = unt('the')
print(a)
# 10-11 喜欢的数字:编写⼀个程序,提⽰⽤户输⼊他喜欢的数字,并使⽤json.dump() 将这个数字存储到⽂件中。再编写⼀个程序,从⽂件中读取这个值,并打印# 消息“I know your favorite number! It's _____.”。
import json
f_name = 'msg/inp_10_11.json'
msg_inp = input('请输⼊您喜欢的数字:')
with open(f_name,'w') as fn:
json.dump(msg_inp,f_n)
with open(f_name) as fn1:
c = json.load(f_n)
print('I know your favorite number! It\'s '+ c)
# 10-12 记住喜欢的数字:将练习10-11中的两个程序合⽽为⼀。如果存储了⽤户喜欢的数字,就向⽤户显⽰它,否则提⽰⽤户输⼊他喜欢的数字并将其存储到⽂件# 运⾏这个程序两次,看看它是否像预期的那样⼯作。
import json
# 如果以前存储了⽤户名,就加载它
# 否则,就提⽰⽤户输⼊⽤户名并存储它
filename = 'msg/fav_numb.json'
try:
with open(filename) as f_obj:
fav_num = json.load(f_obj)
except FileNotFoundError:
fav_num = input("请输⼊你喜欢的数字:")
with open(filename, 'a') as f_obj:
json.dump(fav_num, f_obj)
print("你喜欢的数字:" + fav_num + "!")
else:
print("你喜欢的数字:" + fav_num + "!")
print("你喜欢的数字:" + fav_num + "!")
# 10-13 验证⽤户:最后⼀个remember_me.py版本假设⽤户要么已输⼊其⽤户名,要么是⾸次运⾏该程序。我们应修改这个程序,以应对这样的情形:当前和最后# 运⾏该程序的⽤户并⾮同⼀个⼈。
# 为此,在greet_user() 中打印欢迎⽤户回来的消息前,先询问他⽤户名是否是对的。如果不对,就调⽤get_new_username() 让⽤户输⼊正确的⽤户名。
import json
def get_sorted_username():
"""如果存储了⽤户名,就获取它"""
filename = 'username.json'
try:
with open(filename) as f_obj:
username = json.load(f_obj)
except FileNotFoundError:
return None
else:
return username
def get_new_username():
username = input("What is your name?")
filename = 'username.json'
with open(filename, 'w') as f_obj:
json.dump(username, f_obj)
return username
def greet_user():
username = get_sorted_username()
if username:
result = input(username + "is right?")
if result == 'y':
print("Welcom back,", username, "!")
else:
username = get_new_username()
print("Welcom back,", username, "!")
else:
username = get_new_username()
print("We'll remember you when you come back,", username, "!")
if __name__ == "__main__":
greet_user()

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。

发表评论