当任一变量归零时终止函数运行的实现方法
解决变量归零后程序仍继续执行的问题
原代码的核心问题在于两个函数互相递归调用,仅检查自身变量是否归零,且turns()函数在function_a()执行完毕后会无条件触发function_b(),导致即使x归零,function_b()仍会继续运行。以下是两种可行的修改方案:
方案一:主循环控制流程(推荐)
去掉函数间的递归调用,用主循环统一控制执行逻辑,确保任一变量归零后立即终止所有操作:
from random import randint x = 10 y = 10 def roll_dice(): return randint(1, 6) def function_a(): global x dice = roll_dice() if dice >= 1: x -= 5 print(f"x减去5,当前x: {x}") else: print('Better luck next time') def function_b(): global y dice = roll_dice() if dice >= 1: y -= 5 print(f"y减去5,当前y: {y}") else: print('Better luck next time') def turns(): # 仅当x和y都大于0时才继续循环 while x > 0 and y > 0: function_a() if x <= 0: break function_b() if y <= 0: break print('good game') turns()
修改说明:
- 用
turns()的主循环替代递归调用,逻辑更直观,避免嵌套执行的冗余问题 - 主循环条件
x > 0 and y > 0确保任一变量归零后直接终止 - 每次执行完单个函数后立即检查对应变量状态,及时跳出循环
方案二:保留递归逻辑,增加全局状态检查
如果需要保留原有的函数内循环逻辑,可以在每个函数的循环中增加对对方变量的检查:
from random import randint x = 10 y = 10 def roll_dice(): return randint(1, 6) def function_a(): global x # 同时检查x和y的状态,任一归零则停止循环 while x > 0 and y > 0: dice = roll_dice() if dice >= 1: x -= 5 print(f"x减去5,当前x: {x}") else: print('Better luck next time') # 任一变量归零则终止所有操作 if x <= 0 or y <= 0: break function_b() def function_b(): global y while y > 0 and x > 0: dice = roll_dice() if dice >= 1: y -= 5 print(f"y减去5,当前y: {y}") else: print('Better luck next time') if y <= 0 or x <= 0: break function_a() def turns(): if x > 0 and y > 0: function_a() print('good game') turns()
修改说明:
- 在每个函数的循环条件中同时检查
x和y的状态 - 每次循环结束后再次判断全局状态,确保任一变量归零后终止递归调用
turns()仅在初始状态都有效时启动流程,避免无效执行
内容的提问来源于stack exchange,提问作者Darko Zlatarek
相关产品推荐
相关产品推荐

