【问题标题】:Random Choice is out of list range in Python?随机选择超出 Python 的列表范围?
【发布时间】:2026-02-06 19:25:01
【问题描述】:

我正在尝试创建一个程序来猜测您输入的数字。我试图让计算机以尽可能少的猜测获得数字,所以我正在做类似二进制搜索的事情。当我运行代码并且它到达total = total[the_low_one:computer2_guess] 时,我不断得到一个超出范围的索引。我很困惑为什么它超出范围。 the_low_one 每次触及新低时,我是否应该在其上加或减一个以使其保持在范围内?我很感激任何帮助,因为我迷路了。提前致谢! 代码:

def second_computer():
    global computer2_score
    computer2_score=0
    computer2_guess= -1
    the_low_one=1
    the_high_one=1000000
    total= range(1,1000000)
    while computer2_guess != pick_number:
        computer2_guess=random.choice(total)
        if computer2_guess>pick_number:
            total=total[the_low_one:computer2_guess]
            the_high_one=computer2_guess-1
        else:
            total=total[computer2_guess:the_high_one]
            the_low_one=computer2_guess+1
        computer2_score+=1

【问题讨论】:

  • 您的格式需要一些工作 - 但我认为您的问题是您将 the_low_one 初始化为 1 而不是 0。
  • 格式化是什么意思? .
  • while 语句后的缩进需要修复
  • 哦,对不起,我没有意识到它没有正确缩进在线。感谢您的关注!我尝试将其更改为 0,但发生了同样的错误。
  • 您有许多逻辑错误。您的切片使用来自 total[] 数组的值,而不是索引。 pick_number 是在哪里定义的?

标签: python list python-2.7 random


【解决方案1】:

随着total 的缩小,列表中的数值不再与其索引对齐。你可以通过做它来工作

total=total[total.index(the_low_one):total.index(the_high_one)]

更简单的方法是完全取消 total 并设置 computer2_guess=random.randint(the_low_one,the_high_one)

【讨论】:

  • 我不知道为什么我不首先做randint。谢谢!
  • 如果 randint 为 1000000 会怎样?