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()

三、运行结果

在这里插入图片描述

相关文章
|
2月前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
眼疾识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了4种常见的眼疾图像数据集(白内障、糖尿病性视网膜病变、青光眼和正常眼睛) 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Django框架搭建了一个Web网页平台可视化操作界面,实现用户上传一张眼疾图片识别其名称。
215 5
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
|
24天前
|
存储 算法 API
【01】整体试验思路,如何在有UID的情况下获得用户手机号信息,python开发之理论研究试验,如何通过抖音视频下方的用户的UID获得抖音用户的手机号-本系列文章仅供学习研究-禁止用于任何商业用途-仅供学习交流-优雅草卓伊凡
【01】整体试验思路,如何在有UID的情况下获得用户手机号信息,python开发之理论研究试验,如何通过抖音视频下方的用户的UID获得抖音用户的手机号-本系列文章仅供学习研究-禁止用于任何商业用途-仅供学习交流-优雅草卓伊凡
148 82
|
8天前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【害虫识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
害虫识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了12种常见的害虫种类数据集【"蚂蚁(ants)", "蜜蜂(bees)", "甲虫(beetle)", "毛虫(catterpillar)", "蚯蚓(earthworms)", "蜚蠊(earwig)", "蚱蜢(grasshopper)", "飞蛾(moth)", "鼻涕虫(slug)", "蜗牛(snail)", "黄蜂(wasp)", "象鼻虫(weevil)"】 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Djan
48 1
基于Python深度学习的【害虫识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
|
1月前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【蘑菇识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
蘑菇识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了9种常见的蘑菇种类数据集【"香菇(Agaricus)", "毒鹅膏菌(Amanita)", "牛肝菌(Boletus)", "网状菌(Cortinarius)", "毒镰孢(Entoloma)", "湿孢菌(Hygrocybe)", "乳菇(Lactarius)", "红菇(Russula)", "松茸(Suillus)"】 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Django框架搭建了一个Web网页平台可视化操作界面,
97 11
基于Python深度学习的【蘑菇识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
|
17天前
|
存储 API 数据安全/隐私保护
【02】整体试验思路,在这之前我们发现sec_uid,sec_uid是什么和uid的关系又是什么?相互如何转换?python开发之理论研究试验,如何通过抖音视频下方的用户的UID获得抖音用户的手机号-本系列文章仅供学习研究-禁止用于任何商业用途-仅供学习交流-优雅草卓伊凡
【02】整体试验思路,在这之前我们发现sec_uid,sec_uid是什么和uid的关系又是什么?相互如何转换?python开发之理论研究试验,如何通过抖音视频下方的用户的UID获得抖音用户的手机号-本系列文章仅供学习研究-禁止用于任何商业用途-仅供学习交流-优雅草卓伊凡
61 6
|
17天前
|
C语言 Python
Python学习:内建属性、内建函数的教程
本文介绍了Python中的内建属性和内建函数。内建属性包括`__init__`、`__new__`、`__class__`等,通过`dir()`函数可以查看类的所有内建属性。内建函数如`range`、`map`、`filter`、`reduce`和`sorted`等,分别用于生成序列、映射操作、过滤操作、累积计算和排序。其中,`reduce`在Python 3中需从`functools`模块导入。示例代码展示了这些特性和函数的具体用法及注意事项。
|
25天前
|
Python
python pandas学习(一)
该代码段展示了四个主要操作:1) 删除指定列名,如商品id;2) 使用正则表达式模糊匹配并删除列,例如匹配订单商品名称1的列;3) 将毫秒级时间戳转换为带有时区调整的日期时间格式,并增加8小时以适应本地时区;4) 将列表转换为DataFrame后保存为Excel文件,文件路径和名称根据变量拼接而成。
26 3
|
2月前
|
机器学习/深度学习 人工智能 分布式计算
我的阿里云社区年度总结报告:Python、人工智能与大数据领域的探索之旅
我的阿里云社区年度总结报告:Python、人工智能与大数据领域的探索之旅
143 35
|
21天前
|
存储 算法 量子技术
解锁文档管理系统高效检索奥秘:Python 哈希表算法探究
在数字化时代,文档管理系统犹如知识宝库,支撑各行各业高效运转。哈希表作为核心数据结构,通过哈希函数将数据映射为固定长度的哈希值,实现快速查找与定位。本文聚焦哈希表在文档管理中的应用,以Python代码示例展示其高效检索特性,并探讨哈希冲突解决策略,助力构建智能化文档管理系统。
|
2月前
|
机器学习/深度学习 算法 前端开发
基于Python深度学习果蔬识别系统实现
本项目基于Python和TensorFlow,使用ResNet卷积神经网络模型,对12种常见果蔬(如土豆、苹果等)的图像数据集进行训练,构建了一个高精度的果蔬识别系统。系统通过Django框架搭建Web端可视化界面,用户可上传图片并自动识别果蔬种类。该项目旨在提高农业生产效率,广泛应用于食品安全、智能农业等领域。CNN凭借其强大的特征提取能力,在图像分类任务中表现出色,为实现高效的自动化果蔬识别提供了技术支持。
基于Python深度学习果蔬识别系统实现

热门文章

最新文章