Python猜数字游戏(Mastermind):猜对后无法终止循环问题求助
解决Mastermind猜数字游戏猜对后不终止的问题
你的问题出在:当第二次及之后猜对数字时,你只跳出了内层的for循环,外层的while循环仍会继续执行,导致后续的输入语句被触发,程序不会终止。
原代码的核心问题
- 猜对数字时的
break仅退出了遍历数字位的for循环,外层while number != num循环还会继续运行 - 代码存在冗余逻辑:
continue后的打印语句永远不会执行,num被反复转换字符串也会引发问题 - 循环结束后的额外输入逻辑完全多余,会干扰正常流程
修改后的完整代码
import random # 生成4位随机目标数字,提前转成字符串方便逐位对比 target_num = str(random.randint(1000, 9999)) print(target_num) # 测试用,正式发布可注释 counter = 0 while True: guess_input = input('猜数字:') # 校验输入是否为合法4位数字 if not guess_input.isdigit() or len(guess_input) != 4: print('请输入有效的4位数字!') continue counter += 1 guess_num = guess_input # 完全猜对,终止程序 if guess_num == target_num: print('你是Mastermind!') print(f'你只用了{counter}次尝试。') break # 计算位置正确的数字并生成提示 correct_pos_count = 0 result = [] for i in range(4): if guess_num[i] == target_num[i]: correct_pos_count += 1 result.append(guess_num[i]) else: result.append('X') print(' '.join(result)) print(f'还不对,但你猜对了{correct_pos_count}个位置的数字!\n')
关键修改说明
- 改用
while True循环,通过break直接终止整个循环,避免原逻辑中循环条件判断的漏洞 - 猜对数字时立刻用
break退出循环,程序直接终止,不会再执行输入语句 - 提前将目标数字转为字符串,避免反复转换的不必要操作
- 移除冗余的
continue和无效打印语句,简化逻辑 - 增加输入合法性校验,避免非法输入导致程序报错
测试运行效果
8389 猜数字:8466 8 X X X 还不对,但你猜对了1个位置的数字! 猜数字:8389 你是Mastermind! 你只用了2次尝试。
内容的提问来源于stack exchange,提问作者Mohammadhossein Bagheri
相关产品推荐
相关产品推荐

