Python编程:从入门到实践-第十章:文件和异常(语法)

#open()/close()
#方法read()直接读取整个文件
#方法readlines()从文件中读取每一行,并将其存储在一个列表中,每一行后面会带着换行符.
#10-1 Python学习笔记:在文本编辑器中新建一个文件,写几句话来总结一下你至此学到的Python知识,其中每一行都以“In Python you can”打头。
将这个文件命名为learning_python.txt,并将其存储到为完成本章练习而编写的程序所在的目录中。
编写一个程序,它读取这个文件,并将你所写的内容打印三次:第一次打印时读取整个文件;第二次打印时遍历文件对象;第三次打印时将各行存储在一个列表中,再在with代码块外打印它们。

with open('learning_python.txt') as python:
	admin = python.read()
with open('learning_python.txt') as python:
	ios = python.readlines()
print(admin)
for nn in ios:
	print(nn)
print(ios)

#10-2 C语言学习笔记:可使用方法replace()将字符串中的特定单词都替换为另一个单词。下面是一个简单的示例,演示了如何将句子中的’dog’替换为’cat’:
#读取你刚创建的文件learning_python.txt中的每一行,将其中的Python都替换为另一门语言的名称,如C。将修改后的各行都打印到屏幕上。

nns=[]
for nn in ios:
	nnk=nn.replace('python','c++')
	nns.append(nnk)
print(nns)
'r'读取,'w'写入,'a'附加模式,可以在原有文件基础上添加内容,'r+'读取和写入
如果不提供这个参数,默认是只读.如果写入文件不存在,会创建它

#使用文件对象的方法write()将一个字符串写入文件,它不会在末尾添加换行符,需要的话自己加
#10-3 访客:编写一个程序,提示用户输入其名字;用户作出响应后,将其名字写入到文件guest.txt中。

信息=input('请输入你的名字:\n')
with open ('10/guest.txt','w') as 访客:
	访客.write(信息)

#10-4 访客名单:编写一个while循环,提示用户输入其名字。用户输入其名字后,在屏幕上打印一句问候语,并将一条访问记录添加到文件guest_book.txt中。确保这个文件中的每条记录都独占一行。

while True:
	name=input('告诉我你的名字:\n')
	if name == '退出':
		break
	print('hello'+name)
	with open('10/guest_book.txt','a') as 记录:
		记录.write(name+'\n')

#10-5 关于编程的调查:编写一个while循环,询问用户为何喜欢编程。每当用户输入一个原因后,都将其添加到一个存储所有原因的文件中。

while True:
	为什么 = input('你为什么喜欢编程?\n')
	if 为什么 == '没有了':
		break
	with open('10/10-5wenjian.txt','a') as 询问:
		询问.write(为什么+'\n')
#异常是使用try-except代码块处理的
#方法split()根据一个字符串创建一个单词列表,通过空格进行分隔
#encoding='UTF-8'在open方法里通过参数进行了编码声明utf-8
#pass语句什么都不做,充当占位符,以后可能会用到这个位置的代码或者在这里加入代码

#10-6 加法运算:提示用户提供数值输入时,常出现的一个问题是,用户提供的是文本而不是数字。
在这种情况下,当你尝试将输入转换为整数时,将引发ValueError异常。
编写一个程序,提示用户输入两个数字,再将它们相加并打印结果。
在用户输入的任何一个值不是数字时都捕获ValueError异常,并打印一条友好的错误消息。
对你编写的程序进行测试:先输入两个数字,再输入一些文本而不是数字。

try:
	a = int(input('输入第一个数字\n'))
	b = int(input('输入第二个数字\n'))
	ab=a+b
except ValueError:
	print('你必须输入两个数字我才能做加法')
else:
	print('这两个数字相加等于'+str(ab))

#10-7 加法计算器:将你为完成练习10-6而编写的代码放在一个while循环中,让用户犯错(输入的是文本而不是数字)后能够继续输入数字。

while True:
	try:
		a = int(input('输入第一个数字\n'))
		b = int(input('输入第二个数字\n'))
		ab=a+b
	except ValueError:
		print('你必须输入两个数字我才能做加法')
		continue
	else:
		print('这两个数字相加等于'+str(ab))
		break

#10-8 猫和狗:创建两个文件cats.txt和dogs.txt,在第一个文件中至少存储三只猫的名字,在第二个文件中至少存储三条狗的名字。
编写一个程序,尝试读取这些文件,并将其内容打印到屏幕上。
将这些代码放在一个try-except代码块中,以便在文件不存在时捕获FileNotFound错误,并打印一条友好的消息。
将其中一个文件移到另一个地方,并确认except代码块中的代码将正确地执行。

try:
	with open('10/cats.txt',encoding='UTF-8') as cats:
		a=cats.read()
	with open('10/dogs.txt',encoding='UTF-8') as dogs:
		b=dogs.read()
except FileNotFoundError:
	pass
else:
	print(a+'\n'+b)

#10-9 沉默的猫和狗:修改你在练习10-8中编写的except代码块,让程序在文件不存在时一言不发。
#10-10 常见单词:下载作品的文本文件,使用方法count()来确定特定的单词或短语在字符串中出现了多少次。
#编写一个程序,它读取获取的文件,并计算单词’the’在每个文件中分别出现了多少次。

with open('10/63806-0.txt',encoding='UTF-8') as 小说:= 小说.read()
	aa=str(.lower().count('the'))
print('这本小说the这个单词出现了'+aa+'次')

#10-11 喜欢的数字:编写一个程序,提示用户输入他喜欢的数字,并使用json.dump()将这个数字存储到文件中。再编写一个程序,从文件中读取这个值,并打印消息“I know your favorite number! It’s _____.”。

数字=input('嘿,朋友,你喜欢的数字是什么?\n')
import json
with open('10/shuzi.json','w') as 喜欢的数字:
	json.dump(数字,喜欢的数字)
with open('10/shuzi.json') as 喜欢的数字:
	a = 喜欢的数字.read()
	print('我喜欢的数字是'+a)

#10-12 记住喜欢的数字:将练习10-11中的两个程序合而为一。如果存储了用户喜欢的数字,就向用户显示它,否则提示用户输入他喜欢的数字并将其存储到文件中。运行这个程序两次,看看它是否像预期的那样工作。

import json
try:
	with open('10/shuzi.json') as 喜欢的数字:
		a = 喜欢的数字.read()
except FileNotFoundError:
	数字=input('嘿,朋友,你喜欢的数字是什么?\n')
	with open('10/shuzi.json','w') as 喜欢的数字:
		json.dump(数字,喜欢的数字)
		print('我喜欢的数字是'+数字)
else:
	print('我喜欢的数字是'+a)

#10-13 验证用户:最后一个remember_me.py版本假设用户要么已输入其用户名,要么是首次运行该程序。我们应修改这个程序,以应对这样的情形:当前和最后一次运行该程序的用户并非同一个人。
为此,在greet_user()中打印欢迎用户回来的消息前,先询问他用户名是否是对的。如果不对,就调用get_new_username()让用户输入正确的用户名。

import json
def get_stored_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():#让用户创建姓名,并写入json文件,并返回写入的数值
	username = input('设置你的用户名吧\n')
	filename = 'username.json'
	with open(filename,'w') as f_obj:
		json.dump(username,f_obj)
	return username
def greet_user():
	username = get_stored_username()#读取文件,获取用户姓名
	if username:#当存在用户名的时候
		询问 = input('登录用户: '+username+'\n请问需要更改吗,回答是则重新设置用户名\n')
		if 询问 == '是':#需要修改登录用户的话
			get_new_username()
			greet_user()#再次尝试登录
		else:
			print("欢迎回来, "+username+'!')
	else:#如果不存在的话
		username = get_new_username()#让用户创建姓名,并告诉用户,我们已经保存了他的姓名
		print("下次登录我会记住你的用户名, "+username+"!")
greet_user()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值