01-生化指标单位换算

第二章 案例1:生化指标单位换算

通过一个小栗子,来熟悉一下python中的常用操作吧,包括分支结构、循环结构、函数定义调用以及匿名函数等。

其中的数值参考见:https://www.douban.com/note/690319695/

一、 案例 - 生化指标单位换算1.0

1. 案例描述

在临床中,生化指标等常用不同的单位表示,有时用mg/dl,有时用mmol/L,因此,常会涉及单位之间的转换。设计一个单位转换程序,其功能是实现不同生化指标之间的单位互相转换。

如:

(1) 血脂项目测定数值的表达单位按国家标准为mmol/L,国际上有些国家用mg/dl,其转换系数如下:

胆固醇 TC、HDL-C、LDL-C:1 mg/dl=0.0259 mmol/L;

甘油三酯 TG:1 mg/dl=0.0113 mmol/L

(2) 肌酐(Cr):1mg/dL=0.01131 umol/L

(3) 血糖:1mmol/L=18mg/dL

2. 案例分析

分析问题:分析问题的计算部分,即简单的乘除法实现

确定问题:将问题划分为输入、处理及输出部分,及之前讲过的IPO

设计算法:计算部分的核心

3. 实现

(1) 利用PyCharm新建project和python file

(2) 代码

# 三引号"""多行注释,加入关于整个程序的描述

"""
Author: hucy
Function:
生化指标的单位转换
Version: 1.0
Date: 2019/08/13
"""

# 1. 输入
MOL_cho_str_value = input('请输入胆固醇的含量值(mmol/L):'# 标准输入,即键盘输入
MOL_cho_value = eval(MOL_cho_str_value)  # 把字符型数字文本转换成数字
print(MOL_cho_value)  # 用于查看代码

# 转换系数,重要的常量一般不做改变,用大写的变量名表示
G_VS_MOL = 0.0259

# 2. 处理
G_value = MOL_cho_value / G_VS_MOL  # 计算

# 3. 输出
print('转换单位后的胆固醇的含量(mg/dl)是:', G_value)

二、 案例 - 生化指标单位换算2.0

1. 案例描述

设计一个转换程序,实现不同单位间的换算,为使程序简单,依然只考虑胆固醇。

2.0新增功能:根据输入判断单位类型,进行相应的换算。

2. 案例分析

3. 实现代码

"""
Author: hucy
Function:
生化指标的单位转换
AddFunction:
根据输入实现单位间的互换
  字符串切片操作 & 字符串格式化输出 & 选择结构学习
if elif else
Version: 2.0
Date: 2018/08/13
"""
#
转换系数,重要的常量一般不做改变,用大写的变量名表示
G_VS_MOL = 0.0259

# 带单位的胆固醇输入
cho_str_value = input('请输入带单位的胆固醇的含量(单位mmol/Lmg/dl):')
print(cho_str_value)

# 注意Python没有分号等分隔符,但要注意缩进
# Python中的占位符:pass
if cho_str_value[-6:] == 'mmol/L':
    # pass
   
g_value = eval(cho_str_value[:-6])/G_VS_MOL
    print('转换单位后的胆固醇的含量是{} mg/dl!'.format(g_value))
elif cho_str_value[-5:] == 'mg/dl':
    mol_value = eval(cho_str_value[:-5])*G_VS_MOL
    print('转换单位后的胆固醇的含量是{} mmol/L!'.format(mol_value))
else:
    print('该程序版本暂不支持该转换操作!')

三、案例 - 生化指标单位换算3.0

1. 案例描述

设计一个转换程序,实现不同单位间的换算,为使程序简单,依然只考虑胆固醇。

2.0新增功能:根据输入判断单位类型,进行相应的换算。

3.0新增功能:程序可以一直运行,直到用户选择退出

2. 案例分析

3. 实现代码

"""
Author: hucy
Version: 3.0
Function: 生化指标的单位转换
2.0新增功能:根据输入判断单位类型,进行相应的换算。
   字符串切片操作 & 字符串格式化输出 & 选择结构 if : elif : else:
3.0新增功能:程序可以一直运行,直到用户选择退出
   while循环
Date: 2018/08/13
"""

# 转换系数,重要的常量一般不做改变,用大写的变量名表示
G_VS_MOL = 0.0259

# 带单位的胆固醇输入
cho_str_value = input('请输入带单位的胆固醇的含量(单位mmol/L或mg/dl),退出程序请输入Q:')
print(cho_str_value)

# 避免死循环
i = 0  # 设置循环变量,查看循环次数,作调试用,用户无需知道
while cho_str_value != 'Q':  # 循环体内没有给用户提供再次输入的机会
   i = i + 1
   print('循环次数:', i)

if cho_str_value[-6:] == 'mmol/L':
       g_value = eval(cho_str_value[:-6]) / G_VS_MOL
       print('转换单位后的胆固醇的含量是{} mg/dl!'.format(g_value))
   elif cho_str_value[-5:] == 'mg/dl':
       mol_value = eval(cho_str_value[:-5]) * G_VS_MOL
       print('转换单位后的胆固醇的含量是{} mmol/L!'.format(mol_value))
   else:
       print('该程序版本暂不支持该转换操作!')

print('****************************************************')  # 为了使结果输出更友好

# 带单位的货币输入
   cho_str_value = input('请输入带单位的胆固醇的含量(单位mmol/L或mg/dl),退出程序请输入Q:') #给用户提供再次输入的机会

print("程序已退出!")

四、案例 - 生化指标单位换算4.0

1. 案例描述

设计一个转换程序,实现不同单位间的换算,为使程序简单,依然只考虑胆固醇。

2.0新增功能:根据输入判断单位类型,进行相应的换算。

3.0新增功能:程序可以一直运行,直到用户选择退出

4.0新增功能:将计算部分封装到函数中

2. 案例分析

3. 实现代码

"""
Author: hucy
Version: 3.0
Function: 生化指标的单位转换
   2.0新增功能:根据输入判断单位类型,进行相应的换算。
       字符串切片操作 & 字符串格式化输出 & 选择结构 if : elif : else:
   3.0新增功能:程序可以一直运行,直到用户选择退出
       while循环
   4.0新增功能:计算部分封装到函数中
Date: 2018/08/13
"""

# 建议定义的函数前后有两个空行,建议整体代码块和函数的注释都用3个引号(""")
# 定义函数:一般预先定义好函数
# 输入:1) 胆固醇含量;2) 转换系数

def convert_unit(val, coef):
   """
   Function:单位转换
   :param im:
   :param er:
   """
   out = val * coef  # 形式参数
   return out

# main()函数:程序执行入口
def main():
   # 转换系数,重要的常量一般不做改变,用大写的变量名表示
   G_VS_MOL = 0.0259

# 带单位的胆固醇含量输入
   cho_str_value = input('请输入带单位的胆固醇的含量(单位mmol/L或mg/dl):')

if cho_str_value[-6:] == 'mmol/L':
       exchange_coef = 1 / G_VS_MOL
       in_val = eval(cho_str_value[:-6])
   elif cho_str_value[-5:] == 'mg/dl':
       exchange_coef = 1 * G_VS_MOL
       in_val = eval(cho_str_value[:-5])
   else:
       exchange_coef = -1

if exchange_coef != -1:
       # 调用函数
       out_result = convert_unit(in_val, exchange_coef)  # 实际参数
       print('转换单位后的胆固醇含量是:', out_result)
   else:
       print('不支持该单位类型的转换!')

# 调用main()函数,固定写法
if __name__ == '__main__': # 该判断语句是永远为TRUE的
   main()

五、案例 - 生化指标单位换算5.0

1. 案例描述

设计一个转换程序,实现不同单位间的换算,为使程序简单,依然只考虑胆固醇。

2.0新增功能:根据输入判断单位类型,进行相应的换算。

3.0新增功能:程序可以一直运行,直到用户选择退出

4.0新增功能:将计算部分封装到函数中

5.0新增功能:将简单的函数改造成lambda函数

2. 案例分析

3. 实现代码

"""
Author: hucy
Version: 5.0
Function: 生化指标的单位转换
   2.0新增功能:根据输入判断单位类型,进行相应的换算。
       字符串切片操作 & 字符串格式化输出 & 选择结构 if : elif : else:
   3.0新增功能:程序可以一直运行,直到用户选择退出
       while循环
   4.0新增功能:计算部分封装到函数中,使程序模块化,便于阅读和复用
   5.0新增功能:(1)使程序更加结构化;(2) 简单函数的定义 lambda 在一行内表示表达函数
Date: 2018/08/13
"""

def main():
   # 转换系数,重要的常量一般不做改变,用大写的变量名表示
   G_VS_MOL = 0.0259

# 带单位的胆固醇含量输入
   cho_str_value = input('请输入带单位的胆固醇的含量(单位mmol/L或mg/dl):')

if cho_str_value[-6:] == 'mmol/L':
       exchange_coef = 1 / G_VS_MOL
       in_val = eval(cho_str_value[:-6])
   elif cho_str_value[-5:] == 'mg/dl':
       exchange_coef = 1 * G_VS_MOL
       in_val = eval(cho_str_value[:-5])
   else:
       exchange_coef = -1

if exchange_coef != -1:

# 使用lambda定义函数
       convert_unit = lambda x: x*exchange_coef  # x形式参数
       # 调用lambda函数
       out_result = convert_unit(in_val) # in_val实际参数
       print('转换单位后的胆固醇含量是:', out_result)

else:
       print('不支持该单位类型的转换!')

# 调用main()函数,固定写法
if __name__ == '__main__': # 该判断语句是永远为TRUE的
        main()

六、思考

能否保存多种生化指标的转换系数,而不是单一指标?

"""
Author: hucy
Version: 思考
Function: 多个生化指标的单位转换
   功能基本实现了,但是代码巨难看
Date: 2018/08/13
"""

def convert_unit_cho():
   # 转换系数,重要的常量一般不做改变,用大写的变量名表示
   G_VS_MOL = 0.0259

# 带单位的胆固醇含量输入
   cho_str_value = input('请输入带单位的胆固醇含量(单位mmol/L或mg/dl):')

if cho_str_value[-6:] == 'mmol/L':
       exchange_coef = 1 / G_VS_MOL
       in_val = eval(cho_str_value[:-6])
   elif cho_str_value[-5:] == 'mg/dl':
       exchange_coef = 1 * G_VS_MOL
       in_val = eval(cho_str_value[:-5])
   else:
       exchange_coef = -1

if exchange_coef != -1:

# 使用lambda定义函数
       convert_unit = lambda x: x * exchange_coef  # x形式参数
       # 调用lambda函数
       out_result = convert_unit(in_val)  # in_val实际参数

else:
       print('不支持该单位类型的转换!')

return out_result

def convert_unit_tg():
   # 转换系数,重要的常量一般不做改变,用大写的变量名表示
   G_VS_MOL = 0.0113

# 带单位的胆固醇含量输入
   tg_str_value = input('请输入带单位的甘油三酯含量(单位mmol/L或mg/dl):')

if tg_str_value[-6:] == 'mmol/L':
       exchange_coef = 1 / G_VS_MOL
       in_val = eval(tg_str_value[:-6])
   elif tg_str_value[-5:] == 'mg/dl':
       exchange_coef = 1 * G_VS_MOL
       in_val = eval(tg_str_value[:-5])
   else:
       exchange_coef = -1

if exchange_coef != -1:

# 使用lambda定义函数
       convert_unit = lambda x: x * exchange_coef  # x形式参数
       # 调用lambda函数
       out_result = convert_unit(in_val)  # in_val实际参数

else:
       print('不支持该单位类型的转换!')

return out_result

def convert_unit_glu():
   # 转换系数,重要的常量一般不做改变,用大写的变量名表示
   G_VS_MOL = 1/18

# 带单位的胆固醇含量输入
   glu_str_value = input('请输入带单位的血糖含量(单位mmol/L或mg/dl):')

if glu_str_value[-6:] == 'mmol/L':
       exchange_coef = 1 / G_VS_MOL
       in_val = eval(glu_str_value[:-6])
   elif glu_str_value[-5:] == 'mg/dl':
       exchange_coef = 1 * G_VS_MOL
       in_val = eval(glu_str_value[:-5])
   else:
       exchange_coef = -1

if exchange_coef != -1:

# 使用lambda定义函数
       convert_unit = lambda x: x * exchange_coef  # x形式参数
       # 调用lambda函数
       out_result = convert_unit(in_val)  # in_val实际参数

else:
       print('不支持该单位类型的转换!')

return out_result

def convert_unit_cre():
   # 转换系数,重要的常量一般不做改变,用大写的变量名表示
   G_VS_MOL = 0.01131

# 带单位的胆固醇含量输入
   cre_str_value = input('请输入带单位的肌酐含量(单位umol/L或mg/dl):')

if cre_str_value[-6:] == 'umol/L':
       exchange_coef = 1 / G_VS_MOL
       in_val = eval(cre_str_value[:-6])
   elif cre_str_value[-5:] == 'mg/dl':
       exchange_coef = 1 * G_VS_MOL
       in_val = eval(cre_str_value[:-5])
   else:
       exchange_coef = -1

if exchange_coef != -1:

# 使用lambda定义函数
       convert_unit = lambda x: x * exchange_coef  # x形式参数
       # 调用lambda函数
       out_result = convert_unit(in_val)  # in_val实际参数

else:
       print('不支持该单位类型的转换!')

return out_result

def main():
   input_str_idx = input('请输入您想进行单位转换的生化指标(如:cho、tg、glu、cre):')
   if input_str_idx == 'cho':
       out_val = convert_unit_cho()
       print('胆固醇进行单位转换后的值为', out_val)
   elif input_str_idx == 'tg':
       out_val = convert_unit_tg()
       print('甘油三酯进行单位转换后的值为', out_val)
   elif input_str_idx == 'glu':
       out_val = convert_unit_glu()
       print('血糖进行单位转换后的值为', out_val)
   elif input_str_idx == 'cre':
       out_val = convert_unit_cre()
       print('肌酐进行单位转换后的值为', out_val)
   else:
       print('暂不支持该指标的单位转换!')

if __name__ == '__main__':
   main()

七、总结

(0)

相关推荐