Python代码仅运行第一组elif语句 无法输出后续OBP判断结果如何解决
问题原因
OBP判断分支的第三个条件存在逻辑错误:
elif .269 >= obp >= .340:
该写法要求数值同时满足「小于等于0.269」和「大于等于0.340」,不存在符合要求的数值,你的测试用例OBP值0.353没有命中任何判断分支,因此没有输出。
修正方案
将OBP判断段的条件按数值从大到小的顺序调整为正确区间即可,修正后完整代码如下:
player=input("球员姓名:") hits=int(input("安打数:")) ab=int(input("打数:")) walks=int(input("保送数:")) hbp=int(input("触身球数:")) tb=int(input("总垒数:")) ba=hits/ab obp=(hits+walks+hbp)/(ab+walks+hbp) slg= tb/ab iso= slg - ba ops= obp + slg print(player,"击球率为","{:.3f}".format(ba)) print(player,"上垒率为","{:.3f}".format(obp)) print(player,"长打率为","{:.3f}".format(slg)) print(player,"孤立长打率为","{:.3f}".format(iso)) print(player,"攻击指数为","{:.3f}".format(ops)) # 修复原代码打印时的拼写错误od if ba >= .300: print(player,"击球率等级为精英") elif .299 >= ba >= .280: print(player,"击球率等级为优秀") elif .279 >= ba >= .260: print(player,"击球率等级为高于平均") elif .259 >= ba >= .250: print(player,"击球率等级为平均") elif ba <= .249: print(player,"击球率等级为低于平均") if obp >= .390: print(player,"上垒率等级为精英") elif .389 >= obp >= .370: print(player,"上垒率等级为优秀") elif .369 >= obp >= .340: # 修正此处区间上下限顺序和数值 print(player,"上垒率等级为高于平均") elif .339 >= obp >= .320: print(player,"上垒率等级为高于平均") elif obp <= .319: print(player,"上垒率等级为低于平均")
修正后测试用例的OBP值0.353会命中第三个判断分支,正常输出上垒率等级提示。
内容的提问来源于stack exchange,提问作者JoeyG27
相关产品推荐
相关产品推荐

