如何修复此代码中的语法错误?

问题描述 投票:0回答:0

从输入 import List, Dict, Optional

def readPatientsFromFile(文件名): 患者 = {} 尝试: 用 open(fileName, 'r') 作为 f: 对于 line_num,枚举中的行(f,start=1): # 从文件中解析患者数据 数据 = line.strip().split(',')

            # check if there are 8 fields
            if len(data) != 8:
                print(f"Invalid number of fields ({len(data)}) in line: {line_num}")
                continue
            
            try:
                patientID = int(data[0])
            except ValueError:
                print(f"Invalid data type in line: {line_num}")
                continue
            
            try:
                visitData = [data[i:i+7] for i in range(1, len(data), 7)]
                visits = [[visit[0], float(visit[1]), int(visit[2]), int(visit[3]), int(visit[4]), int(visit[5]), int(visit[6])] for visit in visitData]
            except (ValueError, IndexError):
                print(f"Invalid data type in line: {line_num}")
                continue
            
            # check if temperature is in range
            if not (35 <= visits[0][1] <= 42):
                print(f"Invalid temperature value ({visits[0][1]}) in line: {line_num}")
                continue
            
            # check if heart rate is in range
            if not (30 <= visits[0][2] <= 180):
                print(f"Invalid heart rate value ({visits[0][2]}) in line: {line_num}")
                continue
            
            # check if respiratory rate is in range
            if not (5 <= visits[0][3] <= 40):
                print(f"Invalid respiratory rate value ({visits[0][3]}) in line: {line_num}")
                continue
            
            # check if systolic blood pressure is in range
            if not (70 <= visits[0][4] <= 200):
                print(f"Invalid systolic blood pressure value ({visits[0][4]}) in line: {line_num}")
                continue
            
            # check if diastolic blood pressure is in range
            if not (40 <= visits[0][5] <= 120):
                print(f"Invalid diastolic blood pressure value ({visits[0][5]}) in line: {line_num}")
                continue
            
            # check if oxygen saturation is in range
            if not (70 <= visits[0][6] <= 100):
                print(f"Invalid oxygen saturation value ({visits[0][6]}) in line: {line_num}")
                continue
            
            # add patient data to dictionary
            if patientID in patients:
                patients[patientID].extend(visits)
            else:
                patients[patientID] = visits
except FileNotFoundError:
    print(f"The file '{fileName}' could not be found.")

except Exception as e:
    print("An unexpected error occurred while reading the file.")
    print(e)

return patients

def displayPatientData(患者,patientId=0): # 打印所有患者或指定患者 ID 的患者数据 如果不是实例(患者,字典): print("错误:患者应该是一本字典") 返回

if patientId != 0 and not isinstance(patientId, int):
    print("Error: patientId should be an integer")
    return

if patientId != 0 and patientId < 0:
    print("Error: patientId should be a positive integer")
    return

if patientId == 0:
    for pid in patients:
        print(f"Patient ID: {pid}")
        for visit in patients[pid]:
            print(f" {' '*2}Visit Date: {visit[0]}")
            print(f" {' '*3}Temperature: {'%.2f' % visit[1]} C")
            print(f" {' '*3}Heart Rate: {visit[2]} bpm")
            print(f" {''*3}Respiratory Rate: {visit[3]} bpm")
            print(f" {''*3}Systolic Blood Pressure: {visit[4]} mmHg")
            print(f" {''*3}Diastolic Blood Pressure: {visit[5]} mmHg")
            print(f" {''*3}Oxygen Saturation: {visit[6]} %")
else:
    if patientId not in patients:
        print(f"Patient with ID {patientId} not found.")
        return
    print(f"Patient ID: {patientId}")
    for visit in patients[patientId]:
        print(f" {' '*2}Visit Date: {visit[0]}")
        print(f" {' '*3}Temperature: {'%.2f' % visit[1]} C")
        print(f" {' '*3}Heart Rate: {visit[2]} bpm")
        print(f" {''*3}Respiratory Rate: {visit[3]} bpm")
        print(f" {''*3}Systolic Blood Pressure: {visit[4]} mmHg")
        print(f" {''*3}Diastolic Blood Pressure: {visit[5]} mmHg")
        print(f" {''*3}Oxygen Saturation: {visit[6]} %")

def displayStats(患者,patientId=0): """ 打印所有患者或指定患者的每个生命体征的平均值。

patients: A dictionary of patient IDs, where each patient has a list of visits.
patientId: The ID of the patient to display vital signs for. If 0, vital signs will be displayed for all patients.
"""
if not isinstance(patientId, int):
    print("Error: 'patientId' should be an integer.")
    return
if not isinstance(patients, dict):
    print("Error: 'patients' should be a dictionary.")
    return
if patientId == 0:
    print("Vital Signs for All Patients:")
    for patient in patients:
        print("Patient ID:", patient)
        patient_data = patients[patient]
        num_visits = len(patient_data)
        if num_visits == 0:
            print("  No data found.")
        else:
            total_temp, total_hr, total_rr, total_sbp, total_dbp, total_spo2 = 0, 0, 0, 0, 0, 0
            for visit in patient_data:
                total_temp += visit[1]
                total_hr += visit[2]
                total_rr += visit[3]
                total_sbp += visit[4]
                total_dbp += visit[5]
                total_spo2 += visit[6]
            avg_temp = total_temp / num_visits
            avg_hr = total_hr / num_visits
            avg_rr = total_rr / num_visits
            avg_sbp = total_sbp / num_visits
            avg_dbp = total_dbp / num_visits
            avg_spo2 = total_spo2 / num_visits
            print("  Average temperature:  ", "{:.2f}".format(avg_temp), "C")
            print("  Average heart rate:   ", "{:.2f}".format(avg_hr), "bpm")
            print("  Average respiratory rate:  ", "{:.2f}".format(avg_rr), "bpm")
            print("  Average systolic blood pressure:  ", "{:.2f}".format(avg_sbp), "mmHg")
            print("  Average diastolic blood pressure:  ", "{:.2f}".format(avg_dbp), "mmHg")
            print("  Average oxygen saturation:  ", "{:.2f}".format(avg_spo2), "%")
else:
    if patientId not in patients:
        print("No data found")
        return
    print("Vital Signs for Patient", patientId, ":")
    patient_data = patients[patientId]
    num_visits = len(patient_data)
    if num_visits == 0:
        print("  No data found.")
    else:
        total_temp, total_hr, total_rr, total_sbp, total_dbp, total_spo2 = 0, 0, 0, 0, 0, 0
        for visit in patient_data:
            total_temp += visit[1]
            total_hr += visit[2]
            total_rr += visit[3]
            total_sbp += visit[4]
            total_dbp += visit[5]
            total_spo2 += visit[6]
        avg_temp = total_temp / num_visits
        avg_hr = total_hr / num_visits
        avg_rr = total_rr / num_visits
        avg_sbp = total_sbp / num_visits
        avg_dbp = total_dbp / num_visits
        avg_spo2 = total_spo2 / num_visits
        # Print the averages for this patient
        print("  Average temperature:", "%.2f" % avg_temp, "C")
        print("  Average heart rate:", "%.2f" % avg_hr, "bpm")
        print("  Average respiratory rate:", "%.2f" % avg_rr, "bpm")
        print("  Average systolic blood pressure:", "%.2f" % avg_sbp, "mmHg")
        print("  Average diastolic blood pressure:", "%.2f" % avg_dbp, "mmHg")
        print("  Average oxygen saturation:", "%.2f" % avg_spo2, "%")

从日期时间导入日期时间

def addPatientData(患者、patient_id、日期、temp、hr、rr、sbp、dbp、spo2、file_path): """ 此函数将患者数据添加到患者字典中。 它还将数据写入 file_path 指定的文件。 """ 尝试: # 检查日期格式 datetime.strptime(日期,'%Y-%m-%d') # 检查温度范围 如果不是 (35.0 <= float(temp) <= 42.0): print("Invalid temperature. Please enter a temperature between 35.0 and 42.0 Celsius.") return # check heart rate range if not (30 <= int(hr) <= 180): print("Invalid heart rate. Please enter a heart rate between 30 and 180 bpm.") return # check respiratory rate range if not (5 <= int(rr) <= 40): print("Invalid respiratory rate. Please enter a respiratory rate between 5 and 40 bpm.") return # check systolic blood pressure range if not (70 <= int(sbp) <= 200): print("Invalid systolic blood pressure. Please enter a systolic blood pressure between 70 and 200 mmHg.") return # check diastolic blood pressure range if not (40 <= int(dbp) <= 120): print("Invalid diastolic blood pressure. Please enter a diastolic blood pressure between 40 and 120 mmHg.") return # check oxygen saturation range if not (70 <= int(spo2) <= 100): print("Invalid oxygen saturation. Please enter an oxygen saturation between 70 and 100%.") return # create a dictionary for the new visit data visit = {'date': date, 'temperature': temp, 'heart_rate': hr, 'respiratory_rate': rr, 'systolic_blood_pressure': sbp, 'diastolic_blood_pressure': dbp, 'oxygen_saturation': spo2} # add the visit data to the patient's list of visits if patient_id in patients: patients[patient_id]['visits'].append(visit) else: patients[patient_id] = {'id': patient_id, 'visits': [visit]} # write the updated patient data to the file with open(file_path, 'w') as f: for patient in patients.values(): f.write(f"{patient['id']}\n") for visit in patient['visits']: f.write(f"{visit['date']},{visit['temperature']},{visit['heart_rate']},{visit['respiratory_rate']}," f"{visit['systolic_blood_pressure']},{visit['diastolic_blood_pressure']},{visit['oxygen_saturation']}\n") print(f"Visit is saved successfully for Patient #{patient_id}") except ValueError: print("Invalid date format. Please enter date in the format ‘yyyy-mm-dd’.") except: print("An unexpected error occurred while adding new data.") """ This function displays all patient data or the data for a specific patient ID. """ if patient_id is None: # display all patient data for patient in patients.values(): print(f"Patient ID: {patient['id']}") for visit in patient['visits']: print(f" Visit Date: {visit['date']}") print(f" Temperature: {visit['temperature']:.2f} C") print(f" Heart Rate: {visit['heart_rate']} bpm") print(f" Respiratory Rate: {visit['respiratory_rate']} bpm") print(f" Systolic Blood Pressure: {visit['systolic_blood_pressure']} mmHg") print(f" Diastolic Blood Pressure: {visit['diastolic_blood_pressure']} mmHg") print(f" Oxygen Saturation: {visit['oxygen_saturation']}%") else: # display data for a specific patient ID if patient_id in patients: patient = patients[patient_id] print(f"Patient ID: {patient['id']}") for visit in patient['visits']: print(f" Visit Date: {visit['date']}") print(f" Temperature: {visit['temperature']:.2f} C") print(f" Heart Rate: {visit['heart_rate']} bpm") print(f" Respiratory Rate: {visit['respiratory_rate']} bpm") print(f" Systolic Blood Pressure: {visit['systolic_blood_pressure']} mmHg") print(f" Diastolic Blood Pressure: {visit['diastolic_blood_pressure']} mmHg") print(f" Oxygen Saturation: {visit['oxygen_saturation']}%") else: print("Patient ID not found."

从日期时间导入日期时间 def findVisitsByDate(患者,年=无,月=无): 访问量 = []

for patient_id, patient_data in patients.items():
    for visit in patient_data['visits']:
        # Check if the visit has complete date information
        if len(visit['date']) != 10:
            continue
            
        try:
            visit_date = datetime.strptime(visit['date'], '%Y-%m-%d')
        except ValueError:
            continue
        
        # Check if the year and/or month filter is provided and valid
        if year is not None and visit_date.year != year:
            continue
        if month is not None and visit_date.month != month:
            continue
            
        # Append the visit data to the list of visits
        visit_data = [
            visit['date'],
            visit['temperature'],
            visit['heart_rate'],
            visit['respiratory_rate'],
            visit['systolic_blood_pressure'],
            visit['diastolic_blood_pressure'],
            visit['oxygen_saturation']
        ]
        visits.append((patient_id, visit_data))

# Sort the visits by date
visits.sort(key=lambda x: x[1][0])

return visits

def findPatientsWhoNeedFollowUp(患者): # 根据生命体征异常寻找需要复诊的患者 followup_patients = set() 对于 patientID,访问 patients.items(): 访问访问: # 检查生命体征是否异常 如果 visit[1] > 38.0 或 visit[2] < 60 or visit[2] > 100 或 visit[3] < 12 or visit[3] > 20
或访问[4] < 90 or visit[4] > 140 或访问[5] < 60 or visit[5] > 90 或访问[6] < 95: followup_patients.add(patientID) break # only need to add patientID once if any visit is abnormal return list(followup_patients)

def deleteAllVisitsOfPatient(患者、患者 ID、文件名): #删除特定患者的所有就诊 如果 patientId 在 patients 中: 患者[患者ID] = [] 打开(文件名,'w')作为文件: 对于 patients.values() 中的患者: 探访病人: file.write(f"{visit['patientID']},{visit['date']},{visit['temperature']},{visit['heart_rate']},{visit['respiratory_rate']} ,{visit['systolic_blood_pressure']},{visit['diastolic_blood_pressure']},{visit['oxygen_saturation']} ") print(f"患者 {patientId} 的数据已被删除。") 别的: 打印(f“没有找到ID为{patientId}的患者的数据。”)

定义主要(): patients = readPatientsFromFile('patients.txt') 而真实的: 打印(” 欢迎来到健康信息系统 ") print("1.显示所有患者数据") print("2.按ID显示患者数据") print("3.添加患者数据") print("4. 显示患者统计信息") print("5. 按年、月或两者查找访问") print("6.查找需要随访的患者") print("7. 删除特定患者的所有访问") print("8.退出 “)

    choice = input("Enter your choice (1-8): ")
    if choice == '1':
        #diaplay the patient data
        displayPatientData(patients)
    elif choice == '2':
        #display patient data for a given patient ID
        patientID = int(input("Enter patient ID: "))
        displayPatientData(patients, patientID)
    elif choice == '3':
        patientID = int(input("Enter patient ID: "))
        date = input("Enter date (YYYY-MM-DD): ")
        try:
            temp = float(input("Enter temperature (Celsius): "))
            hr = int(input("Enter heart rate (bpm): "))
            rr = int(input("Enter respiratory rate (breaths per minute): "))
            sbp = int(input("Enter systolic blood pressure (mmHg): "))
            dbp = int(input("Enter diastolic blood pressure (mmHg): "))
            spo2 = int(input("Enter oxygen saturation (%): "))
            addPatientData(patients, patientID, date, temp, hr, rr, sbp, dbp, spo2, 'patients.txt')
        except ValueError:
            print("Invalid input. Please enter valid data.")
    elif choice == '4':
        patientID = input("Enter patient ID (or '0' for all patients): ")
        displayStats(patients, patientID)
    elif choice == '5':
        year = input("Enter year (YYYY) (or 0 for all years): ")
        month = input("Enter month (MM) (or 0 for all months): ")
        visits = findVisitsByDate(patients, int(year) if year != '0' else None,
                                  int(month) if month != '0' else None)
        if visits:
           for visit in visits:
                print("Patient ID:", visit[0])
                print(" Visit Date:", visit[1][0])
                print("  Temperature:", "%.2f" % visit[1][1], "C")
                print("  Heart Rate:", visit[1][2], "bpm")
                print("  Respiratory Rate:", visit[1][3], "bpm")
                print("  Systolic Blood Pressure:", visit[1][4], "mmHg")
                print("  Diastolic Blood Pressure:", visit[1][5], "mmHg")
                print("  Oxygen Saturation:", visit[1][6], "%")
        else:
            print("No visits found for the specified year/month.")
    elif choice == '6':
        followup_patients = findPatientsWhoNeedFollowUp(patients)
        if followup_patients:
            print("Patients who need follow-up visits:")
            for patientId in followup_patients:
                print(patientId)
        else:
            print("No patients found who need follow-up visits.")
    elif choice == '7':
        patientID = input("Enter patient ID: ")
        deleteAllVisitsOfPatient(patients, int(patientID), "patients.txt")
    elif choice == '8':
        print("Goodbye!")
        break
    else:
        print("Invalid choice. Please try again.\n")

if name == 'main': 主要()

我期待代码能正常运行,但我无法运行它,因为它说存在语法错误

python python-3.x syntax-error
© www.soinside.com 2019 - 2024. All rights reserved.