Индекс списка вне диапазона Ошибка python - PullRequest
0 голосов
/ 27 июня 2018

Хорошо, я получаю эту ошибку:

File "cows.py", line 34, in <module>
  if newS[i] <= newS[k]:
IndexError: list index out of range

Это мой код. Может кто-нибудь помочь мне решить эту проблему?

speed = []
pos = []
while True:
    try:
        print("Enter cow speed and then position: ")
        a = int(input("Enter position: "))
        b = int(input("Enter speed: "))
        pos.append(a)
        speed.append(b)
        print("Do you want another cow? ")
        c = input("Enter 'no' to stop or any other string to have another cow: ")
        if c == 'no':
            break
        else:
            continue
    except ValueError:
        print("Please enter 1 number only.")
        continue
newP = []
newS = []
while pos:
    mini = pos[0]  # arbitrary number in list 
    for x in pos: 
        if x < mini:
            mini = x
    r = pos.index(mini)
    newS.append(speed.pop(r))
    newP.append(mini)
    pos.remove(mini)    
newS = newS[::-1]
groups = 1
k = 1
for i in range(len(newS)):
    if newS[i] <= newS[k]:
        newS[k] = newS[i]
        k += 1
    else:
        k += 1
        groups += 1
print(groups)

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

Я ввел только 1 скорость и позицию, поэтому длина newS будет равна 1, поэтому строка 32: k = 1

устанавливает индекс списка равным 1, что превышает пределы списка

0 голосов
/ 27 июня 2018

Массив Python индексируется от 0, и поэтому для списка из 5 элементов итерации будут от 0 до 4. Функция «range» генерирует итератор с элементами, включающими верхний предел, поэтому, если вы передадите 5 в диапазон, он сгенерирует итератор для 0-5, который будет индексирован вне границы для массива из 5 элементов.

Попробуйте изменить аргумент функции range с range (len (newS)) на range (len (newS) - 1).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...