Error "Indexerror: list assignment index out of range"

Asked

Viewed 430 times

0

This program when executed a certain amount of times it shows a message shown right below.

Agent Train 1

    def Ttrem_Um(velocidade,linhas):
        velocidade = randint(55,100)
        return velocidade

Agent Train 2

    def Ttrem_Dois(velocidade,linhas):
        velocidade = randint(55,100)
        return velocidade
    
    def lin(linhas1,linhas2,i,j):
        i = i+1
        linhas1[i] = 1
    
        #   linhas2[j+1] = 2
        #   velocidade =65 - 20
        #   velocidade2 = 65
        return linhas1
    
    def estacao(linhas1,linhas2,linha,velocidade,velocidade2,i,j,z):
    
        i = randint(0,10)
        j = randint(0,10)
        linhas1[i] = 1
        linhas2[j] = 2
    
        print('Trem {} esta na linha: {} \nTrem {} esta na linha: {}'.format(linhas1[i],i,linhas2[j],j))
    
        velocidade = Ttrem_Um(velocidade,linhas1)
        velocidade2 = Ttrem_Dois(velocidade,linhas2)
        print('Velocidade atual: \nTrem 1: {} \nTrem 2: {}'.format(velocidade,velocidade2))
    
        if velocidade != 65 and velocidade2 != 65:
            velocidade = 65
            velocidade2 = 65
    
        print('velocidade atualizada: \nTrem 1: {} \nTrem 2: {}'.format(velocidade,velocidade2))
    
        if(linhas1[i] == linhas2[j]):
            lin(linhas1,linhas2,i,j)
            print('Trem {} esta na linha: {} \nTrem {} esta na linha: {}'.format(linhas1[i],i,linhas2[j],j))
    
    velocidade = 0
    velocidade2 = 0
    i = 0
    j = 0
    z = 0
    linha = {'Trem_Um':1,'Trem_Dois':2}
    linhas1 = [0,0,0,0,0,0,0,0,0,0]
    linhas2 = [0,0,0,0,0,0,0,0,0,0]
    estacao(linhas1,linhas2,linha,velocidade,velocidade2,i,j,z)

Message:

Traceback (most recent call last): File "estacao.py", line 53, in 
   estacao(linhas1,linhas2,linha,velocidade,velocidade2,i,j,z) File 
    "estacao.py", line 26, in estacao linhas1[i] = 1 IndexError: list 
  assignment index out of range 

how do I fix this mistake?.

  • 1

    if randint(0, 10) return 10 will give error pq the list does not have index 10

1 answer

2


The problem with this code is that the lists linhas1 and linhas2 have 10 elements ranging from position 0 to position 9 and within the function estacao you call randint(0,10) to generate a random value that will be the position in the list you will access.

Unlike range() the random.randint can return the stop value. Soon it can return the value 10, and this position does not exist in your list.

To solve the problem just replace randint(0,10) for randint(0,9).

Using the Len function():

The function len returns the amount of elements a sequence has. We can use this function in lists, tuples, dictionaries, strings, etc.

Thinking about it we can replace randint(0,9) for randint( 0, len(linhas1) - 1). The advantage of writing code this way is that you can change the size of your list without ever having to change the value you pass as a function stop random.randint. See this example below:

import random

def obtemPosicao(linhas):
    return random.randint(0, len(linhas) - 1)

linhas = [0,0,0,0,0,0,0,0,0]

print(obtemPosicao(linhas))

# Uma nova linha é criada e ela pode ser usada sem alterar a função obtemPosicao.
linhas.append(0)

print(obtemPosicao(linhas))

Browser other questions tagged

You are not signed in. Login or sign up in order to post.