python --人工智能专家系统---学生学习情况

简介: 人工智能专家系统---学生学习情况

一、前言

  • 此实验还不太完整,就是简单地用于交作业。
  • 后期有时间会修改具体逻辑。
  • 如果有什么错误,请评论指出。
  • 原理:创建知识库模块用于知识获取,建立知识库把各条知识用链表链接起来形成“知识规则链表”,建立数据库模块用于把提供的已知事实以及推理中推出的新事实放入数据库中,分别形成“已知事实链表” 和“结论事实链表”,推理机用于实现推理,推理中凡是被选中参加推理的规则形成“已使用规则链表”,解释机构用于回答用户的问题,并根据“已使用规则链表”进行解释。

二、代码

"""
1.信息库
2.数据库 (1) 兴趣 (2) 行为 (3) 成绩
"""

check_init = ['100-80分', '79-60分', '习惯差', '习惯好', '玩游戏', '看书籍', '看漫画', '玩手机', '打篮球', '测数独', '做实验', '敲代码', '在自学', '勤思考']

rule = [
    [['100-80分'], '学习情况优秀'],
    [['79-60分'], '学习情况良好'],

    [['学习情况优秀', '玩游戏', '看漫画', '玩手机', '打篮球'], '特等天赋型选手'],
    [['学习情况优秀', '玩游戏', '玩手机', '看漫画'], '上等天赋型选手'],
    [['学习情况优秀', '玩游戏', '玩手机', '打篮球'], '中等天赋运动型选手'],
    [['学习情况优秀', '玩游戏', '玩手机'], '中等天赋型选手'],
    [['学习情况优秀', '看书籍', '测数独', '做实验', '敲代码'], '特等努力型T选手'],
    [['学习情况优秀', '看书籍', '测数独', '做实验'], '上等努力型T选手'],
    [['学习情况优秀', '看书籍', '做实验', '打篮球'], '中等努力运动型T选手'],
    [['学习情况优秀', '看书籍', ], '中等努力型T选手'],

    [['学习情况良好', '看书籍', '测数独', '做实验', '敲代码'], '特等努力型选手'],
    [['学习情况良好', '看书籍', '测数独', '做实验'], '认真努力型选手'],
    [['学习情况良好', '看书籍', '做实验', '打篮球'], '适度努力运动型选手'],
    [['学习情况良好', '看书籍', ], '正常努力型选手'],
    [['学习情况良好', '玩游戏', '看漫画', '玩手机', '打篮球'], '摆烂型选手'],
    [['学习情况良好', '玩游戏', '玩手机', '看漫画'], '贪玩型选手'],
    [['学习情况良好', '玩游戏', '玩手机', '打篮球'], '正常运动型选手'],
    [['学习情况良好', '玩游戏'], '正常型选手'],

    [['特等天赋型选手', '习惯好'], '中丙'],
    [['特等天赋型选手', '习惯差'], '下丙'],

    [['上等天赋型选手', '习惯好'], '特丙'],
    [['上等天赋型选手', '习惯差'], '上丙'],

    [['中等天赋型选手', '习惯好'], '中乙'],
    [['中等天赋型选手', '习惯差'], '下乙'],

    [['中等天赋运动型选手', '习惯好'], '特乙'],
    [['中等天赋运动型选手', '习惯差'], '上乙'],

    [['中等努力型T选手', '习惯好'], '中乙'],
    [['中等努力型T选手', '习惯差'], '下乙'],

    [['中等努力运动型T选手', '习惯好'], '特乙'],
    [['中等努力运动型T选手', '习惯差'], '上乙'],

    [['特等努力型T选手', '习惯好'], '特甲'],
    [['特等努力型T选手', '习惯差'], '上甲'],

    [['上等努力型T选手', '习惯好'], '中甲'],
    [['上等努力型T选手', '习惯差'], '下甲'],

    [['正常努力型选手', '习惯好'], '下乙'],
    [['正常努力型选手', '习惯差'], '特丙'],

    [['适度努力运动型选手', '习惯好'], '上乙'],
    [['适度努力运动型选手', '习惯差'], '中乙'],

    [['认真努力型选手', '习惯好'], '下甲'],
    [['认真努力型选手', '习惯差'], '特乙'],

    [['特等努力型选手', '习惯好'], '上甲'],
    [['特等努力型选手', '习惯差'], '中甲'],

    [['正常型选手', '习惯好'], '中乙'],
    [['正常型选手', '习惯差'], '下乙'],

    [['正常运动型选手', '习惯好'], '上乙'],
    [['正常运动型选手', '习惯差'], '中乙'],

    [['贪玩型选手', '习惯好'], '上丙'],
    [['贪玩型选手', '习惯差'], '中丙'],

    [['特等天赋型选手', '习惯好'], '下丙'],
    [['特等天赋型选手', '习惯差'], '特丁'],

]


def run():
    print("\n*********************学生学习情况诊断系统*****************************\n")
    string = ""
    for i in range(0, len(check_init)):
        string += (str(i + 1) + "、" + check_init[i] + "\t")
    print("请选择程序操作数:\t  1、进行推理        2、退出程序")
    while True:
        val = input("请输入操作数:\t")
        if val == "1":
            print("######知识库选项#######")
            print("@@@  \t" + string + "  \t@@@")
            val = input("请输入知识库前面的选项,并用空格隔开(1 2 3),注意: 1和2、3和4必须选一个(且只能同时选一个):")
            str_arr = val.split(" ")
            flag = True
            new_str_arr = []
            error_str = ""
            for i in range(0, len(str_arr)):
                try:
                    num = int(str_arr[i]) - 1
                except Exception as e:
                    error_str = "输入知识库选项的格式有误"
                    flag = False
                    break
                flag, error_str = arr_rule(num, new_str_arr)
                if num not in new_str_arr:
                    new_str_arr.append(num)
            if flag:
                flag, error_str = arr_rule2(new_str_arr)
            if flag:
                str_arr = new_str_arr
                check_state = []
                for i in str_arr:
                    check_state.append(check_init[i])
                result = reasoning(check_state)
                print("\n" + result)
            else:
                print("操作有误,请检查是否符合规则后重新输入  \t错误信息: " + error_str)
            print("\n\n")
        elif val == "2":
            print("**********系统退出************")
            break
        else:
            print("操作数有误,请重新输入")


def arr_rule(num, str_arr):
    if (num > len(check_init)) or (num < 0):
        return False, "输入的选项超出知识库的范围"
    if num == 0:
        if 1 in str_arr:
            return False, ("已选择第" + str(num + 2) + "个选项,不能选第" + str(num + 1) + "个了")
    if num == 1:
        if 0 in str_arr:
            return False, ("已选择第" + str(num + 1) + "个选项,不能选第" + str(num) + "个了")
    if num == 2:
        if 3 in str_arr:
            return False, ("已选择第" + str(num + 2) + "个选项,不能选第" + str(num + 1) + "个了")
    if num == 3:
        if 2 in str_arr:
            return False, ("已选择第" + str(num + 1) + "个选项,不能选第" + str(num) + "个了")
    return True, ""


def arr_rule2(str_arr):
    if 0 not in str_arr and 1 not in str_arr:
        print(str_arr)
        return False, "1和2必须选一个(且只能同时选一个)"
    if 2 not in str_arr and 3 not in str_arr:
        print(str_arr)
        return False, "3和4必须选一个(且只能同时选一个)"
    return True, ""


def reasoning(check_box):
    """1.推理机 2.解析机构"""
    data = check_box  # 存放用户选择的多选框
    result = None  # 存放推理结果
    # 用户输入结束,开始推理
    result_str = ""
    k = 1
    if check_box:
        # 输出前提条件
        result_str += "前提条件为:\t\t"
        for i in data:
            result_str += str(i + "\t")
        result_str += "\n\n"

        # 输出推理过程
        result_str += "推理过程如下:\n"
        Count = 0
        for i in range(len(rule)):
            flag = True
            # 判断用户输入的是否是同一个动物的特征
            for j in rule[i][0]:
                if j in data:
                    continue
                else:
                    flag = False
            # 若是同一个动物的特征,则判断特征是否完全
            if flag:
                word = ""
                for j in rule[i][0]:
                    word = word + j + "  "
                    data.remove(j)
                data.append(rule[i][1])
                Count += 1
                word = word[0:-1]  # 用于删除最后一个“且”
                word = word + "  \t\t属于 " + rule[i][1]
                result_str += "\n" + str(k) + "、" + word
                k += 1
                # 动物特征完全,输出结果
                if Count == 3:
                    result = rule[i][1]
                    result = "该学生学习情况为" + result
                    result_str += "\n\n" + result
                    break
        # 若特征不是同一个动物的
        if result is None:
            word = ""
            for i in data:
                word = word + i + "+"
            result_str += "\n\n" + word[0:-1] + "\n此条件在信息库中无匹配规则!"
    else:
        result_str += "请先进行选择!"
    return result_str


if __name__ == "__main__":
    run()

三、运行结果

在这里插入图片描述

相关文章
|
22天前
|
机器学习/深度学习 人工智能 算法
猫狗宠物识别系统Python+TensorFlow+人工智能+深度学习+卷积网络算法
宠物识别系统使用Python和TensorFlow搭建卷积神经网络,基于37种常见猫狗数据集训练高精度模型,并保存为h5格式。通过Django框架搭建Web平台,用户上传宠物图片即可识别其名称,提供便捷的宠物识别服务。
229 55
|
11天前
|
存储 缓存 监控
局域网屏幕监控系统中的Python数据结构与算法实现
局域网屏幕监控系统用于实时捕获和监控局域网内多台设备的屏幕内容。本文介绍了一种基于Python双端队列(Deque)实现的滑动窗口数据缓存机制,以处理连续的屏幕帧数据流。通过固定长度的窗口,高效增删数据,确保低延迟显示和存储。该算法适用于数据压缩、异常检测等场景,保证系统在高负载下稳定运行。 本文转载自:https://www.vipshare.com
103 66
|
21天前
|
Python 容器
Python学习的自我理解和想法(9)
这是我在B站跟随千锋教育学习Python的第9天,主要学习了赋值、浅拷贝和深拷贝的概念及其底层逻辑。由于开学时间紧张,内容较为简略,但希望能帮助理解这些重要概念。赋值是创建引用,浅拷贝创建新容器但元素仍引用原对象,深拷贝则创建完全独立的新对象。希望对大家有所帮助,欢迎讨论。
|
1天前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
眼疾识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了4种常见的眼疾图像数据集(白内障、糖尿病性视网膜病变、青光眼和正常眼睛) 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Django框架搭建了一个Web网页平台可视化操作界面,实现用户上传一张眼疾图片识别其名称。
14 4
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
|
3天前
|
数据可视化 数据挖掘 大数据
1.1 学习Python操作Excel的必要性
学习Python操作Excel在当今数据驱动的商业环境中至关重要。Python能处理大规模数据集,突破Excel行数限制;提供丰富的库实现复杂数据分析和自动化任务,显著提高效率。掌握这项技能不仅能提升个人能力,还能为企业带来价值,减少人为错误,提高决策效率。推荐从基础语法、Excel操作库开始学习,逐步进阶到数据可视化和自动化报表系统。通过实际项目巩固知识,关注新技术,为职业发展奠定坚实基础。
|
12天前
|
Python
Python学习的自我理解和想法(10)
这是我在千锋教育B站课程学习Python的第10天笔记,主要学习了函数的相关知识。内容包括函数的定义、组成、命名、参数分类(必须参数、关键字参数、默认参数、不定长参数)及调用注意事项。由于开学时间有限,记录较为简略,望谅解。通过学习,我理解了函数可以封装常用功能,简化代码并便于维护。若有不当之处,欢迎指正。
|
1天前
|
Python
[oeasy]python057_如何删除print函数_dunder_builtins_系统内建模块
本文介绍了如何删除Python中的`print`函数,并探讨了系统内建模块`__builtins__`的作用。主要内容包括: 1. **回忆上次内容**:上次提到使用下划线避免命名冲突。 2. **双下划线变量**:解释了双下划线(如`__name__`、`__doc__`、`__builtins__`)是系统定义的标识符,具有特殊含义。
14 3
|
4天前
|
安全 前端开发 数据库
Python 语言结合 Flask 框架来实现一个基础的代购商品管理、用户下单等功能的简易系统
这是一个使用 Python 和 Flask 框架实现的简易代购系统示例,涵盖商品管理、用户注册登录、订单创建及查看等功能。通过 SQLAlchemy 进行数据库操作,支持添加商品、展示详情、库存管理等。用户可注册登录并下单,系统会检查库存并记录订单。此代码仅为参考,实际应用需进一步完善,如增强安全性、集成支付接口、优化界面等。
|
13天前
|
存储 算法 Python
文件管理系统中基于 Python 语言的二叉树查找算法探秘
在数字化时代,文件管理系统至关重要。本文探讨了二叉树查找算法在文件管理中的应用,并通过Python代码展示了其实现过程。二叉树是一种非线性数据结构,每个节点最多有两个子节点。通过文件名的字典序构建和查找二叉树,能高效地管理和检索文件。相较于顺序查找,二叉树查找每次比较可排除一半子树,极大提升了查找效率,尤其适用于海量文件管理。Python代码示例包括定义节点类、插入和查找函数,展示了如何快速定位目标文件。二叉树查找算法为文件管理系统的优化提供了有效途径。
45 5
|
23天前
|
Python
Python学习的自我理解和想法(7)
学的是b站的课程(千锋教育),跟老师写程序,不是自创的代码! 今天是学Python的第七天,学的内容是集合。开学了,时间不多,写得不多,见谅。