Tiza Paso a paso
Practicar →

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.

Practicar este tema →8 ejercicios que te corrigen paso a paso · gratis, sin cuenta

La explicación

El signo igual no significa igual

edad = 20

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.

Por eso esta línea, que en matemática no tendría sentido, en programación es de lo más común:
contador = contador + 1
Se lee: tomá lo que vale contador, sumale 1, y guardá el resultado otra vez en contador. Si contador valía 5, ahora vale 6. Se puede abreviar 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 = 5
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:

a = 1
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:

aux = a
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:

Los dos comparten el mismo esqueleto y el mismo error: olvidarse de inicializarlos antes. Si escribís 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.

La otra consecuencia: una variable que nunca recibió un valor no existe, no vale cero ni vacío. Es la diferencia entre 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.
Un ejercicio resuelto, paso a paso

¿Qué imprime este programa? x = 5 · y = x · x = 10 · print(x, y)

Línea por línea:

x = 5    → x vale 5
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.

Guardate esta idea, porque en la unidad 4 vas a ver con listas algo que acá queda escondido: 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.

La misma tabla, con un acumulador. Tomemos ahora las notas 8, 6 y 10:
total = 0       → total 0
total += 8     → total 8
total += 6     → total 14
total += 10    → total 24
promedio = total / 3  → 8.0
Dos detalles que se preguntan. Primero: sin la línea 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.

Y uno del nivel del parcial

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:

                  a    b
inicio          2    3
a = a + b      5    3
b = a - b      5    2
a = a - b      3    2
imprime: 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:

después de a = a + b:  a vale (original_a + original_b)
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:

aux = a
a = b
b = aux

Y la forma en que se escribe en Python de verdad:

a, b = b, a

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

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

Ver todos los temas de Pensamiento Computacional