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 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150
|
txt_rule = '''有毛发,是哺乳动物 有奶,是哺乳动物 有羽毛,是鸟 会飞,会下蛋,是鸟 吃肉,是肉食动物 有犬齿,有爪,眼盯前方,是食肉动物 是哺乳动物,有蹄,是蹄类动物 是哺乳动物,是咀嚼反刍动物,是蹄类动物 是哺乳动物,是食肉动物,是黄褐色,身上有暗斑点,金钱豹 是哺乳动物,是肉食动物,是黄褐色,身上有黑色条纹,虎 是蹄类动物,有长脖子,有长腿,身上有暗斑点,长颈鹿 是蹄类动物,身上有黑色条纹,斑马 是鸟,有长脖子,有长腿,不会飞,有黑白二色,鸵鸟 是鸟,会游泳,不会飞,有黑白二色,企鹅 是鸟,善飞,信天翁'''
character_dict = {'1': '有毛发', '2': '有奶', '3': '有羽毛', '4': '会飞', '5': '会下蛋', '6': '吃肉', '7': '有犬齿', '8': '有爪', '9': '眼盯前方', '10': '有蹄', '11': '是咀嚼反刍动物', '12': '是黄褐色', '13': '身上有暗斑点', '14': '身上有黑色条纹', '15': '有长脖子', '16': '有长腿', '17': '不会飞', '18': '会游泳', '19': '有黑白二色', '20': '善飞', '21': '是哺乳动物', '22': '是鸟', '23': '是食肉动物', '24': '是蹄类动物', }
result_dict = {'25': '信天翁', '26': '鸵鸟', '27': '斑马', '28': '长颈鹿', '29': '虎', '30': '金钱豹', '31': '企鹅'}
database = {**character_dict, **result_dict}
def get_data_list(): data_process_list = [] data_result_list = [] data_str = txt_rule.split('\n') for data in data_str: data = data.split(',') data_process_list.append(data[:-1]) data_result_list.append(data[-1].replace('\n', '')) return data_process_list, data_result_list
def character_dict_trans(): indexed_data = list(enumerate(character_dict.items())) rsp_str = '' for i in range(0, len(indexed_data), 5): line = '' for j in range(5): if i + j < len(indexed_data): line += str(indexed_data[i + j][1][0] + ':' + indexed_data[i + j][1][1]) + ' ' rsp_str += line + '\n' return rsp_str
def find_data(process_data_list, dict_output): for index, data_process in enumerate(data_process_list): num = 0 for data in process_data_list: if data in data_process: num += 1 if num == len(data_process): if data_result_list[index] not in result_dict.values(): result = data_result_list.pop(index) process = data_process_list.pop(index) if result not in process_data_list: dict_output[','.join(process)] = result end_result = find_data(process_data_list + [result], dict_output) if end_result == 1: return 1 else: return 0 else: end_result = find_data(process_data_list, dict_output) if end_result == 1: return 1 else: return 0 else: process = data_process_list.pop(index) dict_output[','.join(process)] = data_result_list[index] return 1
def quick_sort(arr): if len(arr) <= 1: return arr pivot = arr[len(arr) // 2] left = [x for x in arr if x < pivot] middle = [x for x in arr if x == pivot] right = [x for x in arr if x > pivot] return quick_sort(left) + middle + quick_sort(right) if __name__ == '__main__': data_process_list, data_result_list = get_data_list() print_str_start = '''输入对应条件前面的数字编号: ************************************************************* ''' print_str_end = '''************************************************************* *********************当输入数字0时!程序结束****************** ''' character_str = character_dict_trans() character_all_str = print_str_start + character_str + print_str_end print(character_all_str)
list_data = [] while 1: input_num = input("请输入数字编号:") if input_num == '0': break if input_num not in list_data: list_data.append(input_num) sorted_list_data = quick_sort([int(i) for i in list_data]) list_data_str = [character_dict[str(i)] for i in sorted_list_data] print('查询条件为:' + ' '.join(list_data_str) + '\n') dict_output = {} end_result = find_data(list_data_str, dict_output) if end_result == 1: print('查询成功,推理过程如下:') for data in dict_output.keys(): print(f"{data}->{dict_output[data]}") if dict_output[data] in result_dict.values(): print(f'所识别的动物为:{dict_output[data]}') else: print('条件不足,无匹配规则,查询失败.')
|