一、系统设计
首先,明确了多种常见疾病(如感冒、流感、肠胃炎、糖尿病、扁桃体发炎、鼻炎等)各自对应的典型症状集合,这些集合以列表形式存储。同时,还有一个包含症状及其描述的字典。
用户输入阶段:通过一个持续的循环,不断接收用户输入的表示症状的数字。这些数字被逐一添加到一个名为 list_real 的列表中,从而构建了用户所描述的症状集合。
疾病判断逻辑:
定义了一个 is_contained 函数,用于检查一个列表(比如某疾病的症状列表)是否完全包含在另一个列表(用户输入的症状列表)中。
在 judge_last 函数中,依次将各种疾病的症状列表与用户的 list_real 进行比较。如果某疾病的症状完全包含在用户输入的症状中,就输出相应的疾病提示,比如“可能是感冒”等。如果所有疾病的症状列表都不满足完全包含的条件,则输出“根据所给条件无法判断为何种疾病”。
整个算法的核心思想是基于已知疾病的典型症状模式,通过对比用户输入的具体症状组合,尝试找出最符合的疾病诊断。这种方法依赖于对常见疾病症状的先验定义和准确的用户输入,以实现对疾病的初步推断。它在一定程度上模拟了医疗诊断中根据症状进行疾病猜测的过程,但实际医疗诊断通常会更加复杂和综合考虑多种因素。
二、程序流程图
三、代码设计
def is_contained(list1, list2):
for sublist in list2:
if sublist not in list1:
return False
return True
# 常见疾病的典型症状
ganmao = ['1', '2', '3', '4', '5', '6', '7', '8', '9']
liugan = ['4', '5', '7', '10', '11', '12', '13']
changweiyan = ['14', '15', '16', '17', '18']
tangniaobing = ['19', '20', '21', '22']
biantaotifayan = ['6', '23', '24', '25', '26']
biyan = ['1', '2', '3', '27', '28', '7', '29']
def judge_last(list):
if is_contained(ganmao, list_real):
print('可能是感冒')
elif is_contained(liugan, list_real):
print('可能是流感')
elif is_contained(changweiyan, list_real):
print('可能是肠胃炎')
elif is_contained(tangniaobing, list_real):
print('可能是糖尿病')
elif is_contained(biantaotifayan, list_real):
print('可能是扁桃体发炎')
elif is_contained(biyan, list_real):
print('可能是鼻炎')
else:
print('根据所给条件无法判断为何种疾病')
dict_before = {'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': '头昏'}
print("""输入对应条件前面的数字:
****************请输入你的症状(数字)******************
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:头昏
***************一行输入一个症状回车输入下一个症状*********
*******************当输入数字0时!程序结束***************
""")
# 综合数据库
list_real = []
while (1):
# 循环输入前提条件所对应的字典中的键
num_real = input('请输入')
if (num_real == '0'):
break
list_real.append(num_real)
judge_last(list_real)
四、运行结果
五、代码扩展
个人感觉:可以连接数据库,建立一个库包含大部分疾病的典型症状,然后为所有疾病进行优先级的排序将常见疾病的优先级高,然后继续细化所有的症状,将疾病症状也划分优先级,由低到高提供更细致的症状从而使得判断正确率提高,由于太难,作者写不出来。