Realicemos algunos ejercicios sobre matrices para practicar los recorridos sobre estas. Vamos a realizar cinco funciones sobre una matriz de enteros. Vamos con el primero. Tenemos que realizar una función que nos retorne la suma de todos los valores de una matriz. Ya sabemos que eso lo podemos lograr con un recorrido total sobre la matriz usando un doble ciclo, como vimos en el último "Manos a la Obra". Pasemos a Spyder y veamos el código, nuevamente. Tenemos la función definida y una variable en la cual calcularemos la suma. Como dijimos, la suma de todos los elementos la calculamos con un doble ciclo que pase por toda la matriz, pero, en este caso, hagámoslo con for in range para variar. Nos queda, for "i" in range desde cero hasta len de la matriz y for "j" in range de cero a len de la matriz en la posición cero. Usamos len matríz en la posición cero para obtener el número de columnas en caso que la matriz no sea cuadrada. Ahora, seguimos con suma más igual el valor que tenga la matriz en la posición "i" "j". Y retornamos la suma, return suma, para completar la función. Vamos con el segundo. Ahora, debemos retornar la suma todos los valores de una fila dada por parámetro. Para lograr esto, tendremos que ubicarnos sobre la fila dada y recorrerla sumando todos los valores, es decir, dejaremos estática la fila y haremos recorrido sobre sus columnas. Veamos en Spyder la implementación. Nuevamente tenemos la función y una variable creada donde calculamos la suma. Como dijimos, la fila permanecerá estática mientras recorremos las columnas, así que, necesitamos solo un ciclo y un único índice para esto. Con un for in range nos queda, for número de columna in range desde cero hasta la longitud de la matriz en la posición cero, para el número de columnas, nos queda que, entonces, la suma más igual, nuestra matriz en la fila que entra por parámetro y número de la columna. Así, indexamos siempre por la misma fila mientras varía la columna, retornamos la suma y listo. Al tercero, ahora. De nuevo es calcular una suma, pero esta vez de todos los valores de una determinada columna. La lógica será la misma del anterior, pero esta vez dejando estática la columna mientras recorremos por filas. Pasemos al código. Ya tengo la función nuevamente junto con la variable adonde calculamos la suma. Implementemos nuestro for in range, pero esta vez para recorrer las filas. Nos queda for num fila, in range de cero al len de la matriz y entonces, hacemos suma más igual, la matriz en num fila y la columna dada por parámetro. Con esto, indexamos variando las filas y siempre con la misma columna. Retornamos la suma y queda lista la función. Sigamos con el cuarto. En éste nos interesa retornar true o false, dependiendo de si en la matriz existe o no al menos un valor negativo. Para hallar esto, tendremos que recorrer la matriz casilla por casilla, lo cual nos indica que necesitamos un doble ciclo. Pero, es importante notar que debe ser parcial, ya que tan pronto encontremos un valor negativo, no es necesario que sigamos recorriendo, ya que tendremos la respuesta. Implementemos en Spyder. Tenemos la función, la variable que usaremos como respuesta que empieza en false asumiendo que no hay negativos, y me he tomado la libertad de implementar de una vez el doble ciclo usando while. Nos falta modificar este recorrido para que tenga en cuenta que es parcial, para lo cual podemos usar la variable encontrada como centinela, ya que será false mientras no hayamos encontrado el negativo y si lo encontramos debe cambiar a true marcando el paso, el final del ciclo. Nos quedaría entonces, while "i" menor que len matriz, and not encontrado. Y lo mismo abajo while "j" menor que len matriz en cero, and not encontrado. Preguntamos ahora, si el elemento de la posición [i] [j] es negativo. Y nos queda, if matriz en la posición "i" "j" es menor que cero. Entonces, diremos que encontrado es igual a true y los avances de los ciclos. El de "j", "j" más igual uno y el de "i", "i" más igual, uno. Retornamos la variable encontrado, return encontrado y hemos terminado la función. Veamos el último problema. Ahora, debemos retornar la fila con el mayor número de ceros. Para resolver el problema tendremos entonces que recorrer por filas. Por cada fila, contamos la cantidad de ceros y luego comparamos si dicha cantidad supera el valor máximo que teníamos almacenado hasta el momento en una variable, como hacemos siempre al buscar el mayor. Veamos en Spyder la solución. Empezamos con nuestra función con las variables donde guardamos el índice de la fila con más ceros y la cantidad máxima de ceros. Ahora, a recorrer por filas. Creamos primero, for "i" in range desde cero hasta len de la matriz para recorrer las filas y creamos una variable para contar los ceros de la fila. La voy a llamar "cant ceros", y empieza en cero. Ahora, el otro for para las columnas. For "j" in range desde cero hasta len, la matriz en cero y vamos preguntando a cada celda si tiene un cero para ir contando. If matriz en la posición "i" "j", que es igual a cero, entonces, aumentamos la cantidad de ceros. Cant ceros más igual uno. Luego, será ver si la cantidad contada es mayor al máximo, es decir, si if cant ceros es mayor que el máximo de ceros y de ser así, que el máximo de ceros ahora será igual a esa cantidad y la fila con más ceros será la "i". Finalmente, retornamos, return fila más y habremos terminado. He creado una matriz de ejemplo y un programa principal para que podamos probar las funciones que hemos desarrollado. Ejecutaré y podemos ver los resultados y comprobarlos. Entonces, el primero es la suma de la matriz. El segundo, es la suma de la fila, en la posición uno. El tercero, será la suma de la columna cuatro. Después, seguiremos el cuarto, si existe un negativo, que ya vemos que si hay negativos y nos da true. Y por último, la fila con más ceros, que vemos es la dos, que viene siendo la única que contiene ceros.