Memoria - johncroth/pythonEd2024 GitHub Wiki

Una computadora contiene una cierta cantidad de memoria. Los programas utilizan esta memoria para hacer su trabajo mientras se ejecutan. En Python, es sencillo almacenar cosas en parte de esta memoria y leerlas nuevamente más tarde.

Ya hemos visto un ejemplo, la variable de bucle que almacena el número de la iteración actual a través de un bucle: Guarde y ejecute este programa como memoria_a.py:

for i in range(0,5):
    print( "El valor de la variable de bucle es", i )

En el bucle for, Python reserva una pequeña porción de memoria bajo el nombre de la variable del bucle i y la actualiza con el número de veces que pasa por el bucle. Las declaraciones print leen el valor almacenado en esta ubicación y construyen y muestra un mensaje de ese valor.

Tu propias variables

Para poner algo en la memoria, crea un nombre para una variable y "almacena" un valor en ella usando el signo =. Por ejemplo, guarde y ejecute el siguiente programa en memoria_b.py:

nombre_del_producto = "Mangos"
precio = 10
print( "El nombre del producto es", nombre_del_producto, "y el precio es", precio)

Aquí, nombre_del_producto es un nombre que hace referencia a una determinada ubicación en la memoria de la computadora, y Puedes almacenar cualquier valor que desees en esta ubicación. La primera línea almacena una cadena (de letras) "Mangos" en este lugar. Asimismo, precio es un nombre que hace referencia a un ubicación determinada y diferente en la memoria de la computadora. La segunda línea almacena el valor "10" en esta ubicación.

La tercera línea imprime un mensaje, pero al hacerlo busca los valores que se almacenaron en estas ubicaciones. Nosotros Podemos ver esto un poco más claro si cambiamos los valores:

nombre_del_producto = "Mangos"
precio = 10
print( "El nombre del producto es", nombre_del_producto, "y el precio es", precio)
nombre_del_producto = "Chirimoya"
precio = 12
print( "El nombre del producto es", nombre_del_producto, "y el precio es", precio)

Verás:

El nombre del producto es Mangos y el precio es 10
El nombre del producto es Chrimioya y el precio es 12

Las líneas que imprime el programa son diferentes, aunque las dos declaraciones print son idénticas, porque cada vez que la declaración print busca los valores almacenados en la memoria de la computadora. Líneas 4 y 5 ponen nuevos valores en lugar de los antiguos almacenados en esos lugares de la memoria.

Si bien es importante comprender lo que está sucediendo, cambiar el valor de una variable como el anterior suele resultar confuso, y es mejor introducir un nombre diferente. Pero es importante en ciertos cálculos, como sigue:

Variables del acumulador

Podemos aprovechar esta capacidad de actualizar los valores de las variables para hacer algunos cálculos. Por ejemplo, ¿cuál es la suma de todos los números entre 0 y 5? Bueno, es 5 + 4 + 3 + 2 + 1 + 0 que es, um, 15. (Guarde y ejecute lo siguiente como memoria_c.py)

suma = 0
for i in range(0,6):
    suma = suma + i
print( "La suma es", suma )

(Recuerde que rango(0,6) no incluye 6.) Lo más impresionante es que podemos sumar todos los números entre 0 y 100, solo modificando el rango en memoria_c.py:

suma = 0
for i in range(0,101):
    suma = suma + i
print( "La suma es", suma )

Ejercicios

  1. A. Escriba un programa que use un bucle for para calcular 7! (digamos "factorial 7") que sea simplemente 1 * 2 * 3 * 4 * 5 * 6 * 7. (El la respuesta correcta es 5040.) Los "factoriales" como este son importantes en estadística.

    B. Cambie el programa para calcular 21!, que es 1 * 2 * ... * 20 * 21. (La respuesta correcta tiene 20 dígitos)

  2. Amortización del préstamo. Cuando alguien pide dinero prestado (Por ejemplo 100000 soles) existe un acuerdo de que el prestamista recibirá intereses (por ejemplo, 4% anual, que se acumula cada mes) y el prestatario pagará una cantidad fija (por ejemplo, 2000 soles) cada mes. Cada mes el saldo del préstamo disminuye una determinada cantidad. El siguiente programa hace esto cálculo. Guárdelo como memoria_2.py y ejecútelo, luego responda las siguientes preguntas y realice las modificaciones solicitadas.

    prestado = 100000
    pagado_mensual = 2000
    tasa_anual = .04
    tasa_mensual = tasa_anual / 12
    
    saldo = prestado
    
    for i in range(1,13):
        saldo = saldo + saldo * tasa_mensual - pagado_mensual
        print( "Despues mes", i, "el saldo es", saldo )
    

    A. Confirme mediante un cálculo directo que las 2 primeras cantidades de la salida son correctas. Es decir, del saldo original se suma .04/12 = .0033 por ciento del saldo y se resta el pago mensual de 2000 soles. Luego, repita esto con el nuevo equilibrio.

    B. ¿Cuál es el saldo después de 1 año (es decir, 12 meses)?

    C. Modifique el programa para mostrar el saldo después de 2 años. ¿El préstamo se cancela por completo después de 2 años?

    D. Modifique el programa para mostrar el saldo después de 5 años. ¿El préstamo está completamente cancelado después de este período de tiempo? Después exactamente ¿En cuántos meses se liquida completamente el préstamo? (¿Cómo aparece esto en el resultado?)

    E. Supongamos ahora que el pago mensual fuera 2500 en lugar de 2000. Modifique el programa para reflejar esta diferencia y ejecútelo. ¿Después de cuántos meses se liquida el préstamo?

    F. Aún utilizando un pago mensual de 2500, ¿qué pasaría si la tasa de interés fuera del 3 por ciento en lugar del 4 por ciento? ¿Después de cuántos meses se liquida la carga?

    G. ¿Qué pasa si no hubiera intereses (es decir, una tasa del 0 por ciento)? ¿Después de cuántos meses se liquida el préstamo? Hay una explicación sencilla de la respuesta en este caso: ¿qué es?

  3. Supongamos que depositas 10000 en una cuenta bancaria que paga un 4% de interés anual "no compuesto." Entonces, podemos usar la calculacion muy basica: al final de un año, el saldo sería de 10400 = 10000 + 10000 * 0.04.

    A. Realice el siguiente cálculo a mano, sin utilizar Python. ¿Cuál será el saldo después de 2 años, suponiendo que no agregas ni retiras dinero excepto los intereses acumulados? Simplemente realiza este cálculo en papel. (La respuesta es 10816. ¿Por qué es más de 10800?) ¿Cuál será el saldo después de 3 años? (Nosotros dicimos que este es "interés compuesto," porque estamos ganando interés del deposito original y tambien del interés hemos ganado en los años anteriores.)

    B. Escriba un programa Python en memoria_3.py que calcule e imprima el saldo de la cuenta después de 1, 2 y 3 años. Hacer esto almacenando el valor original en una variable llamada saldo y actualizando el valor con saldo = saldo + ??? donde ??? significa una expresión simple basada en el cálculo de la parte A.

  4. La computacion de interés con bucle. En el archivo memoria_4.py, copie y guarde el siguiente código. Luego, ajuste el programa para calcular el interés compuesto durante 5 años, tal como se hizo en el problema anterior. Verifique que coincida con su respuesta previa para los primeros 3 años. Posteriormente, modifíquelo para calcular el interés a lo largo de 10 años. Finalmente, realice otra modificación para utilizar una tasa del 5% en lugar del 4%.

    saldo = 10000
    tasa = .04
    
    for i in range(0,5):
        saldo = saldo + 0 # Corrige esta linea
        print("Despues", i, "años, el saldo es", saldo)
    
  5. Almacenar la posición de la tortuga. Muchas formas son muy difíciles de dibujar a menos que recordemos las posiciones de uno o dos puntos. Crear un archivo memoria_5.py y copie y ejecute el siguiente código. Mueve la tortuga a una posición y dirección aleatorias, luego dibuja un triángulo con lados 100 y 30 a lo largo del ángulo recto.

    from turtle import *
    from random import *
    
    # ir a lugar al aleatorio
    penup()
    goto(randint(-200,200), randint(-200,200))
    right( randint(0,360))
    pendown()
    
    # recordar la posición
    x_0 = xcor()
    y_0 = ycor()
    
    # dibujar el triangulo
    forward(100)
    right(90)
    forward(30)
    right(-90) 
    goto(x_0, y_0)
       
    

    Las funciones xcor() y ycor() devuelven las coordenadas horizontales y verticales de la ubicación de las tortugas. Guardamos estos en variables llamadas x_0 e y_0, luego dibuja los dos lados perpendiculares del triángulo, corrige el ángulo al original dirección, y luego dibuja el lado final con goto(x_0, y_0) usando los valores que almacenamos.

    A. Extiende el programa para dibujar, además, la "imagen especular" de este triángulo a lo largo del lado de longitud 100. Sólo tienes que girar a la izquierda en lugar de a la derecha en un ángulo de 90 grados.

    B. Los triángulos que dibujaste en la parte A apuntan en la dirección opuesta a la tortuga. Cambie el programa para que el triángulo apunta en la misma dirección de la tortuga.