Python - list index out of range

 
Vista:

list index out of range

Publicado por Eder Jahziel (1 intervención) el 03/07/2021 22:06:14
Realizar un programa con un menú de 3 opciones que se ejecute continuamente: 1 Dilatación 2 Erosión 3 Salir

El corazón es binario y está compuesto de ceros. Por lo tanto, dilatar quiere decir recubrir el corazón con otra capa de ceros, y erosionar quiere decir quitar una capa de ceros.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import numpy as np
M=[
[1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1],
[1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1],
[1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1],
[1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1],
[1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1],
[1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1],
[1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1],
[1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1],
[1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1],
[1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1],
[1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1],
[1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1],
[1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1],
[1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1],
[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]]
R=18
C=51
for i in range(0,R):
	print("\n")
	for k in range(0,C):
		print(M[i][k],end=' ')
print("\n")
print("\n")
 
while True:
    print(f"Que accion desea Realizar \n\
Presiona D para Dilatar.\n\
Presiona E para Erocinar.\n\
Presiona C para Cerrar.")
 
    opcion=input()
    if opcion=='d':
        for i in range(0,18):
            print("\n")
            for j in range(0,51):
                if(i>0 and j>0 and i<R and j<C):  #Condicion apara analizar la matriz, sin tomar encuenta los bordes
                    if M[i][j]==1 and ((M[i][j-1]==1 and (M[i][j+1]==0)) or (M[i][j-1]==0 and (M[i][j+1]==1))):
                        M[i][j]=0
                print(M[i][k],end=' ')
        print("\n")
        print("\n")
        print("Preciona enter")
    elif opcion=='e':
 
        print("Preciona enter")
    elif opcion=='c':
        break
    input()

lo que hago es recorrer la matriz pero en la condición que hago me convierte a todo a 1 pero nose por que
y tambien doce que me salgo del indice lo cual no es posible ya que esta condicion lo impide

if(i>0 and j>0 and i<R and j<C): #Condicion apara analizar la matriz, sin tomar encuenta los bordes
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de joel
Val: 3.475
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

list index out of range

Publicado por joel (901 intervenciones) el 04/07/2021 07:45:53
Hola Eder, lo que veo, es que en esta linea:
1
if M[i][j]==1 and ((M[i][j-1]==1 and (M[i][j+1]==0)) or (M[i][j-1]==0 and (M[i][j+1]==1))):
no tienes en cuenta el primer elemento y el ultimo... es decir, si estas en la primera file y pones un -1 te dara error...

Yo creo que asín te funcionara bien:
1
if M[i][j]==1:

Pero si quieres modificarlo un poco puedes hacer algo así:
1
if M[i][j]==1 and j>1 and j<50 and ((M[i][j-1]==1 and (M[i][j+1]==0)) or (M[i][j-1]==0 and (M[i][j+1]==1))):


Coméntanos, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar