Pensamiento Computacional · Unidad 2 — Datos, expresiones y funciones
Variables y asignación
Una variable es un nombre pegado a un valor. El signo = no compara: guarda. Y se ejecuta de derecha a izquierda.
La explicación
El signo igual no significa igual
Esto no dice "edad es igual a 20": dice guardá el 20 y llamalo edad. Es una orden, y se ejecuta de derecha a izquierda: primero se calcula lo de la derecha, después se guarda.
contador += 1.
Reasignar
Una variable puede cambiar de valor cuantas veces quieras. Vale lo último que se le asignó, no lo que está escrito más arriba en el archivo:
x = 20
print(x) → 20
Cómo nombrar
Las reglas de Python: empiezan con letra o guión bajo, sin espacios, distinguen mayúsculas
(edad y Edad son dos variables distintas), y no pueden ser palabras
reservadas como if o for.
La regla que importa de verdad es otra: el nombre tiene que decir qué guarda.
x sirve para tres líneas; promedio_notas sirve para siempre. La
convención en Python es minúsculas con guión bajo.
Intercambiar dos valores
Un clásico que expone si entendiste la asignación. Esto no funciona:
b = 2
a = b # a ahora vale 2... y el 1 se perdió
b = a # b vale 2. Los dos valen 2.
Hace falta un lugar donde dejar el valor mientras tanto:
a = b
b = aux
En Python, además, se puede hacer directo: a, b = b, a.
Contadores y acumuladores
Hay dos usos de variable = variable + algo que aparecen en casi todos los programas de la materia, y conviene reconocerlos por nombre porque después se usan adentro de los ciclos:
- Un contador cuenta cuántas veces pasó algo. Arranca en 0 y hace
+= 1. - Un acumulador junta una suma. Arranca en 0 y hace
+= el valor de turno.
total = total + 4 sin haber puesto total = 0 primero, Python corta con NameError: name 'total' is not defined, porque para leer lo de la derecha la variable ya tiene que existir. Inicializar en 0 para sumar; en 1 si vas a multiplicar, porque el 0 se comería todo.
El nombre no es el valor
Conviene pensarlo como una etiqueta pegada a un valor y no como una caja que lo contiene. Cuando escribís y = x no se copia ninguna caja: quedan dos etiquetas sobre lo mismo. Con números eso no se nota nunca, porque la única forma de "cambiar" un número es reasignar la etiqueta a otro. Con listas sí se nota, y muchísimo — es todo el tema 4.2.
NameError (nunca la definiste, o la escribiste distinto: promedio contra Promedio) y un valor inesperado (existe, pero le quedó otra cosa). El primero se arregla mirando dónde se define; el segundo, imprimiéndola antes de usarla.
¿Qué imprime este programa? x = 5 · y = x · x = 10 · print(x, y)
Línea por línea:
y = x → y queda pegada al mismo 5 al que apunta x: y vale 5
x = 10 → x pasa a valer 10
print(x, y) → 10 5
Por qué y sigue valiendo 5. En la línea 2 no quedó ningún vínculo entre
x e y: y quedó pegada al valor que x tenía
en ese momento, no a la variable x. La línea 3 no le hace nada al 5: mueve
la etiqueta x a un 10. y se queda donde estaba.
y = x hace exactamente lo mismo —dos etiquetas sobre el mismo valor—,
pero una lista sí se puede modificar en el lugar, y entonces tocar una cambia la otra.
Lo que cambia no es la asignación: es que al 5 no se le puede hacer nada y a la lista sí.
Esa diferencia es de lo que más se pregunta.
El control: ante cualquier duda, andá línea por línea anotando qué vale cada variable. Es lo que muestra la animación de arriba, y es lo que conviene hacer en el parcial.
total += 8 → total 8
total += 6 → total 14
total += 10 → total 24
promedio = total / 3 → 8.0
total = 0 el programa
no arranca, porque la segunda línea necesita leer total para poder sumarle.
Segundo: el promedio da 8.0 y no 8, porque / siempre
devuelve un float aunque la división sea exacta.
Y el control de esta cuenta es el de siempre: la suma de las tres notas tiene que dar el total (8 + 6 + 10 = 24 ✓) y el promedio tiene que caer entre la nota más baja y la más alta (6 ≤ 8 ≤ 10 ✓). Si un promedio se te va fuera de ese rango, el error está en el acumulador.
Decir qué imprime este programa y para qué sirve: a = 2 · b = 3 · a = a + b · b = a - b · a = a - b · print(a, b)
Se sigue paso a paso, anotando el valor de las dos variables después de cada línea. Esa tabla es la respuesta, no el resultado final:
inicio 2 3
a = a + b 5 3
b = a - b 5 2
a = a - b 3 2
Para qué sirve: intercambia los valores de las dos variables sin usar una tercera. Empezó con (2, 3) y terminó con (3, 2).
Cómo funciona, línea por línea. La clave está en que después del primer paso, a guarda la suma de los dos, y esa suma alcanza para recuperar cualquiera de los originales:
b = a - b: (a+b) - b = original_a → b ya tiene el valor viejo de a
a = a - b: (a+b) - original_a = original_b → a queda con el de b
El paso decisivo es el segundo, y el orden no se puede cambiar: si hicieras primero a = a - b, la suma se pierde y no hay forma de recuperar los originales.
La versión de siempre, con variable auxiliar:
a = b
b = aux
Y la forma en que se escribe en Python de verdad:
Python arma primero el par de la derecha con los valores actuales y recién después lo reparte. Por eso funciona en una línea y no hace falta ningún truco.
Cuándo conviene el truco de las sumas. Hoy, prácticamente nunca: se usaba cuando la memoria era carísima y ahorrar una variable importaba. Aparece en los parciales porque obliga a seguir la ejecución paso a paso, que es la habilidad que se está evaluando.
Y tiene un problema real: con números muy grandes, la suma intermedia puede desbordar en lenguajes con enteros de tamaño fijo. En Python no pasa, pero es la razón por la que el truco se dejó de usar.
Dónde se pierde el punto: contestar "2 3" porque a arrancó en 2 y b en 3. Cada línea reasigna, y hay que arrastrar los valores nuevos: la cuarta línea usa el a que valía 5, no el que valía 2.
Dónde se cae la mayoría
- Leer = como comparación. Para comparar se usa ==, que es otra cosa.
- Creer que una variable vale lo que dice la línea de más arriba, en vez de la última que se ejecutó.
- Intercambiar dos valores sin variable auxiliar, y perder uno de los dos.
Hasta acá la explicación. La práctica es la otra mitad: 8 ejercicios de este tema, en cuatro niveles, que no te dicen sólo si está bien al final sino que te corrigen en cada paso y te explican por qué. Y uno para escribir el programa vos, que se prueba ejecutándolo en Python ahí mismo, en el navegador. Además trae una animación que muestra la idea en movimiento.
Practicar Variables y asignación →Los otros temas de la unidad 2
Datos, expresiones y funciones