Rh4751 2023-11-05 00:52 采纳率: 70%
浏览 11
已结题

请大家帮我看下这段代码有什么问题

def CKD2009_EPI(race, age, gender, sCr):
    # 2009年CKD-EPI scr公式,公式以不同性别肌酐设置节点,以截点、性别、种族采用不同斜率
    
    if race in ['black', '黑种人']:
        if gender in ['male', '男']:
            if sCr <= 79.56:
                # 文献报道公式中肌酐为0.9mg/dl,本程序按照1mg/dl=88.4umol/L,将0.9mg/dl换算为79.56umol/L。
                return {'value_a': 163.419, 'value_b': 0.9, 'value_c': -0.411}
            else:
                return {'value_a': 163.419, 'value_b': 0.9, 'value_c': -1.209}
        else:
            if sCr <= 61.88:
                # 文献报道公式中肌酐为0.7mg/dl,本程序按照1mg/dl=88.4umol/L,将0.7mg/dl换算为61.88umol/L
                return {'value_a': 166.36, 'value_b': 0.7, 'value_c': -0.329}
            else:
                return {'value_a': 166.36, 'value_b': 0.7, 'value_c': -1.209}
    else:
        if gender in ['male', '男']:
            if sCr <= 79.56:
                return {'value_a': 141, 'value_b': 0.9, 'value_c': -0.411}
            else:
                return {'value_a': 141, 'value_b': 0.9, 'value_c': -1.209}
        else:
            if sCr <= 61.88:
                return {'value_a': 143.538, 'value_b': 0.7, 'value_c': -0.329}
            else:
                return {'value_a': 143.538, 'value_b': 0.7, 'value_c': -1.209}

def main():
    race=input("输入人种(提示如为黑种人,输入'黑种人'):")
    gender=input("输入性别(male或男,female或女):")
    sCr=float(input('输入sCr值:'))
    age=int(input('输入年龄:'))
        
    result=CKD2009_EPI(race,gender,sCr,age)
          
    
    print(result)
                         
       
 main()

这段代码,如果人种输入 黄种人,male,年龄35岁,sCr 为630,最后打印出来的是{'value_a': 143.538, 'value_b': 0.7, 'value_c': -0.329},与实际想得到的{'value_a': 141, 'value_b': 0.9, 'value_c': -1.209}不同,不知道是什么原因

  • 写回答

3条回答 默认 最新

  • 木头人123。 2023-11-05 09:56
    关注

    你的代码中的逻辑是正确的,但是在处理"黄种人"的输入时,你没有提供专门的处理逻辑,所以它被默认处理为非"黑种人"。在这种情况下,性别判断为“男”,sCr判断为小于或等于61.88,所以返回的是{'value_a': 143.538, 'value_b': 0.7, 'value_c': -0.329}。

    然而,你的实际输入,sCr为630,应该在"男"性别下的else分支,也就是sCr大于79.56的情况,返回{'value_a': 141, 'value_b': 0.9, 'value_c': -1.209}。

    检查你的代码,应该在调用CKD2009_EPI函数时,性别和sCr参数位置可能放反了,应该是CKD2009_EPI(race, age, gender, sCr),但在你的main函数中,可能写成了CKD2009_EPI(race, gender, sCr, age)。它们的顺序应该是一致的。所以你的这个问题应该是传参的顺序问题。将main函数中的函数调用修改为CKD2009_EPI(race, age, gender, sCr),这样应该就可以得到正确的结果了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    1人已打赏
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 11月13日
  • 已采纳回答 11月5日
  • 修改了问题 11月5日
  • 创建了问题 11月5日

悬赏问题

  • ¥20 Keil uVision5创建project没反应
  • ¥15 mmseqs内存报错
  • ¥15 vika文档如何与obsidian同步
  • ¥15 华为手机相册里面的照片能够替换成自己想要的照片吗?
  • ¥15 陆空双模式无人机飞控设置
  • ¥15 sentaurus lithography
  • ¥100 求抖音ck号 或者提ck教程
  • ¥15 关于#linux#的问题:子进程1等待子进程A、B退出后退出(语言-c语言)
  • ¥20 web页面如何打开Outlook 365的全球离线通讯簿功能
  • ¥15 io.jsonwebtoken.security.Keys