Cadenas y arrays

Una cadena es un tipo de variable que puede contener textos.  Si por ejemplo a es un entero y vale 1, a+a vale 2. Pero si es una cadena, valdrá 11.  En otros lenguajes tú tienes que decir de qué tipo es la variable. Python lo hace automáticamente cuando le asignas valor. Es otro ejemplo de flexibilidad y falta de control del programador sobre lo que ocurre.

Hay operaciones que son específicas para cadenas. Por ejemplo la función split, que lo que hace es dividir un texto en partes. Por ejemplo, imagina que una línea de un fichero es la siguiente: 

Antonio, López, Rodríguez, 8

Y yo quiero sacar de esa línea cuatro variables: nombre, primer apellido, segundo apellido y nota. En primer lugar debo conocer el formato en el que se me entregan los datos. En este caso, cada persona en una línea y los datos separados por comas. 

Antes de seguir vamos a introducir algunos conceptos. Imagina que tenemos miles de líneas con miles de alumnos. Cada alumno, cada línea sería un registro. Y cada uno de los datos que tiene cada línea, es decir, cada columna, sería un campo. En este caso nombre, apellido1, apellido 2 y nota serían campos. En excell normalmente las filas son registros y las columnas campos.

Otros conceptos son objeto y método. Más o menos conoces estos conceptos de Scratch. El gato sería un objeto. Tiene sus propios programas, y estos serían métodos. En otros lenguajes de programación, como processing, python y C++, tú puedes definir objetos y asignarle sus propios métodos. Esto está bien para programas muy complejos. Imagina que quieres hacer un programa donde cientos de partículas están botando. Cada partícula sería un objeto, con sus propios  atributos, como pueden ser los disfraces en scratch. Objetos similares forman una clase. Por ejemplo, todas las bolas serían instancias o copias de la misma clase bola. 

Ahora mismo no vas a crear tus propios objetos, pero hay veces que los lenguajes tienen definidas sus propias clases y métodos. En python una cadena no es sólo una variable, es un objeto y tiene sus propios métodos. Si una cadena se llama x y el método que quieres ejecutar se llama split, normalmente se escribe así:

x.split, es decir el nombre del objeto, un punto, y el nombre del método. Esto es así en python, processing y C++

Otros conceptos que hay que conocer son las listas y los arrays. Imagina que tenemos 100 alumnos, cada uno con su nombre, apellidos y nota. Hay un tipo especial de variable que contiene a todos los alumnos. Por ejemplo, imagina que el primer alumno se corresponde con la primera línea del fichero. Se le asigna una cadena que es  "Antonio, López, Rodríguez, 8", el segundo alumno se corresponde con "Laura, Martínez, Pérez, 9" y así sucesivamente. Imagina que todas estas cadenas forman parte de una lista llamada x. Podrías listarla así:

for a in x:

print (a)

Vuelvo a decir que ese for a in x es ese tipo de cosas que no gustan a los programadores de C, porque hay cosas implícitas como -Recorre la lista de uno en uno hasta el final.....no es un lenguaje muy formal. Pero es lo que hay.

La lista estaría numerada, el primer término sería x[0] y el segundo x[1]

x[0] =  "Antonio, López, Rodríguez, 8"

x[1] = "Laura, Martínez, Pérez, 9"

Dicho esto, ya podemos explicar qué hace split y cómo se usa.

Si x a vale "Antonio, López, Rodríguez, 8"

y hacemos y=x.split(',')

Crea una lista, a partir de x y usando como separador la coma. O sea que y[0]= "Antonio", y [1] = "López", etc.

Otros lenguajes de programación también existen listas.  Pero suelen diferenciar entre listas y arrays. Un array es una lista, pero tiene un número determinado de elementos y no se pueden añadir más. En python no se hace distinción. Si quieres añadir un elemento al array x, por ejemplo el elemento x[2] que quiero que valga "Pedro, Ruiz, Gómez, 7.5" haría x.append( "Pedro, Ruiz, Gómez, 7.5")

Para listar los elementos de la lista o array, en otros lenguajes es necesario un for. En python puedes usarlo también, pero también puedes hacer print(y)

Utiliza el fichero  10 alumnos para probar y lista en consola los nombres, las notas, etc.

https://drive.google.com/file/d/13Hm431OqSfc0BEVh8Q61t8OX1ZASDSlS/view?usp=drive_link 

https://drive.google.com/file/d/1DhhdRh9HFqa2qHHBHYQcUmUZhvgVKvUh/view?usp=drive_link 


Ejercicio 8 Calcula la nota media de los 200 alumnos del fichero 200alumnos del anterior enlace. Prueba antes con el fichero 10 alumnos.(Media de 10 alumnos 7,94, media de 200  es 4.8595)

Ejercicio 9. Haz un programa que escriba la máxima nota de los 200 alumnos. Prueba primero con el de 10. (Máxima de 10 es 9,5. Máxima de 200 es 9,9)

Hemos visto una sola manera de crear un array, con split. También podríamos haber hecho por ejemplo: compras = ['leche', 'pan', 'tomate'] 

Podemos simplemente decir x=[ ] y nos crea un array vacío que iremos llenando con append.

Si quiero recorrer todos los elementos de la lista e imprimirlos, puedo hacer dos cosas: 

for i en x:

print i

entonces i irá tomando todos los valores de la lista. Es es el tipo de cosas que hace python y no otros lenguajes. O puedo hacer lo siguiente otra cosa. Debo antes explicarte que la función len(x) me dice el número de elementos de la lista x.

for i in range(len(x))

print(x[i])

Lo cual sería más parecido a lo que se hace en otros lenguajes. Más bien lo que se haría es lo siguiente: 

for(i=0;i<len(x);i=i+1){

printx[i];

}

Utilizando un for, crea un array con las notas. Utilizando un for, recórrelo y busca el mayor. Haz ahora que el primer elemento del array sea ese número y mete el que estaba el primero en el puesto que estaba el mayor. Cuidado que puedes hacerlo mal: por ejemplo, si el mayor estaba en el puesto número 8, y valía 10 y haces lo siguiente: 

array[0]=array[8]

array[8]=array[0]

ahora array[0] vale 10, correcto, pero array[8] también vale 10, porque has machacado el valor de array[0] y has metido 10. La forma correcta es: 

a= array[0]

array[0]=array[8]

array[8]=a

Ahora para buscar el siguiente habría que empezar desde dos. O sea que debes hacer un bucle dentro de otro. Algo así

i varía desde el primero al penúltimo

j varía desde i hasta el último para encontrar el menor y ponerlo en i

Ejercicio 10 Haz un programa que escriba las notas de la lista de 200 alumnos por orden de mayor a menor

Ejercicio 11 Haz un programa que escriba los alumnos del la lista de 200, con sus notas,  ordenados por nota