单词打乱游戏重打乱功能重复输出问题技术求助
解决单词打乱游戏重打乱后的重复定义输出问题
你的问题根源在于递归调用game函数后未终止当前函数的执行:每次用户输入're'触发递归时,新的game实例启动运行,但原函数的执行流程并没有停止。等递归的game执行完毕返回后,原函数会继续走到print(n,":",d)这一行,因此每递归一次,最后就会多打印一次单词定义。
方案1:用循环替代递归(推荐)
递归在这里并非必要,用while循环可以更直观地控制流程,彻底避免多层函数栈带来的重复执行问题:
def game(n,d): a = True while True: scrambled = shuffler(n) guess = input(f"{scrambled} 're' to rescramble: ") if guess == 're': continue # 直接进入下一轮循环,生成新的打乱单词 elif guess == n: print("Correct") break else: print("Incorrect") a = False break print(n,":",d) return a
方案2:递归调用后立即返回
如果坚持使用递归,在调用game(n,d)后要立刻return,阻止当前函数继续执行后续的打印语句:
def game(n,d): a = True scrambled = shuffler(n) guess = input(f"{scrambled} 're' to rescramble: ") if guess == 're': # 递归调用后直接返回,不执行后续的print return game(n,d) elif guess == n: print("Correct") else: print("Incorrect") a = False print(n,":",d) return a
两种方案都能实现:无论用户重打乱多少次,只有当用户完成猜测(输入正确或错误答案)时,才会打印一次单词定义,不会出现重复输出的问题。
内容的提问来源于stack exchange,提问作者Beta Chad
相关产品推荐
相关产品推荐

