慢性HBV治疗判断程序

把参数输入到excel内第二排

运行结果

把AST改为200后运行

# -*- coding: utf-8 -*-
"""
Created on Sun Aug 21 08:51:16 2016
参数太多,改为excel表单填写参数,防止各种异常
@author: daxiong
"""

import math,xlrd

excelFilename="HBV检测参数.xlsx"
sheetName="Sheet1"
#打开excel数据
excelFile=xlrd.open_workbook(excelFilename)

sheet=excelFile.sheet_by_name(sheetName)
#翻译后放入的列表
translation_list=[]
#获取第一行的值
row1_values=sheet.row_values(0)
row2_values=sheet.row_values(1)
list_row1_row2=list(zip(row1_values,row2_values))

#APRI缩写:AST to Platelet Ratio Index
#AST单位iu/l
#PRI单位10**9/L
#如果APRI>2,可能有肝硬化
def APRI(AST,upper_AST,PRI):
    apri=((AST*1.0/upper_AST)*100)/PRI
    return apri

#FIB-4缩写Fibrosis-4
#age单位:年
#AST和ALT单位:U/L,(U/L和iu/L一般可以通用,前者是中国单位,后者是国际单位)
def FIB4(age,AST,ALT,PRI):
    fib4=(age*AST)/(PRI*math.sqrt(ALT))
    return fib4

#肝情况推测
def Liver_damage(apri,fib4):
    if apri>2:
        print ("可能发生肝硬化")
        print("如果是慢性乙肝感染者,需要考虑抗病毒药物治疗")
        return True
    if fib4<1.45:
        print("无明显肝纤维化或2级以下肝纤维化(轻度纤维化)")
        return False
    if fib4>3.25:
        print("肝纤维化程度为3~4级或以上")
        print("如果是慢性乙肝感染者,需要考虑抗病毒药物治疗")
        return True

#是否慢性乙肝
#positive_HBsAg_time 表示hbv表明抗原持续时间
def CHB(positive_HBsAg_persistTime):
    if positive_HBsAg_persistTime>6:
        return True
    else:
        return False

#是否该用抗病毒药治疗
def Recommand_treat(chb,apri,HBV_DNA,year,persist_abnormal_ALT):
    if chb==True and apri>2:
        return True
    if chb==True and apri<=2 and year>30 and HBV_DNA>20000 and persist_abnormal_ALT==True:
        return True

#持续观察
def Recommand_surveillance_noTreat(chb,apri,HBV_DNA,year,persist_abnormal_ALT,discontinuous_abnormal_ALT,positive_HBeAg):

    if chb==True and apri<=2 and persist_abnormal_ALT==True and HBV_DNA<2000:
        return True
    if chb==True and year<=30 and apri<=2 and HBV_DNA>20000 and persist_abnormal_ALT==False:
        return True

    if chb==True and positive_HBeAg==False and apri<=2 and year<=30 and 2000<HBV_DNA<20000 and discontinuous_abnormal_ALT==True:
        return True

def Recommand_drug(year):

    if year >=12:
        drug=["Tenoforvir(泰诺福韦)","entecavir(恩替卡韦)"]
    if 2<=year <=11:
        drug="entecavir(恩替卡韦)"

    return drug    

#提示
def Print_warming():
    print("因算法不断改进,计算结果仅供参考。请随访感染科或肝病科专业医生")
    print("单一测试可能受到酒精,情绪,气温等多种因素影响,请结合弹力成像,B超等结果综合判断")

#各生化指标单位
def Print_unit():
    print("生化指标来自肝功检测和血常规检测")
    print("AST单位:iu/l")
    print("ALT单位:U/L")
    print("PRI单位:10**9/L")
    print("年龄单位:年")
    print("U/L和iu/L一般可以通用,前者是中国单位,后者是国际单位")
    print("HBV_DNA单位:IU/mL")

#最后汇总
def Print_summary(recommand_treat,recommand_surveillance_noTreat):
    if recommand_treat==True:
        print("推荐抗病毒药治疗")
        print("推荐药物:",drug)
        print("药物推荐来自《世界卫生组织2015乙肝指南》")
        print("服用核苷酸药物前,应检查肾功能")
    if recommand_surveillance_noTreat==True:
        print("推荐继续观察,暂时不需用药")

#输出logo
def Print_logo():
    print("问题反馈邮箱:[email protected]")
    print("                  .-.     ")
    print("                   \ \    ")
    print("                    \ \   ")
    print("   喵  喵 喵          | |  ")
    print("                     | |  ")
    print("   /\---/\   _,---._ | |  ")
    print("  /^   ^  \,‘       `. ;  ")
    print(" ( O   O   )           ;  ")
    print("  `.=o=__,‘            \  ")
    print("    /         _,--.__   \  ")
    print("   /  _ )   ,‘   `-. `-. \ ")
    print("  / ,‘ /  ,‘        \ \ \ \  ")
    print(" / /  / ,‘          (,_)(,_) ")
    print("(,;  (,,)                    ")
    var=input("按任意键退出")  

#提示
Print_warming()
#输出生化值单位
print("-"*30)
Print_unit()
print("-"*30)
print("")
print("") 

#从excel内获取参数,避免异常输入
AST=list_row1_row2[0][1]
upper_AST=list_row1_row2[1][1]
ALT=list_row1_row2[2][1]
PRI=list_row1_row2[3][1]
year=list_row1_row2[4][1]
positive_HBsAg_persistTime=list_row1_row2[5][1]
HBV_DNA=list_row1_row2[6][1]
persist_abnormal_ALT=list_row1_row2[7][1]
discontinuous_abnormal_ALT=list_row1_row2[8][1]
positive_HBeAg=list_row1_row2[9][1]

#是否慢性乙肝
chb=CHB(positive_HBsAg_persistTime)
apri=APRI(AST,upper_AST,PRI)

recommand_treat=Recommand_treat(chb,apri,HBV_DNA,year,persist_abnormal_ALT)
recommand_surveillance_noTreat=Recommand_surveillance_noTreat(chb,apri,HBV_DNA,year,persist_abnormal_ALT,discontinuous_abnormal_ALT,positive_HBeAg)
drug=Recommand_drug(year)

#最后汇总
Print_summary(recommand_treat,recommand_surveillance_noTreat)

print("-"*30)
print("")
print("")
Print_logo()
时间: 2024-10-24 21:22:04

慢性HBV治疗判断程序的相关文章

判断程序是否运行在管理员权限下

1.提出两个概念(成立条件是系统是Vista后续版本,这是因为引入了UAC) 一个是运行程序的账号是管理员账号 另一个是当前运行环境是管理员环境 2.判断程序是否运行在管理员权限,直接使用函数IsUserAnAdmin就可以判断 #include <ShlObj.h> #include <tchar.h> int _tmain() { BOOL bIsAdmin = IsUserAnAdmin(); if(bIsAdmin) _tprintf_s(_T("Run As a

判断程序是否在VMWare内运行

现在有许多用户都喜欢用虚拟机来测试他们的软件,以避免对真实机器环境造成损害.但是在虚拟机中,有些功能是受限,甚至不可能完成的,因此,需要在程序中判断虚拟机的环境,如果程序在虚拟机内运行,则就要把虚拟机下不能使用的功能屏蔽掉. 判断程序是否在VMWare虚拟机内,可以用以下代码来完成: function IsRunInVMWare(out ErrMsg: string): Boolean;beginResult := False;try    asm      push     edx     

判断程序是否是第一次启动?

如何判断程序是否为第一次启动,并实现第一次启动时实现用户导航的页面.在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions里实现如下代码 //判断程序是否是第一次启动    if (![[NSUserDefaults standardUserDefaults] boolForKey:@"everLaunched"])    

C#.NET Form设置/取消开机自动运行,判断程序是否已经设置成开机自动启动(转载)

#region//开机自动运行        private void CB_Auto_CheckedChanged(object sender, EventArgs e)        {//CB_Auto是一个Checkbox,IsAutoRun 是个布尔变量,用于控制是否开机运行            if (CB_Auto.Checked == true) IsAutoRun = true;            else IsAutoRun = false;            tr

Android 判断程序在手机中是否是活动状态或者正在运行状态

沈阳斌子在今天项目需求上碰到个这样的问题,在Service中需要判断当前的程序是否是活动状态,换句话说也就是说后台跑的服务中有业务需求检测当前程序是否是该服务的程序 这样好让点击推送通知时跳转到不同的页面进行不同的操作.下面就粘贴出我封装了一下的方法和大家共享. /** * * @Description : 这个包名的程序是否在运行 * @Method_Name : isRunningApp * @param context 上下文 * @param packageName 判断程序的包名 *

C# 中判断程序是否启动使用Mutex使用异常

[背景] 在最近的一个项目中,我负责客户端模块的工作.需求要求,在启动客户端时需要判断客户端是否已经启动(单例).于是我决定使用Mutex来实现此功能,代码如下: bool initiallyOwned = true; bool isCreated; Mutex m = new Mutex(initiallyOwned, "xxxxx", out isCreated); if (!(initiallyOwned && isCreated)) { Common.Messa

C#判断程序是否以管理员运行

  /// <summary>         /// 判断程序是否是以管理员身份运行.         /// </summary>         public static bool IsRunAsAdmin()         {             WindowsIdentity id = WindowsIdentity.GetCurrent();             WindowsPrincipal principal = new WindowsPrincipa

is_file 判断程序是否已经安装

根据install.lock文件是否存在,判断程序是否已经安装过,并跳转到不同位置. if(!is_file("install.lock"))//这个文件是当系统安装完成后会生成,特用来判断是否安装过 { header("Location:install.php"); exit; } 如果文件不存在,跳转到install.php进行安装,安装完后对install.php改名 rename("install.php","install.l

iOS 判断程序第一次启动

在appdelegate.m中找到 “application:didFinishLaunchingWithOptions:”方法, 添加以下代码: if (![[NSUserDefaults standardUserDefaults] boolForKey:@everLaunched]) { [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@everLaunched]; [[NSUserDefaults standardUser