You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 04:46:19