0624
目标
题目会放置在专门的目录中
写一个方法,可以让我们选择目录,先择文件
0621
点选学生的方法
1,吴,
新来一个变量,接收学生源的信息
点一个,删一个学生。直到删空了,重新再加载满
2,年,
点一个,删掉并放到列表的最未位
3,原始的方法
json每个学生新增一个键,num,按照num来点
num=0
随便点
被点以后num=1
num=0 num=1
4,来一个字
0-14
不停的更新这个变量
只操作一个计数器
把这个变量存文件中
生成新的学生数据
import json
f = open("a.txt", "r", encoding="utf8")
content = f.read()
# py_content = json.loads(content)
py_content = eval(content)
print(py_content)
f.close()
# [{"name":..., "uid":....}]
import random
print(py_content)
r = random.shuffle(py_content)
print(py_content)
li = []
for i in py_content:
name = i["name"]
uid = py_content.index(i)
stu_dict = {}
stu_dict["name"] = name
stu_dict["uid"] = uid+1
print(stu_dict)
li.append(stu_dict)
f = open("stu_base_data.db", "w", encoding="utf8")
f.write(json.dumps(li, ensure_ascii=False))
f.close()
明确为什么json.loads(字符串)会报错
当前已有功能
出题功能有了,不完善
考试,记分,保存数据功能有了,没有防错
缺点名,点选学生起来回答问题
需要有学生数据源
(1,张东),(2,吴世力)
给类添加了一些实例属性
stu_db_idx, 学生字典在json数据的列表中的索引位置
stu_all_data_list json文件的原始内容
列表中数据替换的方式
0620
目标
把学生的个人数据从数据库中查询出来,绑定起来
绑定以后,可以对该数据进行增删改查
li = ["apple","banana","lizi"]
# li.insert(0,999)
# print(li)
# 更新列表0号位的数据
m = "banana"
idx = li.index(m)
print('{}的索引值是{}'.format(m,idx))
li.remove(m)
print(li)
newdata = 999
li.insert(idx, "火龙果")
print(li)
0619
创建了一个json文件
用途是保存学生的数据
目标
每做完一题,就把题目数据
添加到
保存数据
数据保存到数据库中
理解
数据库就是一个容器 [] {}
当前的数据库,我们把它理解为一个列表
构建一个题目的信息
{
score:3,
wenda:{‘ask':问题,'ans':答案},
time:175964316546
}
明确sellf是谁的对象
列表删除数据
如果我有数据
那么可以
列表.remove(数据)
如果我有索引
可以通过
列表.pop(索引)
0617
对象调用方法时,是可以在方法中,给自身添加属性的
class Cat:
def __init__(self):
self.name = "汤姆"
def have_a_test(self):
print('汤姆在考试')
self.score = 80
def save_data(self):
print('我要保存数据了')
f = open('汤姆的成绩.txt', "w", encoding="utf8")
f.write(str(self.score))
f.close()
t = Cat()
print(t.__dict__)
t.have_a_test()
print(t.__dict__)
t.save_data()
os复习
__file__
可以获得启动文件所在的路径的
但是它不一定是绝对的路径
要获取绝对路径,可以通过
os.path.abspath(__file__)
路径的拼接
res = os.path.join(目录的路径,str字符串)
实现的效果
res ----> 目录路径/字符串
对象 = 类(实参)
类在实例化的时候,一定会触发init方法
开发过程中
要边写边测试
用哪条,测哪条
测的两种模式
1,print方式
2,debug方式
0612
daily_test方法是主功能
主要两个事
1,随机出一个学生,得到一个学生id
2,根据学生id进行测试的主逻辑
待解决
定义一个学生类,由学生类来创建学生对象
# 根据学生id,创建一个学生对象
# stu_obj = Student(student)
考虑这个类里要有哪些属性,要有哪些方法
Student类的设计
name
uid
exercises
save_data(当天成绩的结果列表)
开发或读别人代码的时候
关注点
1,函数的功能
2,接收什么参数。参数的数据类型。
3,有没有返回值。返回值的数据类型。
save_data方法,参数,当天考试的数据
[{},{}]
保存到对应的文件中
有一个学生对象后,我们可以拿到的信息,就是需要定义为实例属性的内容
姓名,name
uid,
日测成绩,exercises
0611
代码
https://cloud.189.cn/t/BFJZVvmmaamm
实现了个性化出题的架构
细节待添加
0610 用户选择
@staticmethod
def user_choice():
"""
用户的选择方法。接收用户选择,验证用户选择的合法性。返回一个有效的数据
:return choice_num: 用户的选项数据(数据已校正,一定可用的数据)
"""
choice_num = 1
# 选择干的事情
get_num = input("请输入需要的操作:")
# 拿到用户的数据 与 菜单的长度进行比较
try:
get_num_int = int(get_num)
except Exception as e:
get_num_int = 1
else:
if not (0 < get_num_int <= len(setting.func_menu)):
get_num_int = 1
choice_num = get_num_int
return choice_num
0608
静态方法
不需要接收参数
不需要self
也不需要cls
最外层架构设计
class DailyTestSystem:
"""每日日考类"""
def __init__(self):
pass
def start(self):
"""程序的运行"""
print('程序开始了')
# 输出一个菜单,提用户功能选项
self.show_menu()
# 用户输入选择,得到用户选择的结果
# choice_num = user_choice()
# 根据用户选择的结果,调用不同的功能
# run_method(choice_num)
@staticmethod
def show_menu():
print('打印菜单')
dt = DailyTestSystem()
dt.start()
下一步
设计菜单的打印
考虑到未来会新增功能
我们把菜单处理为配置
后面如果需要新增功能
改配置就可以了
思考
如何布局这个配置
我们的功能目前有三个
因此
该配置需要记录这三个功能的相关数据
由于是多个数据
考虑使用容器类的数据类型
有三种可选
列表, 元组,字典
需求中
1-每日答题
2-排行榜
3-罚抄
由于它是有序的
因此我们在三种容器中
排除掉无序容器
字典是无序的
所以我们考虑列表或元组
接下来
考虑成员
容器中的成员 要有哪些内容
经分析
要存的内容有
名称,以及对应的功能函数
即
每日答题的功能是有一个专门指定的函数或方法来处理的
结构可以定义为
('每日答题', 'daily_test‘)
一个成员的数据结构就此定下
多个成员用,列表包元组的形式来实现
[('每日答题', 'daily_test‘), ('每日答题', 'daily_test‘)]
代码
https://cloud.189.cn/t/ieeeEvUBJjeq