"""
第一题
1、写出异常处理语句中try作用是什么,except,else,finally下面的代码分别在什么时候会执行?(简答题)
第二题
2、改善上节课的注册程序,打开文件的读取数据的时候,如果文件不存在会报错,请通过try-except来捕获这个错误,然后进行处理
第三题
3、优化之前作业的石头剪刀布游戏,用户输入时,如果输入非数字会引发异常,请通过异常捕获来处理这个问题。
"""
"""
# 第一题
1、try的作用:
try可以用来检测代码是否出现异常(把有可能出现异常的代码放在try里面)
2、except下面的代码什么时候执行:
try中的代码出现异常,被except成功的捕获之后执行,会执行except中的代码
3、else下面的代码什么时候执行:
try中的代码没有出现异常,执行else中的代码
4、finally下面的代码什么时候执行
不管try中的代码是否发生异常,finally中的代码都会执行
"""
import random
# 第二题
def work2():
try:
# 读取文件中注册用户的数据
with open("users.txt", "r", encoding="utf8") as f:
# 读取文件内容
data = f.read()
# 识别字符串中的列表
users = eval(data)
# 错误的类型不用记忆,将报错的类型FileNotFoundError复制上去
except FileNotFoundError:
# 文件不存在将users设置为一个空列表
users = []
# 注册功能代码(上次作业写的,不需要改动))
while True:
# 注册功能
username = input("请输入用户名:") # 输入账号
for user in users: # 遍历所有账号,判断账号是否存在
if username == user["user"]:
print("该客户已经被注册过") # 账号已存在,请重新输入
break
else:
password1 = input("请输入密码:") # 输入密码
password2 = input("请再次确认密码:") # 再次输入密码
if password1 != password2:
print("两次输入密码不一致,请重新输入!") # 账号和密码不一致,请重新输入
continue
# 账号不存在,密码不重复,则添加到账户列表中
users.append({"user": username, "password": password2})
# user["username"] = username
# user["password"] = password1
print("注册成功!")
print(users)
break
# 程序结束后,将所有用户的数据写入到文件
with open("users.txt", "w", encoding="utf8") as f:
# 将列表转换为字符串
content = str(users)
# 写入文件
f.write(content)
work2()
# 第三题
while True:
# 用户输入数字
try:
user = int(input("用户输入要出的拳 :石头(1)/剪刀(2)/布(3)/退出(4)"))
# 检测用户输入不是数字类型的数据报错的情况
except ValueError:
print("您的出拳有误,请按规矩出拳")
# continue
# 没有报错的情况
else:
# 电脑随机生成数字
computer = random.randint(1,3)
print(computer)
if user > 0 and user < 4:
if user - computer == -1 or user - computer == 2:
print("用户胜!")
elif user - computer == -2 or user - computer ==1:
print("电脑胜!")
else:
print("平局!")
elif user == 4:
print("结束游戏!")
break
else:
# 用来检测不是1-4的数字范围
print("您的出拳有误,请按规矩出拳!")