m0_62608366 2021-10-14 19:34 采纳率: 100%
浏览 46
已结题

产生式系统python运行问题

2020 boogie_liu

symbol={1:'毛',2:'橡皮',3:'金属',4:'塑料',5:'墨水',6:'有笔尖',7:'需要笔芯',
8:'笔尖金属',9:'笔尖为毛',
10:'可以写字',11:'擦字',12:'去除非铅笔痕迹',
13:'毛笔',14:'钢笔',15:'铅笔',16:'水笔',17:'修改液',18:'橡皮擦'}

rule={
13:[9,10],
14:[8,3,5],
16:[8,7],
17:[4,12],
18:[2,11]
}

class PRO_SYS:

def __init__(self):
    tkey=[]
    self.dict_c = rule
    self.symbol=symbol
    self.tkey=tkey

#输入
def input_sys(self):
    x=input("请输入您选择的特征,如:1,2,3(以逗号隔开):")
    str=x.split(',')
    in_list=[]
    #将字符转换为int数组型
    for i in str:
        in_list.append(int(i))
    self.in_list=in_list
    return in_list

#将部分字段转换为已知特征
def translate(self):
    rule=self.dict_c
    put=self.in_list
    #判断能否转换为已知信息

    for key,value in rule.items():
        list_len = 0
        for i in value:
            if i in put:
                list_len += 1
        if list_len== len(value):
            put.append(key)
            for i in value:
                put.remove(i)
    self.in_list=put


#正向推理
def z_inference(self,c=0.2):#c为允许误差范围
    put = self.in_list
    print(put)
    if len(put)==1:
        put_value=put[0]
        print("推理结果是"+self.symbol[put_value])
        return False
    try_dict={}
    #查找相似度最大的特征
    for key,value in rule.items():
        try_dict.setdefault(key,0)
        temp=0
        for i in put:
            if i not in symbol.keys():
                print("输入不合法,请重新输入")
                return True
            elif i in value:
                temp+=1
        try_dict[key]=temp/len(value)
    n=max(val for _,val in try_dict.items())
    tkey=[]
    #找出相似度最高的几个文具
    for key,val in try_dict.items():
        if val>=n-c:
            tkey.append(key)
    #找到相似度最高的几个

    print(tkey)
    self.tkey=tkey
    if len(tkey)==1:
        print("推理结果是"+self.symbol[tkey[0]])
        return False
    else:
        #进行逆向推理
        return True

#逆向推理
def r_inference(self):
    tkey=self.tkey

    for key in tkey:
        t_len=0
        for i in rule[key]:
            if i in self.in_list:
                t_len+=1
            if i not in self.in_list:
                print("是否具有:",symbol[i],"特征?",end=None)
                x=input("请输入YES/NO")
                if x=="NO":
                    break
                if x=="YES":
                    self.in_list.append(i)
                    t_len+=1
        if t_len== len(rule[key]):
            print("该特征逆向推理为:",symbol[key])
            break

if name == 'main':
print(symbol)
sta_pro_sys=PRO_SYS()
sta_pro_sys.input_sys()
sta_pro_sys.translate()
# #只进行正向推理
# sta_pro_sys.z_inference()
#正向推理不出就逆向推理
if sta_pro_sys.z_inference():
sta_pro_sys.r_inference()

2020 boogie_liu

symbol={1:'毛',2:'橡皮',3:'金属',4:'塑料',5:'墨水',6:'有笔尖',7:'需要笔芯',
8:'笔尖金属',9:'笔尖为毛',
10:'可以写字',11:'擦字',12:'去除非铅笔痕迹',
13:'毛笔',14:'钢笔',15:'铅笔',16:'水笔',17:'修改液',18:'橡皮擦'}

rule={
13:[9,10],
14:[8,3,5],
16:[8,7],
17:[4,12],
18:[2,11]
}

class PRO_SYS:

def __init__(self):
    tkey=[]
    self.dict_c = rule
    self.symbol=symbol
    self.tkey=tkey

#输入
def input_sys(self):
    x=input("请输入您选择的特征,如:1,2,3(以逗号隔开):")
    str=x.split(',')
    in_list=[]
    #将字符转换为int数组型
    for i in str:
        in_list.append(int(i))
    self.in_list=in_list
    return in_list

#将部分字段转换为已知特征
def translate(self):
    rule=self.dict_c
    put=self.in_list
    #判断能否转换为已知信息

    for key,value in rule.items():
        list_len = 0
        for i in value:
            if i in put:
                list_len += 1
        if list_len== len(value):
            put.append(key)
            for i in value:
                put.remove(i)
    self.in_list=put


#正向推理
def z_inference(self,c=0.2):#c为允许误差范围
    put = self.in_list
    print(put)
    if len(put)==1:
        put_value=put[0]
        print("推理结果是"+self.symbol[put_value])
        return False
    try_dict={}
    #查找相似度最大的特征
    for key,value in rule.items():
        try_dict.setdefault(key,0)
        temp=0
        for i in put:
            if i not in symbol.keys():
                print("输入不合法,请重新输入")
                return True
            elif i in value:
                temp+=1
        try_dict[key]=temp/len(value)
    n=max(val for _,val in try_dict.items())
    tkey=[]
    #找出相似度最高的几个文具
    for key,val in try_dict.items():
        if val>=n-c:
            tkey.append(key)
    #找到相似度最高的几个

    print(tkey)
    self.tkey=tkey
    if len(tkey)==1:
        print("推理结果是"+self.symbol[tkey[0]])
        return False
    else:
        #进行逆向推理
        return True

#逆向推理
def r_inference(self):
    tkey=self.tkey

    for key in tkey:
        t_len=0
        for i in rule[key]:
            if i in self.in_list:
                t_len+=1
            if i not in self.in_list:
                print("是否具有:",symbol[i],"特征?",end=None)
                x=input("请输入YES/NO")
                if x=="NO":
                    break
                if x=="YES":
                    self.in_list.append(i)
                    t_len+=1
        if t_len== len(rule[key]):
            print("该特征逆向推理为:",symbol[key])
            break

if name == 'main':
print(symbol)
sta_pro_sys=PRO_SYS()
sta_pro_sys.input_sys()
sta_pro_sys.translate()
# #只进行正向推理
# sta_pro_sys.z_inference()
#正向推理不出就逆向推理
if sta_pro_sys.z_inference():
sta_pro_sys.r_inference()

这个是因为什么回车的时候运行不出来

  • 写回答

1条回答 默认 最新

  • CSDN专家-HGJ 2021-10-14 20:23
    关注

    这句错误if name == 'main':,改成如下写法即可。

    if __name__ == '__main__':
    

    如对你有帮助,请采纳。点击我回答右上角【采纳】按钮。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月23日
  • 已采纳回答 10月15日
  • 创建了问题 10月14日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效