You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

医院管理系统searchpatientrec函数if条件匹配失败问题排查

医院管理系统搜索患者记录匹配失败问题解决

问题现象

开发医院管理系统时,searchpatientrec函数接收患者编号后,控制台打印出的存储值rec[0]与输入值p_no显示一致,但if rec[0] == p_no条件始终不触发,最终输出"No Record Found",无法显示患者详情。

核心原因

1. 数据类型不匹配

在insertpatientrec函数中,患者编号p_no被转为整数类型存储:

p_no = int(input('Enter Patient number:'))

但调用searchpatientrec时,输入的编号直接通过input()获取,是字符串类型:

no = input("Enter patient no:")
searchpatientrec(no)

Python中整数1和字符串"1"用==比较结果为False,这是条件不触发的直接原因。

2. 搜索逻辑不完整

当前searchpatientrec仅读取文件中第一条记录,若第一条不匹配,不会继续读取后续记录,直接判定为无记录。

3. 次要错误

  • searchpatientrec输出时误写为"Doctor No",应为"Patient No"
  • searchworkerrec函数错误打开patient.dat,实际应打开worker.dat

修复方案

1. 统一数据类型

调用搜索函数时,将输入的编号转为整数:

elif choice == 7:
    no = int(input("Enter patient no:"))  # 转为int类型
    searchpatientrec(no)

医生和工人的搜索输入也需同步修改:

elif choice == 8:
    no = int(input("Enter doctor no:"))
    searchdoctorrec(no)
elif choice == 9:
    no = int(input("Enter worker no:"))
    searchworkerrec(no)

2. 修复遍历逻辑

修改searchpatientrec函数,循环读取所有记录直到文件结束:

def searchpatientrec(p_no):
    f = open("patient.dat", "rb")
    flag = False
    try:
        while True:  # 循环遍历所有记录
            rec = pickle.load(f)
            print(rec[0])
            print(p_no)
            if rec[0] == p_no:
                p_no = rec[0]
                p_name = rec[1]
                p_age = rec[2]
                p_problems = rec[3]
                print(f"Patient No:{p_no} Name:{p_name}, Age:{p_age}, Disease:{p_problems}")  # 修正标题错误
                flag = True
                break  # 找到匹配记录后退出循环,若需显示所有匹配可移除break
    except EOFError:
        pass
    
    if not flag:
        print("No Record Found")
    f.close()

3. 修复其他错误

修正searchworkerrec的文件路径:

def searchworkerrec(w_no):
    f = open("worker.dat", "rb")  # 改为正确的worker.dat
    flag = False
    try:
        while True:
            rec = pickle.load(f)
            if rec[0] == w_no:
                w_no = rec[0]
                w_name = rec[1]
                w_age = rec[2]
                w_workname = rec[3]
                print(f"Worker No:{w_no} Name:{w_name}, Age:{w_age}, Work Type:{w_workname}")
                flag = True
                break
    except EOFError:
        pass
    if not flag:
        print("No Record Found")
    f.close()

验证效果

修复后,输入患者编号1(整数类型),函数会遍历所有记录,匹配到对应整数编号的记录后,正常显示患者详情,不会再出现匹配失败的情况。

内容的提问来源于stack exchange,提问作者Aditya Chauhan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 16:25:21