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

如何优化Python猜数字程序中计算机的猜测逻辑提升猜中效率

猜数字游戏计算机猜测效率优化方案

现有问题说明

当前代码存在两个核心问题:

  • 计算机每次都在1-100全区间随机生成猜测值,完全没有利用之前"猜高了/猜低了"的反馈缩小范围,平均需要50次左右才能猜中,效率极低
  • 存在两处小bug:一是random.randrange(1,100)的取值范围是1到99,和开头提示的1-100范围不符;二是分支里的guess == number、computer_guess == number是无意义的比较语句,没有实际作用,可以直接删除。

优化思路

核心逻辑很简单:给计算机维护一个动态的猜测上下边界,每次根据上一次的猜测结果收缩边界,后续只在有效区间内生成猜测值即可。根据取值策略不同,有两种常用实现:

方案1:二分查找法(效率最优)

这是猜数字游戏的最优策略,1-100范围的数字最坏情况下只需要7次就能猜中。

  1. 首先在循环外初始化两个边界变量,记录当前计算机的有效猜测范围:
comp_low = 1
comp_high = 100
  1. 替换原来的全区间随机猜逻辑,每次取当前区间的中间值作为猜测值,猜完后根据结果更新边界:
  • 如果猜低了,说明目标值比当前猜测值大,把下边界更新为当前猜测值+1
  • 如果猜高了,说明目标值比当前猜测值小,把上边界更新为当前猜测值-1
  • 猜中直接结束游戏

对应代码段替换为:

# 取当前区间中间值作为猜测
computer_guess = (comp_low + comp_high) // 2
print(f"\nThe computer guesses {computer_guess}")

if computer_guess < number:
    print("Computer guess higher...")
    comp_low = computer_guess + 1
elif computer_guess > number:
    print("Computer guess lower...")
    comp_high = computer_guess - 1
else:
    print(f"\nGame over! The number was {number} The Computer Wins!")
    break

方案2:区间随机猜测(保留随机性)

如果不想让计算机用固定的二分策略,想保留随机猜测的体验,可以在收缩后的有效区间内随机选数,效率比全区间随机高很多,平均猜测次数在7-10次左右。
只需要把上面方案里取中间值的代码,换成在当前区间内随机取值即可:

# 注意randrange是左闭右开区间,所以上边界要写comp_high+1才能取到comp_high的值
computer_guess = random.randrange(comp_low, comp_high + 1)

后续更新边界的逻辑和二分法完全一致。

修改后完整参考代码(二分法版本)

print("\tWelcome to 'Guess My Number'!")
print("I'm thinking of a number between 1 and 100.\nTry to guess in as few attempts as possible.")

import random

# 修复原范围bug,用randint生成1-100的目标数
number = random.randint(1, 100)
guess = 0
# 初始化计算机猜测边界
comp_low = 1
comp_high = 100

while guess != number:
    guess = int(input("\nTake a guess: "))
    if guess < number:
        print("Player guess higher...")
    elif guess > number:
        print("Player guess lower...")
    else:
        print(f"\nGame over! The number was {number} The Player Wins!")
        break

    computer_guess = (comp_low + comp_high) // 2
    print(f"\nThe computer guesses {computer_guess}")

    if computer_guess < number:
        print("Computer guess higher...")
        comp_low = computer_guess + 1
    elif computer_guess > number:
        print("Computer guess lower...")
        comp_high = computer_guess - 1
    else:
        print(f"\nGame over! The number was {number} The Computer Wins!")
        break

input("\nPress Enter to Exit")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 13:12:30