python-项目-每日答题系统-01-外部框架搭建

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

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鲸鱼编程pyhui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值