【数据与知识工程】实验一:小型专家系统设计与实现(pycharm+pyqt5+pyuic+designer.exe)

一、实验目的

(1)增加学生对数据与知识工程课程的兴趣;
(2)使学生进一步理解并掌握知识表示方法;
(3)使学生加强对专家系统的理解和掌握,并培养学生综合运
用所学知识开发智能系统的初步能力。

二、实验要求

(1)用产生式规则作为知识表示,构建一个小型专家系统
(如分类、诊断、预测等类型),具体应用领域由学生自选,具
体系统名称由学生自定。
(2)编写程序语言及实验环境不限。
(3)程序运行时,应能在屏幕上显示程序运行结果。

三、专家系统例子(动物分类识别系统)

推理逻辑

(1)若某动物有奶,则它是哺乳动物。
(2)若某动物有毛发,则它是哺乳动物。
(3)若某动物有羽毛,则它是鸟。
(4)若某动物会飞且生蛋,则它是鸟。
(5)若某动物是哺乳动物且有爪且有犬齿且目盯前方,则它是
食肉动物。
(6)若某动物是哺乳动物且吃肉,则它是食肉动物。
(7)若某动物是哺乳动物且有蹄,则它是有蹄动物。
(8)若某动物是有蹄动物且反刍食物,则它是偶蹄动物。
(9)若某动物是食肉动物且黄褐色且有黑色条纹,则它是老虎。
(10)若某动物是食肉动物且黄褐色且有黑色斑点,则它是猎豹。
(11)若某动物是有蹄动物且长腿且长脖子且黄褐色且有暗斑点,
则它是长颈鹿。
(12)若某动物是有蹄动物且白色且有黑色条纹,则它是斑马。
(13)若某动物是鸟且不会飞且长腿且长脖子且黑白色,则它是
驼鸟。
(14)若某动物是鸟且不会飞且会游泳且黑白色,则它是企鹅。
(15)若某动物是鸟且善飞且不怕风浪,则它是海燕。

实现

1)交互界面

(1)GUI界面在这里插入图片描述
(2)未选择选项直接按“确定”按钮时,提示“请先进行选择!”
在这里插入图片描述
(3)选择专家系统中不存在的推理逻辑时,显示“无法判断该动物!”
在这里插入图片描述
(4)选择专家系统中存在的推理逻辑时,显示推理结果
在这里插入图片描述

2)工具安装

pyqt5+pyuic+designer.exe
参考: https://www.cnblogs.com/future-dream/p/12127817.html

3)代码

(1)professor.py

dict_init = {'1': '有奶', '2': '有毛发', '3': '有羽毛', '4': '会飞', '5': '生蛋', '6': '有爪', '7': '有犬齿',
             '8': '目盯前方', '9': '吃肉', '10': '有蹄', '11': '反刍食物', '12': '黄褐色', '13': '有黑色条纹', '14': '有黑色斑点',
             '15': '长腿', '16': '长脖子', '17': '有暗斑点', '18': '白色', '19': '不会飞', '20': '黑白色', '21': '会游泳',
             '22': '善飞', '23': '不怕风浪', '24': '哺乳动物', '25': '鸟', '26': '食肉动物', '27': '有蹄动物', '28': '偶蹄动物',
             '29': '老虎', '30': '猎豹', '31': '长颈鹿', '32': '斑马', '33': '鸵鸟', '34': '企鹅', '35': '海燕'}

rule = [
    [['有奶'],'哺乳动物'],
    [['有毛发'],'哺乳动物'],
    [['有羽毛'],'鸟'],
    [['会飞','生蛋'],'鸟'],
    [['哺乳动物','有爪','有犬齿','目盯前方'],'食肉动物'],
    [['哺乳动物','吃肉'],'食肉动物'],
    [['哺乳动物','有蹄'],'有蹄动物'],
    [['有蹄动物','反刍食物'],'偶蹄动物'],
    [['食肉动物','黄褐色','有黑色条纹'],'老虎'],
    [['食肉动物','黄褐色','有黑色斑点'],'猎豹'],
    [['有蹄动物','长腿','长脖子','黄褐色','有暗斑点'],'长颈鹿'],
    [['有蹄动物','白色','有黑色条纹'],'斑马'],
    [['鸟','不会飞','长腿','长脖子','黑白色'],'鸵鸟'],
    [['鸟','不会飞','会游泳','黑白色'],'企鹅'],
    [['鸟','善飞','不怕风浪'],'海燕'],
]

def reasoning(checkboxState):

    data = checkboxState  # 存放用户选择的多选框
    result = None  # 存放推理结果

    # 用户输入结束,开始推理
    if checkboxState != []:
        # 输出前提条件
        print("\n前提条件为:")
        for i in data:
            print(i,end="  ")
        print("\n")

        # 输出推理过程
        print("推理过程如下:")
        for i in range(len(rule)):
            flag = True
            # 判断用户输入的是否是同一个动物的特征
            for j in rule[i][0]:
                # print("j", j)
                if j in data:
                    continue
                else:
                    flag = False
            # 若是同一个动物的特征,则判断特征是否完全
            if flag:
                word = ""
                for j in rule[i][0]:
                    # print("j", j)
                    word = word + j + "且"
                    data.remove(j)
                word = word[0:-1]                      # 用于删除最后一个“且”
                word = word + ",则它是" + rule[i][1]
                # 动物特征完全,输出结果
                if len(data) == 0:
                    result = rule[i][1]
                    print(word)
                    print(f"\n该动物为{result}")
                    result = "该动物为" + result
                    break
                # 动物特征不完全,无法判断该动物
                print("无法判断该动物!\n\n")
        # 若特征不是同一个动物的
        if result is None:
            word = ""
            for i in data:
                word = word + i + "且"
            print(word[0:-1])
            print("\n无法判断该动物!\n\n")
            result = "无法判断该动物!"
    else:
        result = "请先进行选择!"

    return result

(2)GUI.py

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'GUI.ui'
#
# Created by: PyQt5 UI code generator 5.15.2
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets
import professor


class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(692, 421)

        self.gridLayoutWidget = QtWidgets.QWidget(Form)
        self.gridLayoutWidget.setGeometry(QtCore.QRect(50, 50, 548, 194))
        self.gridLayoutWidget.setObjectName("gridLayoutWidget")
        self.gridLayout = QtWidgets.QGridLayout(self.gridLayoutWidget)
        self.gridLayout.setContentsMargins(0, 0, 0, 0)
        self.gridLayout.setObjectName("gridLayout")
        self.checkBox_1 = QtWidgets.QCheckBox(self.gridLayoutWidget)
        self.checkBox_1.setObjectName("checkBox")
        self.gridLayout.addWidget(self.checkBox_1, 0, 0, 1, 1)
        self.checkBox_2 = QtWidgets.QCheckBox(self.gridLayoutWidget)
        self.checkBox_2.setObjectName("checkBox_2")
        self.gridLayout.addWidget(self.checkBox_2, 0, 1, 1, 1)
        self.checkBox_3 = QtWidgets.QCheckBox(self.gridLayoutWidget)
        self.checkBox_3.setObjectName("checkBox_3")
        self.gridLayout.addWidget(self.checkBox_3, 0, 2, 1, 1)
        self.checkBox_4 = QtWidgets.QCheckBox(self.gridLayoutWidget)
        self.checkBox_4.setObjectName("checkBox_4")
        self.gridLayout.addWidget(self.checkBox_4, 0, 3, 1, 1)
        self.checkBox_5 = QtWidgets.QCheckBox(self.gridLayoutWidget)
        self.checkBox_5.setObjectName("checkBox_5")
        self.gridLayout.addWidget(self.checkBox_5, 1, 0, 1, 1)
        self.checkBox_6 = QtWidgets.QCheckBox(self.gridLayoutWidget)
        self.checkBox_6.setObjectName("checkBox_6")
        self.gridLayout.addWidget(self.checkBox_6, 1, 1, 1, 1)
        self.checkBox_7 = QtWidgets.QCheckBox(self.gridLayoutWidget)
        self.checkBox_7.setObjectName("checkBox_7")
        self.gridLayout.addWidget(self.checkBox_7, 1, 2, 1, 1)
        self.checkBox_8 = QtWidgets.QCheckBox(self.gridLayoutWidget)
        self.checkBox_8.setObjectName("checkBox_8")
        self.gridLayout.addWidget(self.checkBox_8, 1, 3, 1, 1)
        self.checkBox_9 = QtWidgets.QCheckBox(self.gridLayoutWidget)
        self.checkBox_9.setObjectName("checkBox_9")
        self.gridLayout.addWidget(self.checkBox_9, 2, 0, 1, 1)
        self.checkBox_10 = QtWidgets.QCheckBox(self.gridLayoutWidget)
        self.checkBox_10.setObjectName("checkBox_10")
        self.gridLayout.addWidget(self.checkBox_10, 2, 1, 1, 1)
        self.checkBox_11 = QtWidgets.QCheckBox(self.gridLayoutWidget)
        self.checkBox_11.setObjectName("checkBox_11")
        self.gridLayout.addWidget(self.checkBox_11, 2, 2, 1, 1)
        self.checkBox_12 = QtWidgets.QCheckBox(self.gridLayoutWidget)
        self.checkBox_12.setObjectName("checkBox_12")
        self.gridLayout.addWidget(self.checkBox_12, 2, 3, 1, 1)
        self.checkBox_13 = QtWidgets.QCheckBox(self.gridLayoutWidget)
        self.checkBox_13.setObjectName("checkBox_13")
        self.gridLayout.addWidget(self.checkBox_13, 3, 0, 1, 1)
        self.checkBox_14 = QtWidgets.QCheckBox(self.gridLayoutWidget)
        self.checkBox_14.setObjectName("checkBox_14")
        self.gridLayout.addWidget(self.checkBox_14, 3, 1, 1, 1)
        self.checkBox_15 = QtWidgets.QCheckBox(self.gridLayoutWidget)
        self.checkBox_15.setObjectName("checkBox_15")
        self.gridLayout.addWidget(self.checkBox_15, 3, 2, 1, 1)
        self.checkBox_16 = QtWidgets.QCheckBox(self.gridLayoutWidget)
        self.checkBox_16.setObjectName("checkBox_16")
        self.gridLayout.addWidget(self.checkBox_16, 3, 3, 1, 1)
        self.checkBox_17 = QtWidgets.QCheckBox(self.gridLayoutWidget)
        self.checkBox_17.setObjectName("checkBox_17")
        self.gridLayout.addWidget(self.checkBox_17, 5, 0, 1, 1)
        self.checkBox_18 = QtWidgets.QCheckBox(self.gridLayoutWidget)
        self.checkBox_18.setObjectName("checkBox_18")
        self.gridLayout.addWidget(self.checkBox_18, 5, 1, 1, 1)
        self.checkBox_19 = QtWidgets.QCheckBox(self.gridLayoutWidget)
        self.checkBox_19.setObjectName("checkBox_19")
        self.gridLayout.addWidget(self.checkBox_19, 5, 2, 1, 1)
        self.checkBox_20 = QtWidgets.QCheckBox(self.gridLayoutWidget)
        self.checkBox_20.setObjectName("checkBox_20")
        self.gridLayout.addWidget(self.checkBox_20, 5, 3, 1, 1)
        self.checkBox_21 = QtWidgets.QCheckBox(self.gridLayoutWidget)
        self.checkBox_21.setObjectName("checkBox_21")
        self.gridLayout.addWidget(self.checkBox_21, 6, 0, 1, 1)
        self.checkBox_22 = QtWidgets.QCheckBox(self.gridLayoutWidget)
        self.checkBox_22.setObjectName("checkBox_22")
        self.gridLayout.addWidget(self.checkBox_22, 6, 1, 1, 1)
        self.checkBox_23 = QtWidgets.QCheckBox(self.gridLayoutWidget)
        self.checkBox_23.setObjectName("checkBox_23")
        self.gridLayout.addWidget(self.checkBox_23, 6, 2, 1, 1)
        self.checkBox_24 = QtWidgets.QCheckBox(self.gridLayoutWidget)
        self.checkBox_24.setObjectName("checkBox_24")
        self.gridLayout.addWidget(self.checkBox_24, 6, 3, 1, 1)
        self.checkBox_25 = QtWidgets.QCheckBox(self.gridLayoutWidget)
        self.checkBox_25.setObjectName("checkBox_25")
        self.gridLayout.addWidget(self.checkBox_25, 7, 0, 1, 1)
        self.checkBox_26 = QtWidgets.QCheckBox(self.gridLayoutWidget)
        self.checkBox_26.setObjectName("checkBox_26")
        self.gridLayout.addWidget(self.checkBox_26, 7, 1, 1, 1)
        self.checkBox_27 = QtWidgets.QCheckBox(self.gridLayoutWidget)
        self.checkBox_27.setObjectName("checkBox_27")
        self.gridLayout.addWidget(self.checkBox_27, 7, 2, 1, 1)
        self.label = QtWidgets.QLabel(Form)
        self.label.setGeometry(QtCore.QRect(310, 30, 54, 12))
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(Form)
        self.label_2.setGeometry(QtCore.QRect(50, 250, 281, 16))
        self.label_2.setObjectName("label_2")
        self.pushButton = QtWidgets.QPushButton(Form)
        self.pushButton.setGeometry(QtCore.QRect(520, 280, 75, 23))
        self.pushButton.setObjectName("pushButton")
        self.pushButton_2 = QtWidgets.QPushButton(Form)
        self.pushButton_2.setGeometry(QtCore.QRect(520, 310, 75, 23))
        self.pushButton_2.setObjectName("pushButton_2")
        self.textBrowser = QtWidgets.QTextBrowser(Form)
        self.textBrowser.setGeometry(QtCore.QRect(50, 270, 461, 71))
        self.textBrowser.setObjectName("textBrowser")

        # 按键响应
        self.pushButton.clicked.connect(self.buttonclick)
        self.pushButton_2.clicked.connect(self.buttonclick_2)

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def checkboxState(self):
        checkboxState = []

        checkBoxStatus_1 = self.checkBox_1.isChecked()
        checkBoxStatus_2 = self.checkBox_2.isChecked()
        checkBoxStatus_3 = self.checkBox_3.isChecked()
        checkBoxStatus_4 = self.checkBox_4.isChecked()
        checkBoxStatus_5 = self.checkBox_5.isChecked()
        checkBoxStatus_6 = self.checkBox_6.isChecked()
        checkBoxStatus_7 = self.checkBox_7.isChecked()
        checkBoxStatus_8 = self.checkBox_8.isChecked()
        checkBoxStatus_9 = self.checkBox_9.isChecked()
        checkBoxStatus_10 = self.checkBox_10.isChecked()
        checkBoxStatus_11 = self.checkBox_11.isChecked()
        checkBoxStatus_12 = self.checkBox_12.isChecked()
        checkBoxStatus_13 = self.checkBox_13.isChecked()
        checkBoxStatus_14 = self.checkBox_14.isChecked()
        checkBoxStatus_15 = self.checkBox_15.isChecked()
        checkBoxStatus_16 = self.checkBox_16.isChecked()
        checkBoxStatus_17 = self.checkBox_17.isChecked()
        checkBoxStatus_18 = self.checkBox_18.isChecked()
        checkBoxStatus_19 = self.checkBox_19.isChecked()
        checkBoxStatus_20 = self.checkBox_20.isChecked()
        checkBoxStatus_21 = self.checkBox_21.isChecked()
        checkBoxStatus_22 = self.checkBox_22.isChecked()
        checkBoxStatus_23 = self.checkBox_23.isChecked()
        checkBoxStatus_24 = self.checkBox_24.isChecked()
        checkBoxStatus_25 = self.checkBox_25.isChecked()
        checkBoxStatus_26 = self.checkBox_26.isChecked()
        checkBoxStatus_27 = self.checkBox_27.isChecked()

        # for i in range(1, 28):
        #     name = "checkBox_" + str(1)
        #     checkboxState.append(self.name.isChecked())

        if checkBoxStatus_1 == True:
            checkboxState.append(self.checkBox_1.text())
        if checkBoxStatus_2 == True:
            checkboxState.append(self.checkBox_2.text())
        if checkBoxStatus_3 == True:
            checkboxState.append(self.checkBox_3.text())
        if checkBoxStatus_4 == True:
            checkboxState.append(self.checkBox_4.text())
        if checkBoxStatus_5 == True:
            checkboxState.append(self.checkBox_5.text())
        if checkBoxStatus_6 == True:
            checkboxState.append(self.checkBox_6.text())
        if checkBoxStatus_7 == True:
            checkboxState.append(self.checkBox_7.text())
        if checkBoxStatus_8 == True:
            checkboxState.append(self.checkBox_8.text())
        if checkBoxStatus_9 == True:
            checkboxState.append(self.checkBox_9.text())
        if checkBoxStatus_10 == True:
            checkboxState.append(self.checkBox_10.text())
        if checkBoxStatus_11 == True:
            checkboxState.append(self.checkBox_11.text())
        if checkBoxStatus_12 == True:
            checkboxState.append(self.checkBox_12.text())
        if checkBoxStatus_13 == True:
            checkboxState.append(self.checkBox_13.text())
        if checkBoxStatus_14 == True:
            checkboxState.append(self.checkBox_14.text())
        if checkBoxStatus_15 == True:
            checkboxState.append(self.checkBox_15.text())
        if checkBoxStatus_16 == True:
            checkboxState.append(self.checkBox_16.text())
        if checkBoxStatus_17 == True:
            checkboxState.append(self.checkBox_17.text())
        if checkBoxStatus_18 == True:
            checkboxState.append(self.checkBox_18.text())
        if checkBoxStatus_19 == True:
            checkboxState.append(self.checkBox_19.text())
        if checkBoxStatus_20 == True:
            checkboxState.append(self.checkBox_20.text())
        if checkBoxStatus_21 == True:
            checkboxState.append(self.checkBox_21.text())
        if checkBoxStatus_22 == True:
            checkboxState.append(self.checkBox_22.text())
        if checkBoxStatus_23 == True:
            checkboxState.append(self.checkBox_23.text())
        if checkBoxStatus_24 == True:
            checkboxState.append(self.checkBox_24.text())
        if checkBoxStatus_25 == True:
            checkboxState.append(self.checkBox_25.text())
        if checkBoxStatus_26 == True:
            checkboxState.append(self.checkBox_26.text())
        if checkBoxStatus_27 == True:
            checkboxState.append(self.checkBox_27.text())

        return checkboxState


    def buttonclick(self):
        checkboxState = self.checkboxState()
        text = professor.reasoning(checkboxState)
        self.textBrowser.setText(text)


    def buttonclick_2(self):
        sys.exit(app.exec_())


    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "动物分类识别系统"))
        self.checkBox_1.setText(_translate("Form", "有奶"))
        self.checkBox_2.setText(_translate("Form", "有毛发"))
        self.checkBox_3.setText(_translate("Form", "有羽毛"))
        self.checkBox_4.setText(_translate("Form", "会飞"))
        self.checkBox_5.setText(_translate("Form", "生蛋"))
        self.checkBox_6.setText(_translate("Form", "有爪"))
        self.checkBox_7.setText(_translate("Form", "有犬齿"))
        self.checkBox_8.setText(_translate("Form", "目盯前方"))
        self.checkBox_9.setText(_translate("Form", "吃肉"))
        self.checkBox_10.setText(_translate("Form", "有蹄"))
        self.checkBox_11.setText(_translate("Form", "反刍食物"))
        self.checkBox_12.setText(_translate("Form", "黄褐色"))
        self.checkBox_13.setText(_translate("Form", "有黑色条纹"))
        self.checkBox_14.setText(_translate("Form", "有黑色斑点"))
        self.checkBox_15.setText(_translate("Form", "长腿"))
        self.checkBox_16.setText(_translate("Form", "长脖子"))
        self.checkBox_17.setText(_translate("Form", "有暗斑点"))
        self.checkBox_18.setText(_translate("Form", "白色"))
        self.checkBox_19.setText(_translate("Form", "不会飞"))
        self.checkBox_20.setText(_translate("Form", "黑白色"))
        self.checkBox_21.setText(_translate("Form", "会游泳"))
        self.checkBox_22.setText(_translate("Form", "善飞"))
        self.checkBox_23.setText(_translate("Form", "不怕风浪"))
        self.checkBox_24.setText(_translate("Form", "哺乳动物"))
        self.checkBox_25.setText(_translate("Form", "鸟"))
        self.checkBox_26.setText(_translate("Form", "食肉动物"))
        self.checkBox_27.setText(_translate("Form", "有蹄动物"))
        self.label.setText(_translate("Form", "选项"))
        self.label_2.setText(_translate("Form", "按“确定开始推理”"))
        self.pushButton.setText(_translate("Form", "确定"))
        self.pushButton_2.setText(_translate("Form", "退出系统"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Form = QtWidgets.QWidget()
    ui = Ui_Form()
    ui.setupUi(Form)
    Form.show()
    sys.exit(app.exec_())

四、问题思考

思考:你所实现的基于产生式的专家系统所采用的推理算法是正向推理还是反向推理?你编写专家系统所采用的语言有何优点与不足?
答:
(1)本实验用正向推理策略来完成,实现推理机的程序与知识库的具体内容无关,对知识库的修改不需要改动推理机。
(2)优点:简单易学、面向对象、有丰富的第三方库;
不足:速度慢、对格式要求严格。

五、实验不足

1、无法进行反向推理
2、无法进行三段式推理
3、未封装交互界面

  • 4
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
好的,以下是实现步骤: 1. 首先需要安装 PyQT5,可以使用 pip 命令进行安装: ``` pip install PyQt5 ``` 2. 在 PyCharm 中创建一个新的 PyQT5 项目,然后在项目中创建一个 UI 窗口,可以使用 Qt Designer 工具进行创建。在 Qt Designer 中添加一个文本框用于输入运算表达式,添加四个按钮用于进行加减乘除运算。 3. 将 Qt Designer 中创建的 UI 文件转换为 Python 代码文件,可以使用 pyuic 工具进行转换。在 PyCharm 中打开终端,使用以下命令进行转换: ``` pyuic5 -o ui_mainwindow.py mainwindow.ui ``` 4. 在 PyCharm 中创建一个 Python 文件,将转换后的 UI 代码导入进来,然后编写运算逻辑。可以使用 eval() 函数进行表达式求值,但是需要注意安全性问题,建议使用 ast.literal_eval() 函数进行表达式求值。 5. 将运算逻辑与 UI 界面进行连接,即将按钮的点击事件与运算逻辑进行关联。可以使用 PyQt5 的信号与槽机制进行连接。 6. 最后运行程序,测试功能是否正常。 以下是一个简单的实现示例: ```python from PyQt5.QtWidgets import QApplication, QMainWindow from PyQt5.uic import loadUi import ast class Calculator(QMainWindow): def __init__(self): super(Calculator, self).__init__() loadUi('mainwindow.ui', self) self.add_btn.clicked.connect(self.add) self.sub_btn.clicked.connect(self.sub) self.mul_btn.clicked.connect(self.mul) self.div_btn.clicked.connect(self.div) def add(self): expr = self.expr_input.text() try: result = str(ast.literal_eval(expr.replace(' ', '+'))) self.result_label.setText(result) except: self.result_label.setText('Error') def sub(self): expr = self.expr_input.text() try: result = str(ast.literal_eval(expr.replace(' ', '-'))) self.result_label.setText(result) except: self.result_label.setText('Error') def mul(self): expr = self.expr_input.text() try: result = str(ast.literal_eval(expr.replace(' ', '*'))) self.result_label.setText(result) except: self.result_label.setText('Error') def div(self): expr = self.expr_input.text() try: result = str(ast.literal_eval(expr.replace(' ', '/'))) self.result_label.setText(result) except ZeroDivisionError: self.result_label.setText('Infinity') except: self.result_label.setText('Error') if __name__ == '__main__': app = QApplication([]) window = Calculator() window.show() app.exec_() ``` 其中,mainwindow.ui 是使用 Qt Designer 工具创建的 UI 界面文件,可以根据需要进行修改。需要注意的是,以上代码只是一个简单的示例,没有对用户输入进行安全性检查,实际应用中需要进行更多的安全性处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值