</>waridocu

Python

Variables, tipos de datos y operadores

Cómo se crean variables en Python, qué tipos básicos existen, qué hacen los operadores y cómo leer datos del usuario con input().

pythonvariablestiposoperadoresinput

De dónde venimos

En ¿Qué es Python? escribiste esto:

pythonpython
nombre = "Ana"
print("Hola,", nombre)

Ahí quedó dicho que nombre es una variable y que Python infiere el tipo solo, sin que tú lo escribas. Pero quedaron preguntas abiertas: ¿qué tipos existen realmente?, ¿qué puedo hacer con ellos?, y sobre todo, ¿cómo consigo que el valor no esté fijo en el código sino que lo escriba la persona que usa el programa?

Esta página cierra ese hueco. Todo lo que viene después —decisiones, bucles, funciones— se apoya en entender bien qué guarda una variable y cómo se comparan valores entre sí.

Qué es una variable en Python

Una variable es un nombre que apunta a un valor guardado en memoria. Se crea en el mismo momento en que le asignas algo, con el signo =:

Ejemplo: crear variables sin declarar el tipopython
nombre = "Ana"
edad = 30
altura = 1.75
activo = True

No hay ninguna palabra antes del nombre. En C++ tendrías que escribir int edad = 30;, indicando el tipo y cerrando con punto y coma. En Python no existe ni lo uno ni lo otro: el intérprete mira el valor de la derecha y deduce el tipo por su cuenta. A eso se le llama tipado dinámico, el término que apareció en la página anterior.

Importante

“Sin declarar el tipo” no significa “sin tipo”. Cada valor en Python tiene un tipo bien definido, y ese tipo determina qué operaciones son válidas. La diferencia con C++ es solo quién lo decide y cuándo: en C++ lo escribes tú y se fija al compilar; en Python lo deduce el intérprete y puede cambiar durante la ejecución si reasignas la variable.

Puedes comprobar el tipo de cualquier valor con la función type():

Ejemplo: ver el tipo que Python infiriópython
nombre = "Ana"
edad = 30
altura = 1.75
activo = True

print(nombre, edad, altura, activo)
print(type(nombre), type(edad), type(altura), type(activo))

Guárdalo como tipos.py y ejecútalo:

bashbash
python tipos.py
texttext
Ana 30 1.75 True
<class 'str'> <class 'int'> <class 'float'> <class 'bool'>

type() no se usa mucho en programas reales, pero es una herramienta de diagnóstico excelente mientras aprendes: cuando algo no funciona como esperas, imprimir el tipo suele revelar el problema en un segundo.

Reglas para nombrar variables

  • Solo letras, números y guion bajo (_). No pueden empezar por un número.
  • Distinguen mayúsculas de minúsculas: edad y Edad son dos variables distintas.
  • Por convención se escriben en minúsculas con guiones bajos: nombre_completo, precio_total. A ese estilo se le llama snake_case y es el estándar en Python.
Tip

Elige nombres que digan qué guardan, no cómo se llaman las letras del alfabeto. precio_total se entiende dentro de seis meses; x2 no. El código se lee muchas más veces de las que se escribe.

Los tipos básicos

Estos son los cuatro tipos con los que vas a trabajar desde el primer día:

TipoGuardaEjemplo de valorCómo se escribe
intNúmeros enteros-7, 0, 42Sin comillas ni punto decimal
floatNúmeros con decimales3.14, -0.5, 1.0Con punto decimal (nunca coma)
boolVerdadero o falsoTrue, FalseCon mayúscula inicial
strTexto (cadenas)"Ana", 'hola'Entre comillas dobles o simples

Algunas aclaraciones que suelen morder:

  • str viene de string, el término inglés para una cadena de texto. En Python las comillas dobles "Ana" y las simples 'Ana' son equivalentes; elige una y sé consistente.
  • True y False van siempre con mayúscula inicial. Escribir true en minúscula produce un error, porque Python lo interpreta como el nombre de una variable que no existe.
  • 1.0 es un float, aunque no tenga parte decimal significativa. 1 es un int. No son el mismo tipo, aunque valgan lo mismo.
Advertencia

Los decimales se escriben con punto, no con coma: 1.75, nunca 1,75. Si escribes altura = 1,75, Python no da error: crea otra cosa (una tupla de dos números) y el problema aparece mucho después, cuando intentes hacer cuentas con esa variable. Es un error silencioso muy típico en países donde la coma decimal es lo habitual.

Convertir de un tipo a otro

Los nombres de los tipos también funcionan como funciones de conversión:

Ejemplo: convertir entre tipospython
texto = "42"
numero = int(texto)      # de str a int  -> 42
decimal = float(texto)   # de str a float -> 42.0
de_vuelta = str(numero)  # de int a str  -> "42"

print(numero + 8)
print(decimal + 8)
print(de_vuelta + "8")
texttext
50
50.0
428

Fíjate en la última línea: "42" + "8" da "428" y no 50, porque con dos cadenas de texto el operador + concatena (las pega una detrás de la otra) en vez de sumar. Esto no es un capricho: + hace cosas distintas según el tipo de sus operandos, y por eso conocer el tipo importa tanto.

Operadores aritméticos

Los operadores para hacer cuentas, con a = 7 y b = 2:

OperadorQué haceEjemploResultado
+Sumaa + b9
-Restaa - b5
*Multiplicacióna * b14
/Divisióna / b3.5
//División entera (trunca)a // b3
%Resto de la divisióna % b1
**Potenciaa ** b49
Nota

Si vienes de C++ o Java, aquí hay una diferencia importante a tu favor: en Python 7 / 2 da 3.5, no 3. El operador / siempre produce un float, incluso cuando la división es exacta (6 / 2 da 3.0, no 3). Si lo que quieres es la división entera clásica que descarta los decimales, ese es el operador //. Python te obliga a decir cuál de las dos quieres, en vez de decidir por ti según los tipos.

Los operadores de asignación compuesta abrevian “modifícate a ti misma”: total += 5 es exactamente lo mismo que total = total + 5. Existen +=, -=, *=, /= y compañía.

Advertencia

Python no tiene los operadores ++ ni -- que quizá conozcas de otros lenguajes. Para sumar uno se escribe contador += 1. Lo curioso es que contador++ no da un error claro de “no existe”: da un error de sintaxis a secas, y ++contador directamente funciona sin hacer nada útil (Python lo lee como “el positivo del positivo de contador”). Si tu contador no avanza, revisa esto.

Operadores de comparación

Comparar dos valores produce siempre un bool (True o False). Estos son los seis:

OperadorSignificadoEjemplo (a = 7, b = 2)Resultado
==Igual aa == bFalse
!=Distinto dea != bTrue
<Menor quea < bFalse
>Mayor quea > bTrue
<=Menor o igual quea <= bFalse
>=Mayor o igual quea >= bTrue
Advertencia

= asigna un valor, == compara dos valores. Son cosas completamente distintas y confundirlas es el error número uno de quien empieza. edad = 18 significa “guarda 18 en edad”; edad == 18 pregunta “¿edad vale 18?”. Verás la consecuencia práctica de esta confusión en la próxima página, cuando estas comparaciones pasen a decidir qué se ejecuta.

Combinar condiciones: and, or y not

Para exigir varias condiciones a la vez, Python usa palabras en vez de símbolos:

  • and — verdadero solo si ambas condiciones lo son.
  • or — verdadero si al menos una lo es.
  • not — invierte el resultado.
Ejemplo: combinar comparacionespython
edad = 20
tiene_entrada = True

print(edad >= 18 and tiene_entrada)   # True: se cumplen las dos
print(edad < 18 or tiene_entrada)     # True: basta con que se cumpla una
print(not tiene_entrada)              # False: invierte el valor

Donde C++ escribe &&, || y !, Python escribe and, or y not. Se lee casi como una frase en inglés, y esa es exactamente la intención del diseño del lenguaje.

Leer datos del usuario con input()

Hasta ahora todos los valores estaban escritos a mano dentro del archivo. La función input() detiene el programa, espera a que la persona escriba algo y pulse Enter, y devuelve lo escrito:

Ejemplo: saludar usando un nombre escrito por el usuariopython
nombre = input("¿Cómo te llamas? ")
print("Hola,", nombre)

El texto que le pasas a input() entre paréntesis es el mensaje que aparece en pantalla antes de esperar. Es opcional, pero sin él la persona se queda mirando una terminal en blanco sin saber qué se le pide.

Advertencia

input() devuelve siempre un str, sin excepción. Aunque el usuario escriba 30, lo que llega a tu variable es el texto "30", no el número 30. Si intentas hacer cuentas directamente, obtienes un error: input("Edad: ") + 1 falla con TypeError: can only concatenate str (not "int") to str. Y peor aún, input("Edad: ") * 3 no falla: repite el texto tres veces y te devuelve "303030". Para trabajar con el valor como número tienes que convertirlo tú con int() o float().

La forma correcta es envolver el input() en la conversión que necesites:

Ejemplo: leer un número de verdad, no un textopython
edad = int(input("¿Cuántos años tienes? "))
print("El año que viene tendrás", edad + 1)

Usa int() cuando esperes un número entero y float() cuando admitas decimales.

Nota

Si el usuario escribe algo que no es un número (hola, o deja el campo vacío), int() lanza un error y el programa se detiene con un mensaje ValueError. Manejar ese caso con elegancia requiere validar la entrada o capturar el error, dos temas que vienen más adelante. Por ahora basta con que sepas por qué se rompe.

Ejemplo completo: promedio de dos notas

Este programa junta todo lo de esta página: variables, conversión de tipos, operadores aritméticos y de comparación, y entrada del usuario.

Ejemplo: calcular el promedio de dos notas leídas por tecladopython
nombre = input("¿Cómo te llamas? ")

nota1 = float(input("Ingresa la primera nota: "))
nota2 = float(input("Ingresa la segunda nota: "))

promedio = (nota1 + nota2) / 2

print("Hola,", nombre)
print("Tu promedio es:", promedio)
print("¿Aprobado?", promedio >= 4.0)

Guárdalo como promedio.py y ejecútalo:

bashbash
python promedio.py
texttext
¿Cómo te llamas? Ana
Ingresa la primera nota: 5.5
Ingresa la segunda nota: 3.5
Hola, Ana
Tu promedio es: 4.5
¿Aprobado? True

Dos detalles que vale la pena mirar de cerca:

  • float() envuelve al input() en las dos notas, porque sin esa conversión nota1 + nota2 habría pegado los textos ("5.53.5") en lugar de sumarlos.
  • La última línea imprime True, el resultado crudo de la comparación. El programa calcula si está aprobado, pero todavía no puede hacer algo distinto según el resultado: siempre ejecuta las mismas tres líneas. Esa es justamente la limitación que resuelve la próxima página.
Advertencia

Los float no son exactos: representan los decimales en binario y algunos números no caben con precisión infinita. Por eso 0.1 + 0.2 imprime 0.30000000000000004 y 0.1 + 0.2 == 0.3 resulta False. No es un bug de Python, es cómo funcionan los decimales en cualquier lenguaje. La consecuencia práctica: nunca compares dos float con ==; comprueba que la diferencia entre ambos sea muy pequeña, o usa el tipo Decimal si trabajas con dinero.

Siguiente paso

Ya sabes guardar valores, operarlos y pedírselos al usuario, pero el programa sigue ejecutándose siempre de arriba a abajo, línea por línea, sin importar lo que valgan esas variables. Para que decida y repita trabajo, continúa con Control de flujo: if, for y while.