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

Python猜数字游戏Option2循环异常:重复请求输入问题求助

排查并修复猜数字游戏Option 2的循环异常问题

我看到你在Option 2模块里遇到了循环持续请求输入的问题,咱们一步步拆解问题所在:

核心问题分析

  • 用户输入被重复请求:你把my_num = input("请输入一个1到10之间的数字让电脑猜:")放在了while True循环内部,这意味着每次电脑完成一次猜测后,程序都会让你重新输入目标数字,自然会一直重复请求输入。
  • 电脑猜测逻辑无效:每次循环都重新调用random.randint(1,10)生成随机数,电脑没有根据之前的猜测结果缩小范围,完全是无逻辑瞎猜;同时counter变量在循环内每次都被重置为0,导致次数统计永远是1,完全不准确。

修复后的代码

import random

def display_menu():
    print("欢迎来到猜数字游戏!")
    print("1. 玩家猜数字")
    print("2. 玩家设定数字,电脑猜")
    print("3. 退出")
    print()

def main():
    display_menu()
    option = int(input("请选择菜单选项:"))

    # 玩家猜测电脑随机生成的数字,直到猜对为止。输出玩家的猜测内容及猜对所用的次数
    if option == 1:
        number = random.randint(1,10)
        counter = 0
        while True:
            try:
                guess = input("猜一个1到10之间的数字:")
                guess = int(guess)
                print()
                if guess < 1 or guess > 10:
                    raise ValueError()
                counter += 1
                if guess > number:
                    print("猜大了。")
                    print()
                elif guess < number:
                    print("猜小了。")
                    print()
                else:
                    print("猜对了!")
                    print("你用了", counter, "次猜对了数字!")
                    break
            except ValueError:
                print(guess, "不是有效的猜测")
                print()

    # 玩家输入一个数字让电脑猜测。电脑在指定范围内猜测数字。输出电脑的猜测内容及猜对所用的次数
    if option == 2:
        print("电脑猜我的数字")
        print()
        # 把用户输入移到循环外部,只需要输入一次目标数字
        while True:
            try:
                my_num = input("请输入一个1到10之间的数字让电脑猜:")
                my_num = int(my_num)
                if my_num < 1 or my_num > 10:
                    raise ValueError()
                break  # 输入有效就跳出输入验证循环
            except ValueError:
                print(my_num, "不是有效的输入")
                print()
        
        # 初始化电脑猜测的范围和计数器
        low = 1
        high = 10
        counter = 0
        
        while True:
            counter += 1
            # 用范围缩小的逻辑猜测,代替无限制随机
            comp = random.randint(low, high)
            print(f"电脑猜了 {comp},", end="")
            if comp > my_num:
                print("猜大了")
                high = comp - 1  # 猜大了,缩小上限
            elif comp < my_num:
                print("猜小了")
                low = comp + 1   # 猜小了,提高下限
            else:
                print("猜对了!")
                print(f"电脑用了 {counter} 次猜对了数字!")
                break

    # 结束游戏
    if option == 3:
        print("再见")

if __name__ == '__main__':
    main()

关键修改点说明

  • 分离输入与猜测逻辑:增加了专门的输入验证循环,用户只需要输入一次有效的目标数字,之后就进入电脑的猜测流程,不会再重复请求输入。
  • 优化电脑猜测逻辑:引入low和high变量记录当前猜测范围,每次根据结果缩小范围,让电脑的猜测更有逻辑,避免无意义的重复随机。
  • 修正计数器统计:把counter的初始化移到猜测循环外部,每次循环只做递增操作,保证次数统计准确。

这样修改后,Option 2的功能就正常了:用户只需要输入一次目标数字,电脑会逐步缩小范围猜测,直到猜对,同时正确统计猜测次数。

内容的提问来源于stack exchange,提问作者TNieuwenhuis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:30:40