Ej. 29 : Empezando con IF …

Éste es el código de Python con el que empezaré con la sentencia IF (If clause).

Ej. 29 - Código editor

Por el atasco comentado anteriormente que todavía no he solucionado, lo ejecuto en el terminal.

Ej. 29 - TerminalParece todo correcto. Muy sencillo.

ALGUNAS PREGUNTAS

P: ¿Qué significa *=?

R: El código x += 1 es lo mismo que escribir x = x +1 , pero escribiendo menos. Puedo llamarlo el operador «incrementar en». De la misma manera funciona -= y otras expresiones que aprenderemos más adelante.

P: ¿Por qué el código que está debajo de la sentencia if está identado con 4 espacios? ¿Qué ocurre si no lo identamos?

R: ¿Qué clase de mala traducción es esa? Esa palabra no existe en español. No entiendo lo que quieres decir…

P: ¿¿No sabes lo que es identar en programación??

R: No

P: ¿Quién es el profesor aquí?

P: ¿Qué ocurre si cambio los valores iniciales de las variables people, cats y dogs?

R: Pues vamos a comprobarlo…

Con…

Ej. 29 - Terminal cambio

Resulta…

Ej. 29 - Código editor cambiado

En éste caso hay una Apocalipsis Mascotil y habrá muchos más gatos y perros que personas por lo que el mundo estará lleno de babas y abocado al fracaso… XD

Ej. 28 : Practicando con booleanos…

Las combinaciones lógicas que aprendí en el último ejercicio se llaman expresiones booleanas. La lógica booleana se utiliza en todas partes dentro de la programación. Conocerlas bien es como conocer las escalas en música.

Tengo que reconocer que tengo algunas dudas con algunos que iré aclarando según avance, ya que yo no he memorizado nada. Entender y razonar.

En éste ejercicio haré las primeras pruebas en Python con las tablas de lógica.

Primero ecribiré cual creo que es la respuesta a modo de borrador, y luego iniciaré Python en el terminal y las escribiré para confirmar mi respuestas.

Pregunta Solución (mía) Solución (Python)
1 True and true True  True
2 False and True False  False
3 1 == 1 and 2 == 1 False  False
4 «test» == «test» True  True
5 1 == 1 or  2 != 1 True  True
6 True and  1 == 1 True  True
7 False and  0 != 0 False  False
8 True or 1==1 True  True
9 «tet» == «testing» False  False
10 1 ! = 0  and  2 == 1 False  False
11 «test» != «testing» True  True
12 «test» == 1 False  False
13 Not (True and False) Mmm True??  True
14 Not ( 1 == 1 and 0 != 1) False?  False
15 Not (10 == 1 or 1000 == 1000) True?  FALSE
16 Not ( 1 != 10 or 3 == 4) False??  FALSE
17 Not ( «testing» == «testing» and «Palomita» == «Buena chica») False????  TRUE
18 1 == 1 and not ( «testing» == 1 or 1 == 0 ) True!  True
19 «chunky» == «bacon» and not ( 3 == 4 or 3 == 3 ) False  False
20 3 == 3 and not ( «testing» == «testing» or «Python» == «Fun» ) False?  False

Un truco para ayudarme a determinar los más complicados que hay al final. Cada vez que vea expresiones lógicas booleanas, puedo solucionarlas fácilmente con éste proceso:

  1. Encontrar cada símbolo de igualdad (== o !=) y reemplazarlo con su resultado (True or False).
  2. Encontrar cada and/or dentro de los paréntesis y resolver su valor (True or False).
  3. Encontrar cada not e invertir su valor booleano.
  4. Encontrar el resto de and/or y resolverlos.
  5. Cuando todo essté hecho, debería de tener un valor True or False.

Lo demostraré con la expresión a resolver nº 20:

3 == 3 and not ( «testing» == «testing» or «Python» == «Fun» )

  1. Resuelvo cada comparación de igualdad:
    • 3 != 4 es True: True and not ( «testing» == «testing» or «Python» == «Python» )
  2. Encuentro cada and/or que haya dentro del paréntesis:
    • (True or True) es True: True and not (True)
  3. Encuentro cada not e invierto el valor:
    • not (True) es False: True and False
  4. Encuentro el resto de and/or y lo resuelvo.
    • True and False es False

Así, logramos saber que el resultado es False.

En el Shell de Python, escribo:

Ej. 28 - Booleanos en Python

Con ésto puedo practicar, pero lo tengo bastante claro ya…

Corrijo…

Ej. 28 - Booleanos en Python soluciones 1Ej. 28 - Booleanos en Python soluciones 2

Ahora si lo tengo claro.

Los dos únicos puntos que me cuesta entender un poco más son:

  1. TRUE OR FALSE y viceversa…..QUE ES TRUE
  2. FALSE AND FALSE………………..QUE ES FALSE

Pero sobre todo el punto 1.

ALGUNAS PREGUNTAS+

P: ¿Por qué «test» and «test» tiene como resultado «test»

1 and 1 tiene como resultado 1 en lugar de True?

R: Python y otros lenguajes devuelven como resultado de las expresiones booleanas uno de los operandos en lugar de True o False. Ésto significa que si hacemos False and 1, obtendrá el primer operando (False), pero si hacemos True and 1, entoces obtenemos el segundo (1).

Lo hago en pantalla en el Shell de Python:

Ej. 28 - Prueba booleanos

P: ¿Existe algún atajo?

R: Si. Cualquier expresión con and que tiene un False, es inmediatamnte False, así que puedo parar ahí. Cualquier expresión con or que tien un True es inmediatamente True. Pero es importante procesar toda la expresión porque más adelante me será útil.

Ej. 27 : Razonando la lógica…

Hoy es el día en el que empiezo a aprender lógica. Hasta el momento, he hecho todo lo que podía hacer, como leer y escribir ficheros en el Terminal, y he aprendido bastante sobre las capacidades matemáticas de Python.

A partir de ahora, aprenderé lógica. La lógica básica más simple que realmente funciona en los programas, y que los programadores reales necesitan a diario.

Hay quien aconseja dedicar un tiempo considerable de memorización de las tablas que adjunto a continuación.

Personalmente tengo una opinión bastante sólida sobre que eso es una sobrerana tontería. ¡Y más tratándose de lógica!

De dedicarle un tiempo, considero mucho más útil, invertirlo en entenderla y razonarla, precisamente. Así es imposible olvidarla. Y luego utilizarla. En eso la repetición, el ejercicio y el trabajo constante es donde adquieren todo su sentido.

Dicho ésto, aquí tengo los siguientes términos (caracteres y frases) para determinar si algo es True (V) o False (F). La lógica en un ordenador consiste en saber si una combinación de esos caracteres y una variable es «True» en un punto del programa.

  • AND
  • OR
  • NOT
  • != (distinto)
  • == (igual)
  • >= (mayor o igual que)
  • <= (menor o igual que)
  • TRUE
  • FALSE

Bien. Todos ellos se combinan de la siguiente manera.

EXPRESIÓN ¿TRUE OR FALSE?
NOT FALSE TRUE
NOR TRUE FALSE
TRUE OR FALSE TRUE?
TRUE OR TRUE TRUE
FALSE OR TRUE TRUE?
FALSE OR FALSE FALSE??
TRUE AND FALSE FALSE
TRUE AND TRUE TRUE
FALSE AND TRUE FALSE
FALSE AND FALSE FALSE
NOT (TRUE OR FALSE) FALSE
NOT ( TRUE OR TRUE ) FALSE
NOT ( FALSE OR TRUE ) TRUE
NOT ( FALSE AND FALSE ) TRUE
1 != 0 TRUE
1 != 1 FALSE
0 != 1 TRUE
0 != 0 FALSE
1 == 0 FALSE
1 == 1 TRUE
0 == 1 FALSE
0 == 0 TRUE

¡¡Vamos a practicar!!

Ej. 26 : Corrigiendo errores…

He llegado al ecuador de éste nivel 0 de Python. A partir de aquí es donde las cosas se empiezan a poner interesantes. Aprenderé lógica y seré capaz de hacer cosas útiles, como tomar decisiones.

Antes de continuar, voy a hacer una prueba. Voy a solucionar errores de código de 3 tipos:

  • La mayoría de los errores son cosas de las que Phython me avisará.
  • Otros son errores matemáticos que debo encontrar.
  • También habrá errores de formato o faltas de ortografía en las cadenas.

Todos éstos errores son muy comunes. Mi trabajo será corregir éste fichero. Intentaré usar todas mis «habilidades» para mejorarlo. Primero lo analizaré. Arreglaré cada error y e intentaré continuar hasta que el código se ejecute bien. Ésta vez no consultaré ningún tipo de ayuda, y si me quedo atascada, me tomo un descanso y retomo más tarde (que es lo que me ha pasado en el ejercicio anterior).

El fichero es el siguiente:Ej. 26 - Editor 1Ej. 26 - Editor 2Ej. 26 - Editor 3Éstas son algunas cosas que he hecho…

Ej. 26 - Errores en Terminal 1 corregidos

Ej. 26 - Errores en Terminal 2 corregidosEj. 26 - Errores en Terminal 3 corre

Hay cosas que no veo claras porque las arrastro del ejercicio anterior, que no he ejecutado todavía. Los dos ejercicios anteriores están en éste. Así que dejo el ejercicio en éste punto, para retomarlo más adelante y avanzar con el siguiente post.

A por el 27!!

Ej. 25 : Practicando+…

Sigo practicando con variables y funciones.

Éste ejercicio debería de resultarme sencillo para modificarlo, analizarlo y comprenderlo…

Sin embargo, será un poco diferente. No lo ejecutaré. En vez de eso, lo importaré a Python y ejecutaré las funciones yo misma (DIY).

Ej. 25 Editor

En primer lugar tengo que ejecutar el código como hago normalmente con pyton ex25.py para encontrar cualquier error que haya podido cometer.

Una vez encontrados y solucionados todos los errores, continúo.

Ej. 24 : Practicando…

«Practice makes you perfect»

O eso dicen.

Vamos allá.

Ej. 24 Programa Ejecutando en el terminal obtengo…

Ej. 24 Terminal

ALGUNAS PREGUNTAS

P: Si no he entendido mal, ¿por qué llama a una variable jelly_beans y más tarde la llama beans?

R: Ésto es parte de cómo funciona una función, valga la redundancia. Hay que recordar que dentro de la función la variable es temporal y cuando es devuelta, puede ser asignada a una variable. Simplemente estoy creando una nueva variable llamada beans para almacenar el valor devuelto por return.

P: Mmmm.

Ej. 23 : Leyendo algo de código «real»…

Aunque ésto bien podría colgarlo al final de los ejercicios que voy a hacer, creo que también es interesante ir planteándolo aquí.

Tengo que ir empezando a leer código en Internet. Al principio puedo desmotivarme un poco, pero hay que ir a por ello. Tengo buenos guías. Son proyectos reales, pero NO hay que entenderlo todo. Obviamente.

Los objetivos son:

  1. Encontrar código Python que me pueda ser útil.
  2. Leer código y buscar archivos.
  3. Intentar entender el código que encuentre.

En éstos momentos, no tengo las habilidades para entenderlo, pero no pasa nada. Don’t give up!!!

Voy de exploración, a ver que me encuentro.

Ésta es mi hoja de ruta:

  1. Voy a…
    1. bitbucket.org
    2. github.com
    3. launchpad.net … y busco Python…
  2. Evito cualquier proyecto que mencione Python 3 para evitar confusiones…
  3. Escojo un proyecto aleatorio y hago clic en él…
  4. Hago clic en la pestaña Source y busco en la lista de archivos y directorios hasta encontrar un archivo.py (pero que no sea setup.py)
  5. Comienzo a leer desde la parte superior tomando notas sobre lo que creo que hago…ejem.
  6. Si encuentro alguna palabra o símbolo raruno pero que me parezca interesante, los anoto, para buscarlo luego…

El ejercicio consiste en usar todo lo que he ido haciendo hasta el momento y ver cómo me defiendo. Primero lo leo por encima (lectura vertical, la llaman), y luego al detalle.

That’s all!!

MÁS SITIOS!!!

(Aquí iré colgando mis investigaciones)

Ej. 22 : Repasando…

En éste post y en el siguiente no habrá ningún código. Voy a repasar todo lo aprendido para coger con fuerzas lo que viene.

Como he ido diciendo en muchos ejercicios, tengo cosas pendientes que voy a ir dejando colgadas aquí o en los propios post pasados. Por ejemplo, comentar los programas con más detalle, explicar línea a línea, es el mejor ejercicio del mundo. Me compromete de verdad para saber si lo he entendido e indica en qué punto estoy.

Internet es El Recurso, así que si no tengo la suerte de poder preguntar a nadie (que la tengo) Google lo sabe.

De hecho, debería ser el primer recurso, antes de rendirse y preguntar.

Hacerse listas, esquemas y todo lo que apetezca, será bienvenido porque personalizar un método de aprendizaje es lo más creativo y fantástico que hay. Es motivación para seguir avanzando.

🙂

Continúo.

(Iré colgando resúmenes de lo anterior aquí)

Ej. 21 : Devolviendo valores con funciones…

He estado utilizando el carácter = para asignar valores a las variables, como números o cadenas. Ahora voy a ver cómo utilizar = y una nueva palabra de Python, return, para asignar a las variables un valor de una función.

Habrá una cosa a la que prestar mucha atención, pero antes de nada escribo el programa.

Ej. 21 ProgramaComo se ve, estoy haciendo mis propias funciones matemáticas para sumar, restar, multiplicar y dividir. Lo importante es fijarse en la última línea donde escribo return a + b . Ésto hace lo siguiente:

  1. La función es llamada con dos parámetros: a y b.
  2. Muestro en pantalla lo que hace la función, en éste caso sumando.
  3. Luego le digo a Python que devuelva la suma de a + b.
  4. Python suma los dos números. Entonces la función termina. Cualquier línea de código que llame a ésta función podrá asignar el resultado de la suma a + b a una variable.

La penúltima línea me encanta. Es una función dentro de otra función, dentro de otra…o más formalmente:

Estoy tomando el valor devuelto de una función y usándolo como el parámetro o argumento de otra función. Lo hago de manera encadenada, así creo una especie de fórmula usando la funciones. Se ve muy raro, pero si se ejecuto el código, se ve el resultado….

Ej.21 TerminalALGUNAS PREGUNTAS

P: ¿Por qué Python muestra la fórmula o las funciones «hacia atrás»?

R: En realidad no es hacia atrás, es «de dentro hacia fuera». Si se analiza la función como fórmulas separadas y se llama a las funciones, se ve como funciona.

P: ¿Cómo puedo usar raw_input() para introducir mis propios valores?

R: ¿Recuerdas int(raw_input())? El problema es que con eso no podemos tomar valores en punto flotante, así que usamos float (raw_input()).

ALGO+…

Por curiosidad, voy a ver que dice pydoc de return en el terminal…

Ej. 21 Pydoc - Return

Bueno y breve…

x2 B

Ej. 20 : Trabajando con funciones y ficheros…

Las funciones y los ficheros pueden trabajar juntos para hacer cosas útiles como ésta:

Ej.20 - Programa Ej.20 - Terminal

Éste ejercicicio me ha gustado mucho.

Es interesante ver cómo podemos insertar contenido del fichero txt con frases del programa.

Al principio no entendía mucho porque lo estaba mirando sin la ejecución y estaba pensando sólo en abstracto, olvidándome de que va incorporando las líneas del texto. De eso va el ejercicio, de cruzar ambos ficheros.

ALGUNAS PREGUNTAS

P: ¿Qué es f en print_all y otras funciones?

R: La f es una variable como las usadas en el Ejercicio 18, aunque en éste caso es un archivo. En Python, un fichero es como un reproductor de DVD. Tiene una «cabeza lectora» para poder ir leyendo y saltando a diferentes posiciones del fichero. Cada vez que hago f.seek(0)  estoy moviéndome al inicio del fichero. Cada vez que hago f.readline(), estoy leyendo una línea del fichero y moviendo la cabeza lectora a la derecha de \n, que es el final de ésa línea (salto de línea). Lo seguiré explicando cuando avance.

P: ¿Por qué hay líneas en blanco en el fichero?

R: Buena pregunta. Yo también me la hice al principio. Como hice en el ejercicio 10 y el ejercicio 16, la función readline() devuelve el \n que hay al final de cada línea. Ésto significa que estamos mostrando en pantalla éste carácter (salto de línea), además del \n propio de print. Para que no ocurra hay que añadir el carácter , (coma) al final de print, así no motrará en pantalla su propio \n.

P: Mmmm. Entonces, ¿por qué seek(0) no establece el valor de current_line a cero?

R: En primer lugar, seek(0) es una función que trabaja a nivel de bytes, no líneas. Así que con eso saltamos al byte 0 (el primer byte) del fichero. En segundo lugar, current_line es sólo una variable y no está conectada de ninguna forma con el fichero. Hay que incrementar el valor manualmente.

P: Pero entonces, ¿cómo sabe readline() dónde está cada línea?

R: Dentro de readline() hay un cógigo que escanea cada byte del fichero hasta encontrar el carácter /n, entonces para de leer y devuelve lo que ha encontrado hasta ahí. El fichero f es responsable de mantener la posición actual en el fichero después de cada llamada a readline().

P: ¿Qué es +=?

R: Es un tipo de contracción de los operadores. Por ejemplo, decir que x += y es decir lo mismo que x = x + y.

En éste caso podríamos escribir: current_line += 1  que sería lo mismo que decir current_line = current_line + 1

Con todo lo anterior, ahora si, comento el código.

Ej.20 - Programa comentado