import random
import json
import time
import datetime
# 数据升级==>列表嵌套字典的格式
#列表用来装所有数据
# 字典用来装每次游戏的数据,包含游戏时间记录,字符,平均字符耗时
'''
{'date': date_,
'text': my_key,
'mean_time': times}
'''
# 封装几个5个函数
# 1.封装随机字符
# 封装随机字符游戏
def random_key():
node = "abcdefghijklmnopqrstuvwxyz"
com_key = random.sample(node,5)
com_key = "".join(com_key)
return com_key
# # 2.封装JSON数据的读
def read_data():
try:
# 因为第一次json文件没有创建的时候是读取不了的
with open("game_data.json","r") as f:
game_list = json.load(f)
except:
# 所以用except先创建一个json文件并写入一个空列表进去
game_list = []
with open("game_data.json","w") as f:
json.dump(game_list,f)
return game_list
# # 3.封装JSON数据的写入
def save_data(game_list):
with open("game_data.json","w") as f:
json.dump(game_list,f)
# 因为写入后要再返回json文件的最新数据,
return read_data() #所以这儿直接reruen上面读取文件结果
# # 4.封装列表对象中最快成绩
def fast_score(game_list):
score = []
for i in game_list:
score.append(i['mean_time'])
min_index = score.index(min(score))
print(f"最快记录是{game_list[min_index]['date']},成绩是{score[min_index]}秒")
# 5.封装开始玩游戏的函数
def run():
# 1 输入命令开始游戏
start = input("请输入s开始游戏,输入e表示退出")
if start == "s":
com_key = random_key()
# 开始时间
start_time = time.time()
my_key = input(com_key+"\n\n")
end_time = time.time()
execution_time = end_time - start_time
# 每次的单个字符的平均成绩
times = round(execution_time/5,2)
if com_key == my_key :
# 生成一个此刻的时间,格式是年月日时分秒
date_ = datetime.datetime.strftime(
datetime.datetime.now(),
'%Y-%m-%d %H:%M:%S'
)
# print(date_)
# 创建一个字典,存储当次玩游戏的数据
record = {
'date': date_,
'text': my_key,
'mean_time': times
}
print(f"本次是{record['date']},成绩为{record['mean_time']}\n\n")
# # 在json文件里读取所有的游戏记录
game_list = read_data()
# # 每次读取的数据后添加最新游戏记录
game_list.append(record)
# # 再把最新数据写进json文件里并返回最新数据
a = save_data(game_list)
# 求最快成绩
fast_score(a)
return True
else:
print("看清楚一点哟,输错啦")
return True
else:
print("退出游戏下次再见")
return False
# 6.通过while循环执行开始玩游戏
flag = True
while flag:
flag = run()