"""练习10-1 Python学习笔记
1.在文本编辑器中新建一个文件,写几句话来总结一下你至此学到的Python知识,
其中每一行都以In Python you can打头将这个文件命名为learning_python.txt并将其存储到为完成本章练习而编写的程序所在的目录中
2.编写一个程序,它读取这个文件,并将你所写的内容打印三次:
第一次打印时读取整个文件;
3.第二次打印时遍历文件对象;
4.第三次打印时将各行存储在一个列表中,再在with代码块外打印它们。"""
# 1.文本编辑器中新建一个名为:learning_python文件
filename = 'learning_python.txt'
# 2.编写一个程序,它读取这个文件
print("--- 正在读取整个文件:")
with open(filename) as f: # 打开文件取个f的别名
contents = f.read() # 把读取的文件赋值给变量
print(contents) # 打印
# 3.逐行读取
print("\n--- 正在逐行读取个文件:")
with open(filename) as f: # 打开文件取个f的别名
for line in f: # 变量文件
print(line.rstrip()) # 打印逐行时删除尾部换行符
# 4.
print("\n--- 将行存储在列表中再打印:")
with open(filename) as f: # 打开文件取个f的别名
lines = f.readlines() # 把读取的每行文件赋值给变量
for line in lines: # 代码块外打印
print(line.rstrip())
"""练习10-2 C语言学习笔记
你可使用方法replace()将字符串中的特定单词都替换为另一个单词。
下面是一个简单的示例,演示了如何将句子中的'dog'替换为'cat':"""
# 把文本文件赋值给变量
filename = 'learning_python.txt'
# 打开文件起个别名逐行读取
with open(filename) as f:
lines = f.readlines() # 读取出来后赋值给列表
# 遍历文件列表
for line in lines:
line = line.rstrip() # 删除末尾的换行符
print(line.replace('Python', 'C')) # 再将文件中Python替换为C
"""练习10-3访客
编写一个程序,提示用户输入其名字;用户做出响应后,将其名字写入到文件guest.txt中。"""
# 提示用户输入其名字
name = input("输入你的名字: ")
# 创建名为guest.txt的文本文件并赋值给变量
filename = 'guest.txt'
# 以写入的方式打开文件给文件起给别名
with open(filename, 'w') as f:
f.write(name) # 把你的名字储存到文本文件
# 你的文件夹会自动生成一个名为guest.txt的文本文件
"""练习10-4 访客名单
编写一个while循环,提示用户输入其名字。用户输入其名字后,在屏幕上打印一句问候语,
并将一条到访记录添加到文件guest_book.txt中。
确保这个文件中的每条记录都独占一行。"""
# 新建一个名为guest_book.txt的文本文件
filename = 'guest_book.txt'
print("完成后输入“quit”退出.")
while True: # 循环
name = input("\n输入你的名字: ") # 提示用户输入其名字
if name == 'quit': # 如果名字是quit
break # 就停止
else: # 反之
with open(filename, 'a') as f: # 以追加的形式打开文件
f.write(name + "\n") # 把名字添加到文件guest_book.txt中
print("゙嗨 " + name + "您已被添加到宾客登记簿.") # 打印
"""10-5 关于编程的调查
编写一个while循环,询问用户为何喜欢编程。
每当用户输入一个原因后,都将其添加到一个存储所有原因的文件中。。"""
# 新建一个名为programming_poll.txt的文本文件
filename = 'programming_poll.txt'
responses = [] # 存储所有原因列表
# 循环询问用户
while True:
response = input("\n你为什么喜欢编程: ") # 提示用户输入
responses.append(response) # 添加到列表
# 控制结束循环
continue_poll = input("y继续询问n结束询问? (y/n) ")
if continue_poll != 'y': # 如果输入y就结束循环
break
# 把询问结果存储到文件
with open(filename, 'a') as f: # 以追加的形式打开文件
for response in responses: # 遍历列表
f.write(response + "\n") # 把询问结果添加到文件programming_poll.txt中
"""练习10-6 加法运算
提示用户提供数值输入时,常出现的一个问题是,用户提供的是文本而不是数字。
在这种情况下,当你尝试将输入转换为整数时,将引发TypeError异常。
编写一个程序,提示用户输入两个数字,再将它们相加并打印结果。
在用户输入的任何一个值不是数字时都捕获TypeError异常,并打印一条友好的错误消息。
对你编写的程序进行测试:先输入两个数字,再输入一些文本而不是数字。"""
try: # 如果用户出错
# 用户输入的是字符要转换成整数才能运算
x = int(input("请输入一个整数: "))
y = int(input("请再输入一个整数: "))
except ValueError: # 就打印提示语
print("对不起只能输入整数.")
else:
sum = x + y # 变量接收计算结果
print(str(x) + " + " + str(y) + " = " + str(sum)) # 打印计算结果(整数转换成字符才能打印)
"""练习10-7 加法计算器
将你为完成练习10-6而编写的代码放在一个while循环中,
让用户犯错(输入的是文本而不是数)后能够继续输入数。"""
while True:
try: # 如果用户出错
# 用户输入的是字符要转换成整数才能运算
x = int(input("请输入一个整数: "))
y = int(input("请再输入一个整数: "))
except ValueError: # 就打印提示语
print("对不起只能输入整数.")
else:
sum = x + y # 变量接收计算结果
print(str(x) + " + " + str(y) + " = " + str(sum)) # 打印计算结果(整数转换成字符才能打印)
# 退出循环的条件
x = input("退出请输入n: ") # 输入n退出
if x == 'n': # 如果输入n
break # 停止循环
"""练习10-8 猫和狗
1.创建两个文件——cats.txt和dogs.txt,在第一个文件中至少存储三只猫的名字,在第二个文件中至少存储三条狗的名字。
2.编写一个程序,尝试读取这些文件,并将其内容打印到屏幕上。
3.将这些代码放在一个try-except代码块中,以便在文件不存在时捕获FileNotFound错误,并打印一条友好的消息。
4.将文件之一移到另一个地方,并确认except代码块中的代码将正确地执行。"""
# 1.创建两个文本文件——cats.txt和dogs.txt并赋值给变量
filenames = ['cats.txt', 'dogs.txt']
# 2.编写一个程序,尝试读取这些文件,并将其内容打印到屏幕上。
for filename in filenames:
print("\n正在读取文件: " + filename)
# 3.将这些代码放在一个try-except代码块中,
try:
with open(filename) as f:
contents = f.read()
print(contents)
except FileNotFoundError:
print(" 对不起找不到cats文件.")
# 4.删除cats文件后执行代码
"""练习10-9 沉默的猫和狗
修改你在练习10-8中编写的except代码块,让程序在文件不存在时一言不发。"""
# 1.创建两个文本文件——cats.txt和dogs.txt并赋值给变量
filenames = ['cats.txt', 'dogs.txt']
# 2.编写一个程序,尝试读取这些文件,并将其内容打印到屏幕上。
for filename in filenames:
# 3.将这些代码放在一个try-except代码块中,
try: # 判断是否出错
with open(filename) as f: # 打开文件
contents = f.read() # 赋值给变量
except FileNotFoundError: # 出错了让程序在文件不存在时一言不发
pass # 停止
else: # 反之读取没有出错的文件
print("\n正在读取文件: " + filename)
print(contents) # 打印没有出错的文件
# 4.删除cats文件后执行代码
"""练习10-11 喜欢的数
1.编写一个程序,提示用户输入他喜欢的数,并使用json.dump()将这个数存储到文件中。
2.再编写一个程序,从文件中读取这个值,并打印消息“I know your favorite number! It’s _____."""
# 1
import json # 导入json模块存储数据
number = input("你最喜欢的数是: ") # 提示用户
with open('num.txt', 'w') as f: # 写入方式打开文件(会自动新建一个)起个别名f
json.dump(number, f) # 调用json模块里dump函数存储到文件
print("我会记住你最喜欢的数")
# 2.再编写一个程序(在同一文件夹下),从文件中读取这个值
# import json # 这个文件也要导入json模块存储数据
with open('num.txt') as f: # 打开num.txt文本文件
number = json.load(f) # 把文件内容赋值给变量
print("我知道你最喜欢的数是:" + str(number) + ".") # 打印出来
"""练习10-12 记住喜欢的数
将练习10-11中的两个程序合而为一。
1.如果存储了用户喜欢的数,就向用户显示它;
2.否则提示用户输入他喜欢的数并将其存储到文件中。
3.运行这个程序两次,看看它是否像预期的那样工作"""
# 将练习10-11中的两个程序合而为一
import json # 导入json模块存储数据
# 1 如果存储了用户喜欢的数,就向用户显示它
try: # 如果用户出错(文件存在)
with open('num.txt') as f: # 打开num.txt文本文件
number = json.load(f) # 把文件内容赋值给变量
# 2 否则提示用户输入他喜欢的数并将其存储到文件中
except FileNotFoundError: # 用户出错(文件不存在)
number = input("你最喜欢的数是: ") # 提示用户
with open('num.txt', 'w') as f: # 写入方式打开文件(会自动新建一个)起个别名f
json.dump(number, f) # 调用json模块里dump函数存储到文件
print("我会记住你最喜欢的数")
else:
print("我知道你最喜欢的数是:" + str(number)) # 打印出来
# 3 把文本文件删除运行
"""练习10-13 验证用户
最后一个remember_me.py版本假设用户要么已输入其用户名,要么是首次运行该程序。
1.我们应修改这个程序,以应对这样的情形:当前和最后一次运行该程序的用户并非同一个人。
2.为此,在greet_user()中打印欢迎用户回来的消息前,询问他用户名是否是对的。
3.如果不对,就调用get_new_username()让用户输入正确的用户名。"""
import json # josn是一种文本格式
# 1 看名字是否重复,
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
# 2 询问他用户名是否是对的
def greet_user():
"""基于用户名问候用户。"""
username = get_stored_username() # 读取文本内容
if username: # 如果名字是最后一次的用户一样
correct = input("你是:" + username + "? (y/n) ") # 提示用户输入
if correct == 'y': # 如果回答是最后一次的用户
print("欢迎回来 " + username + "!") # 打印提示语
return # 返回
username = get_new_username() # 获得了用户名,但不对,就重新输入名字
print("当你回来的时候,我们会记住你的 " + username + "!") # 打印
# 3 如果没有重新输入
def get_new_username():
"""提示用户输入用户名。"""
username = input("你叫什么名字: ") # 提示用户输入
filename = 'username.json' # 把文本文件赋值给变量
with open(filename, 'w') as f_obj: # 以写入的方式打开文件
json.dump(username, f_obj) # 把名字写入文本
return username # 返回名字
greet_user() # 调用询问函数