Tiza Las materias del CBC
Practicar →

Pensamiento Computacional (090) · 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 →7 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.
Ejemplo resuelto

¿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    → se copia el valor de 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: se copió el valor que x tenía en ese momento. Que después x cambie no afecta a y.

Guardate esta idea, porque en la unidad 4 vas a ver que con listas pasa lo contrario: ahí y = x no copia nada, y tocar una cambia la otra. La diferencia entre valores simples y estructuras mutables 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.

Dónde se cae la mayoría

Hasta acá la explicación. La práctica es la otra mitad: 7 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é. Además trae una animación que muestra la idea en movimiento.

Practicar Variables y asignación →

Ver todos los temas de Pensamiento Computacional