Se nota que que has estado trabajando, lo que traes hoy tiene mejor pinta, estás preparado para la charla de la hormiguita. Imagina que una hormiguita recorre tu programa de arriba hacia abajo y por cada iteración del bucle da un pasito hacia delante.
En tu ejemplo de arriba:
A=[]
for j in range(m):
A.append([0]*n)
for j in range(m):
for k in range(n):
A[j][k] = float(raw_input("Dame el componente (%d,%d): " %(j+1,k+1)))
j=0, j=1, j=2, ...la hormiguita da 3 pasos.
(j=0,k=0), (j=0,k=1), (j=0,k=2)
(j=1,k=0), (j=1,k=1), (j=1,k=2)
(j=2,k=0), (j=2,k=1), (j=2,k=2) ... la hormiguita da 9 pasos.
La hormiguita da un total de 12 pasos, (n*m)+m pasos.
Si incluyes la creación de cada fila del
array en el primer bucle anidado:
A=[]
for j in range(m):
A.append([0]*n)
for k in range(n):
A[j][k] = float(raw_input("Dame el componente (%d,%d): " %(j+1,k+1)))
(j=0,k=0), (j=0,k=1), (j=0,k=2)
(j=1,k=0), (j=1,k=1), (j=1,k=2)
(j=2,k=0), (j=2,k=1), (j=2,k=2) ... la hormiguita da 9 pasos.
La hormiguita da un total de 9 pasos, n*m.
Si te cuento ésto es porque la calidad del código se mide entre otras muchas cosas por el menor número de pasos que da la hormiguita a lo largo de tu programa.
Volviendo con la diagonal, fijate bien como la solución que propone Leo es sin duda mejor que el recorrido que propones tú para recorrer la diagonal del array, ademas que la idea de la diagonal es solo para 'matrices cuadradas' (n=m), cosa que tampoco compruebas.
Solución 1 (la hormiguita de m pasos)
if n == m:
for k in range(m):
C.append (A[k][k])
Solución 2 (la hormiguita de m*n pasos y está bastante mosqueada)
if n == m:
for k in range(m):
for j in range(n):
if k==j:
C.append (A[j][k])
Para la diagonal en el otro sentido Leo lo ha dejado más que resuelto, procura hacer lo mismo para la próxima vez, es decir, lo primero es entender lo que uno quiere hacer y luego ya se llevará a la práctica, primero diseñar y luego programar.
Siguiendo con el ejemplo de Leo...
La diagonal: (0,2) (1,1) (2,0)... la hormiguita DEBE dar 3 pasos, n o m (matriz cuadrada).
m = 3
n = 3 = 3
Bucle 0-2
k = 0
k = 1
k = 2
eureka!!
(0,2) (1,1) (2,0)
(k,2) (k,1) (k,0)
uhmmm...pero faltan las columnas...a ver...
k=0....necesito un 2
k=1....necesito un 1
k=2....necesito un 0
Si además sabemos que n y m valen siempre 3 en todo el recorrido, ¿se te ocurre algo?
Saludos.
pd.¿python en la sección de scripting? ¿en un foro de hacking?, si es porque no hay muchos posts lo podría apadrinar C/C++ , seguro que se llevan bien
.