Python poison递归函数输出与预期不符,请求修正帮助
问题:Python递归函数poison输出不符合预期
输入测试用例poison(40, 13, 13, 7)时,当前输出最后一行是「Turn : 28, HP : 0」且额外输出None,预期输出最后一行是「Turn : 29, HP : 0」。
原代码
def poison(health, turn, initial_turn, damage): if health <= 0: print(f"Turn : {turn - 1}, HP : 0") return if turn % 3 == initial_turn % 3: print(f"Turn : {turn}, HP : {health}") health -= damage poison(health, turn + 1, initial_turn, damage) # APLIKASI print(eval(input()))
当前输出
Turn : 13, HP : 40
Turn : 16, HP : 33
Turn : 19, HP : 26
Turn : 22, HP : 19
Turn : 25, HP : 12
Turn : 28, HP : 5
Turn : 28, HP : 0
None
预期输出
Turn : 13, HP : 40
Turn : 16, HP : 33
Turn : 19, HP : 26
Turn : 22, HP : 19
Turn : 25, HP : 12
Turn : 28, HP : 5
Turn : 29, HP : 0
问题原因与修正方案
问题1:死亡回合编号错误
当health在回合28被扣除为-2后,下一次递归进入回合29,此时触发health <=0的判断,原代码打印turn-1(即28),但实际死亡判定发生在回合29,需直接使用当前turn值。
问题2:额外输出None
eval(input())执行poison函数后返回None,外层的print会输出这个返回值,需去掉外层print。
修正后的代码
def poison(health, turn, initial_turn, damage): if health <= 0: print(f"Turn : {turn}, HP : 0") return if turn % 3 == initial_turn % 3: print(f"Turn : {turn}, HP : {health}") health -= damage poison(health, turn + 1, initial_turn, damage) # APLIKASI eval(input())
内容的提问来源于stack exchange,提问作者jaden
相关产品推荐
相关产品推荐

