设置循环终止条件后代码仍持续运行的技术求助
问题分析与修复方案
你的代码存在三个核心问题,导致游戏无法按预期终止:
- 外层for循环未终止:你用
for word in words遍历单词列表,即便while循环被break,外层for仍会继续迭代下一个单词,游戏会反复重启。 - 终止条件逻辑颠倒:
if turns >= -1的判断完全错误——你原本想在次数耗尽时结束游戏,但这个条件会在剩余次数还没用完时就触发break。 - 次数未重置:每次重新选单词时,
turns没有恢复初始值,第一次用完次数后,后续循环会直接触发结束逻辑。
修复后的代码
from random import choice # 原代码漏了导入choice,必须补上 def handman_game(): words = ['come','go','hello','welcome','bye-bye','honestly','which','victory','frankly','python'] guesses = [] target_word = choice(words) # 只选一次目标单词,无需外层for循环 turns = 10 guess = '' while guess != target_word and turns > 0: guess = input(f'剩余次数 {turns},请输入单词:') if guess == target_word: print('猜对了!') guesses.append(guess) print(f'已猜对的单词:{guesses}') break else: turns -= 1 print(f'猜错了,还有{turns}次机会') # 循环结束后判断结束原因 if turns == 0: print(f'游戏结束!正确单词是:{target_word}')
关键修改点
- 移除多余的外层
for循环,只随机选择一个目标单词进行单轮游戏 - 修正循环终止逻辑:while循环同时判断「未猜对」和「还有剩余次数」,满足任一结束条件时自动退出
- 删除未使用的
game_on变量,简化代码结构 - 补全
choice函数的导入(原代码缺少这一行会直接报错) - 优化交互提示信息,让玩家更清楚当前状态
内容的提问来源于stack exchange,提问作者Kolawole Otitolaiye
相关产品推荐
相关产品推荐

