Игра на угадывание Python: IndexError: индекс объекта диапазона вне диапазона - PullRequest
0 голосов
/ 06 октября 2018

Я создал игру, в которой я выбираю число от 1 до 100, и компьютер угадывает его.Однако я получаю IndexError, когда выбираю цифры ниже 6. Почему это происходит?

Вот мой код:

print("Helllo user, select a number from 1-100 in your mind and i will try to guess it...")

list_nums = range(1,101)
counter = 0

while True :
    mid_element = list_nums[int(len(list_nums)/2)-1]
    print(" Is your selected number {}".format(mid_element))
    counter = counter + 1
    response = str(input("is it too high or too low..? : "))
    try:
        if response == "too low":
            list_nums = list_nums[int(len(list_nums)/2):int(len(list_nums))]
            mid_element = list_nums[int(len(list_nums)/2)]

        elif response == "too high":
            list_nums = list_nums[1:int(len(list_nums)/2)]
            mid_element = list_nums[int(len(list_nums)/2)]

        elif response == "correct":
            print("Perfect i finally guessed it. Your number is {}\n".format(mid_element))
            break
    except:
        print("Invalid entry..Try again")
        continue

print("\nI guessed it in {} attempts".format(counter))

Ответы [ 2 ]

0 голосов
/ 06 октября 2018

Я просмотрел ваш код и запустился в моей системе.Каждый раз, когда размер вашего списка уменьшается и в конце он становится равным 0. В тот момент, когда ваш код вычисляет строку mid_element = list_nums[int(len(list_nums)/2)-1], ответом будет -1, что выходит за пределы диапазона.

Я проследил коди вывод будет следующим:

Helllo user, select a number from 1-100 in your mind and i will try to guess it... Length of list_num: 100 Is your selected number 50 is it too high or too low..? : too high Length of list_num: 49 Is your selected number 25 is it too high or too low..? : too high Length of list_num: 23 Is your selected number 13 is it too high or too low..? : too high Length of list_num: 10 Is your selected number 8 is it too high or too low..? : too high Length of list_num: 4 Is your selected number 6 is it too high or too low..? : too high Length of list_num: 1 Is your selected number 6 is it too high or too low..? : too high Invalid entry..Try again Length of list_num: 0

Так что внесите изменения, приведенные в ответе выше.

0 голосов
/ 06 октября 2018

Изменить строку

list_nums = list_nums[1: int(len(list_nums)/2)]

на:

list_nums = list_nums[0: int(len(list_nums)/2)]

Поскольку индекс списка начинается с нуля.

Или:

list_nums = list_nums[: int(len(list_nums)/2)]

Потому что Python знает, что список начинается с нуля.

...