Contenidos | Anterior (2 Un primer programa) | Próximo (4 Cadenas)
Esta sección introduce los cálculos matemáticos.
Python tiene 4 tipos de números:
- Booleanos
- Enteros
- Punto flotante
- Complejos (con parte real y parte imaginaria)
Las variables booleanas se llaman así en honor al lógico inglés George Bool. Pueden tomar dos valores: True y False (verdadero y falso).
a = True
b = FalseInternamente, son evaluados como enteros con valores 1, 0.
c = 4 + True # 5
d = False
if d == 0:
print('d is False')No escribas código basado en esta convención. Sería bastante raro.
Representan números enteros (positivos y negativos) de cualquier magnitud:
a = 37
b = -299392993727716627377128481812241231Incluso se pueden especificar en diferentes bases:
c = 0x7fa8 # Hexadecimal
d = 0o253 # Octal
e = 0b10001111 # BinarioOperaciones usuales:
x + y Suma
x - y Resta
x * y Multiplicación
x / y División (da un float, no un int)
x // y División entera (da un int)
x % y Módulo (resto)
x ** y Potencia
abs(x) Valor absoluto
La unidad mínima de almacenamiento de una computadora es un bit, que puede valer 0 o 1. Los números, caracteres e incluso imágenes y sonido son almacenados en la máquina usando bits. Los números enteros positivos, en particular, suelen almacenarse mediante su representación binaria (o en base dos).
| Número | Representación binaria |
|---|---|
| 1 | 1 |
| 2 | 10 |
| 3 | 11 |
| 4 | 100 |
| 5 | 101 |
| 6 | 110 |
Hay algunas operaciones primitivas que se pueden hacer con los enteros a partir de su representación como bits:
x << n Desplazamiento de los bits a la izquierda
x >> n Desplazamiento de los bits a la derecha
x & y AND bit a bit.
x | y OR bit a bit.
x ^ y XOR bit a bit.
~x NOT bit a bit.Al desplazar a la izquierda, simplemente agregamos un cero en la última posición. Así, por ejemplo si corremos el 1 dos lugares a la izquierda obtenemos un 4:
>>> 1 << 2 # 1 << 2 -> 100
4
>>> 6 & 3 # 110 & 011 -> 010
2Al desplazar los bits de un número a la derecha un lugar, el último bit "se cae".
>>> 1 >> 1 # 1 -> 0
0
>>> 6 >> 1 # 110 -> 11
0Usá una notación con decimales o una notación científica para especificar un valor de tipo punto flotante:
a = 37.45
b = 4e5 # 4 x 10**5 o 400,000
c = -1.345e-10Los números de tipo floats son representados en la máquina como números de doble precisión usando la representación nativa del microprocesador IEEE 754.
Es el mismo tipo que los double en el lenguaje C (para los que conozcan).
Almacenan hasta 17 digitos con un exponente entre -308 to 308
Cuidado que la aritmética de los números de punto flotante no es exacta.
>>> a = 2.1 + 4.2
>>> a == 6.3
False
>>> a
6.300000000000001
>>>Esto no es un problema de Python, si no el resultado de la forma en que el hardware de nuestras computadoras almacena los números de punto flotante.
Operaciones usuales:
x + y Suma
x - y Resta
x * y Multiplicación
x / y Divición (da un float, no un int)
x // y División entera (da un float, pero con ceros luego del punto)
x % y Módulo (resto)
x ** y Potencia
abs(x) Valor absoluto
Estas son las mismas operaciones que con los enteros. Otra operaciones usuales se encuentran en el módulo math.
import math
a = math.sqrt(x)
b = math.sin(x)
c = math.cos(x)
d = math.tan(x)
e = math.log(x)El módulo math también tiene constantes (math.e, math.pi), entre otras cosas.
Las siguientes comparaciones (suelen llamarse operadores relacionales ya que expresan una relación entre dos elementos) funcionan con números:
x < y Menor que
x <= y Menor o igual que
x > y Mayor que
x >= y Mayor o igual que
x == y Igual a
x != y No igual a
Observá que el == se usa para comparar dos elementos mientras que el = se usa para asignar un valor a una variable. Son símbolos distintos que cumplen funciones diferentes.
Podés formar expresiones booleanas más complejas usando
and, or, not
Acá mostramos algunos ejemplos:
if b >= a and b <= c:
print('b está entre a y c')
if not (b < a or b > c):
print('b sigue estando entre a y c')El nombre de un tipo (de datos) puede ser usado para convertir valores:
a = int(x) # Convertir x a int
b = float(x) # Convertir x a floatProbalo.
>>> a = 3.14159
>>> int(a)
3
>>> b = '3.14159' # También funciona con cadenas que represetan números.
>>> float(b)
3.14159
>>>Cuidado: el separador decimal en Python es el punto, como en inglés, y no la coma del castellano. Así, el comando float(3,141592) da un "ValueError".
Recordatorio: Asumimos que estás trabajando en el subdirectorio /Work. Buscá el archivo hipoteca.py y hacé los ejercicios con un editor de texto en ese archivo. Ejecutalo desde la línea de comandos.
David solicitó un cŕedito a 30 años y a tasa fija para comprar una vivienda. Pidió $500,000 a la companía y acordó un pago mensual fijo de $2684.11.
El siguiente es un programa que calcula el monto total que pagará David a lo largo de los años:
# hipoteca.py
saldo = 500000.0
tasa = 0.05
pago_mensual = 2684.11
total_pagado = 0.0
while saldo > 0:
saldo = saldo * (1+tasa/12) - pago_mensual
total_pagado = total_pagado + pago_mensual
print('Total pagado', total_pagado)Copiá este código y correlo. Deberías obtener 966279.6 como respuesta.
Supongamos que David adelanta pagos extra de $1000/mes durante los primeros 12 meses de la hipoteca.
Modificá el programa para incorporar estos pagos extra y que imprima el monto total pagado junto con la cantidad de meses requeridos.
Cuando lo corras, este nuevo programa debería dar un pago total de 929965.62 en 342 meses.
Modificá tu programa de forma que la información sobre pagos extras sea incorporada de manera más versatil. Agregá las siguientes variables antes del ciclo:
pago_extra_mes_comienzo = 61
pago_extra_mes_fin = 108
pago_extra = 1000Hacé que el programa tenga en cuenta estas variables para calcular el total a pagar apropiadamente.
¿Cuánto pagaría David si agrega $1000 por mes durante cuatro años, comenzando en el sexto año de la hipoteca?
Modicá tu programa para que imprima una tabla mostrando el mes, el total pagado hasta el momento y el saldo restante. La salida debería verse aproximadamente así:
1 2684.11 499399.22
2 5368.22 498795.94
3 8052.33 498190.15
4 10736.44 497581.83
5 13420.55 496970.98
...
308 874705.88 3984.12
309 877389.99 1316.61
310 880074.1 -1362.02
Total pagado 880074.1
Meses 310Ya que estamos, corregí el código anterior de forma que el pago del último mes se ajuste a lo adeudado.
Asegurate de guardar el archivo hipoteca.py en esta última versión en tu directorio Work. Vamos a volver a trabar con él.
Las funciones int() y float() pueden usarse para convertir números. Por ejemplo,
>>> int("123")
123
>>> float("1.23")
1.23
>>>Con esto en mente, ¿podrías explicar el siguiente comportamiento?
>>> bool("False")
True
>>>Escribí un programa llamdo esfera.py en el dirctorio de trabajo que le pida al usuario que ingrese por teclado el radio r de una esfera y calcule e imprima el volumen de la misma. Sugerencia: recordar que el volúmen de una esfera es 4/3 πr^3.
Finalmente, ejecutá el programa desde la línea de comandos para responder ¿cuál es el volumen de una esfera de radio 6? Debería darte 904.7786842338603.
Contenidos | Anterior (2 Un primer programa) | Próximo (4 Cadenas)