sábado, 4 de mayo de 2024

Determinar si un año es bisiesto o no en Python

Esta vez se trata de una función que reciba un parámetro (el año) y devuelva True o False según que el año sea o no bisiesto.

Se recuerda que los años bisiestos son múltiplos de 4, pero los múltiplos de 100 no lo son, aunque los múltiplos de 400 sí.

Estos son algunos ejemplos de posibles respuestas: 2012 es bisiesto, 2010 no es bisiesto, 2000 es bisiesto, 1900 no es bisiesto.

def es_bisiesto(año):
  """
  Función que determina si un año dado es bisiesto o no.

  Argumentos:
    año (int): El año que se quiere verificar.

  Retorno:
    bool: True si el año es bisiesto, False en caso contrario.
  """
  if año % 4 != 0:
    return False
  elif año % 100 == 0 and año % 400 != 0:
    return False
  else:
    return True

# Solicitar el año al usuario
año = int(input("Ingrese un año: "))

# Evaluar si el año es bisiesto
if es_bisiesto(año):
  print(f"{año} es un año bisiesto")
else:
  print(f"{año} no es un año bisiesto")

          

Explicación del código:

  1. Función es_bisiesto:
    • Esta función toma un entero año como argumento.
    • Primero, verifica si el año es divisible por 4. Si no lo es, no es bisiesto y la función devuelve False.
    • Si el año es divisible por 4, se verifica si también es divisible por 100.
      • Si es divisible por 100, pero no por 400, no es bisiesto y la función devuelve False.
      • Si es divisible por 400, sí es bisiesto y la función devuelve True.
  2. Solicitud del año al usuario:
    • Se utiliza la función input() para solicitar al usuario que ingrese un año.
    • El valor ingresado se convierte a un entero usando int().
  3. Evaluación y mensaje:
    • Se llama a la función es_bisiesto() para determinar si el año ingresado es bisiesto.
    • Si la función devuelve True, se imprime un mensaje indicando que el año es bisiesto.
    • Si la función devuelve False, se imprime un mensaje indicando que el año no es bisiesto.

Ejemplo de ejecución:

 

Ingrese un año: 2020
2020 es un año bisiesto

Otro ejemplo:

Ingrese un año: 2100
2100 no es un año bisiesto

Este código proporciona una forma simple y clara de verificar si un año dado es bisiesto en Python. La función es_bisiesto() maneja correctamente las diferentes reglas para determinar si un año es bisiesto, y el código principal facilita la interacción con el usuario para obtener y procesar el año a verificar.

viernes, 3 de mayo de 2024

Calculadora de Índice de Masa Corporal (IMC) en Python

 El siguiente código le pide al usuario que ingrese su peso en Kg y su altura en Metros, para calcular su Indice de Masa Corporal (IMC)

def calcular_imc():
  """Calcula y muestra el índice de masa corporal (IMC).

  Pide al usuario que ingrese su peso y estatura, calcula el IMC y lo muestra por pantalla.
  """
  peso = float(input("Ingrese su peso en kg: "))
  estatura = float(input("Ingrese su estatura en metros: "))

  imc = peso / (estatura ** 2)
  imc_redondeado = round(imc, 2)

  print(f"Tu índice de masa corporal es: {imc_redondeado}")

calcular_imc()

Explicación del código:

  1. Función calcular_imc:
    • Pide al usuario que ingrese su peso y estatura utilizando input y convierte las entradas a flotantes.
    • Calcula el IMC dividiendo el peso por la estatura al cuadrado.
    • Redondea el IMC a dos decimales con round.
    • Muestra un mensaje con el IMC redondeado usando f-strings.
  2. Llamada a la función:
    • Al final, se llama a la función calcular_imc para ejecutar el programa.

Al ejecutar el código:

  • Te pedirá que ingreses tu peso en kg y tu estatura en metros.
  • Calculará tu IMC.
  • Mostrará un mensaje como: "Tu índice de masa corporal es: 23.52".

Mejoras opcionales:

  • Validación de entrada: Puedes agregar código para verificar que el usuario ingrese valores numéricos válidos para el peso y la estatura.
  • Clasificación del IMC: Puedes agregar código para clasificar el IMC según los estándares de la OMS (bajo peso, normal, sobrepeso, obesidad) y mostrar un mensaje adicional con la clasificación.
  • Interfaz más amigable: Puedes usar librerías como tkinter o PyQt para crear una interfaz gráfica más atractiva para la calculadora.

Calculadora de pago de horas trabajadas segun el valor por hora en Python

 Tenemos el siguiente problema para resolver en Python:

Escribir un programa que pregunte al usuario por el número de horas trabajadas y el coste por hora. Después debe mostrar por pantalla la paga que le corresponde.

def calcular_paga(horas, valor_hora):
  """Calcula la paga del usuario.

  Args:
    horas: El número de horas trabajadas por el usuario.
    valor_hora: El valor por hora del trabajo del usuario.

  Returns:
    La paga que le corresponde al usuario.
  """
  paga = horas * valor_hora
  return paga

# Ejemplo de uso
horas_trabajadas = float(input("Ingrese el número de horas trabajadas: "))
valor_por_hora = float(input("Ingrese el valor por hora: "))
paga_total = calcular_paga(horas_trabajadas, valor_por_hora)
print("La paga total es:", paga_total)

 Este código define una función calcular_paga que toma el número de horas trabajadas y el valor por hora como argumentos y devuelve la paga que le corresponde al usuario.

Durante la ejecución del código, antes de llamar la función calcular_paga :

  1. Solicita al usuario que ingrese el número de horas trabajadas y el valor por hora utilizando la función input.
  2. Convierte las entradas del usuario a números flotantes utilizando la función float.
  3. Calcula la paga del usuario multiplicando las horas trabajadas por el valor por hora.
  4. Muestra la paga total al usuario utilizando la función print.

Al final del código, se llama a la función calcular_paga para ejecutar el programa.

miércoles, 1 de mayo de 2024

Calcular el valor de la hipotenusa teniendo un punto x,y en el plano cartesiano en Python

 

  • Este código asume que el usuario ingresa valores numéricos válidos para las longitudes de los catetos.
  • Se puede modificar el código para manejar errores de entrada, como cuando el usuario ingresa un valor no numérico.
  • También se puede agregar código para validar que las longitudes de los catetos sean positivas.
  •  

    import math
    
    def calcular_hipotenusa(x, y):
      """
      Calcula la longitud de la hipotenusa de un triángulo rectángulo utilizando el teorema de Pitágoras.
    
      Parámetros:
        x: La longitud del cateto x.
        y: La longitud del cateto y.
    
      Retorno:
        La longitud de la hipotenusa.
      """
      hipotenusa = math.sqrt(x**2 + y**2)
      return hipotenusa
    
    # Ejemplo de uso
    x = float(input("Ingrese la longitud del cateto x: "))
    y = float(input("Ingrese la longitud del cateto y: "))
    
    hipotenusa = calcular_hipotenusa(x, y)
    
    print("La longitud de la hipotenusa es:", hipotenusa)
    
    

    Explicación:

    1. Importamos la biblioteca math: Esta biblioteca contiene funciones matemáticas, incluyendo la función sqrt() para calcular la raíz cuadrada.
    2. Definimos la función calcular_hipotenusa:
      • Esta función toma dos parámetros: x y y, que representan las longitudes de los catetos del triángulo rectángulo.
      • La función calcula la longitud de la hipotenusa utilizando la fórmula del teorema de Pitágoras: hipotenusa = sqrt(x^2 + y^2).
      • La función retorna el valor de la hipotenusa.
    3. Ejemplo de uso:
      • Solicitamos al usuario que ingrese las longitudes de los catetos x e y.
      • Convertimos las entradas del usuario a números flotantes utilizando la función float().
      • Llamamos a la función calcular_hipotenusa para obtener la longitud de la hipotenusa.
      • Imprimimos el resultado utilizando la instrucción print().

    lunes, 29 de abril de 2024

    Calcular Angulo de referencia y el valor (+/-) de Seno, Coseno y Tangente en Python

     Esta función primero define una función llamada calcular_angulo_referencia que toma un ángulo como parámetro. La función primero convierte el ángulo a radianes si es necesario. Luego, calcula el ángulo de referencia tomando el módulo absoluto del ángulo y dividiéndolo por 2π.

    import math
    
    def calcular_angulo_referencia(angulo, tipo_dato):
      """
      Esta función calcula el ángulo de referencia, el cuadrante y las positividades de seno, coseno y tangente para un ángulo dado en radianes o grados.
    
      Parámetros:
        angulo: El ángulo en radianes o grados.
        tipo_dato: Un string que indica si el ángulo es en "radianes" o "grados".
    
      Retorno:
        Una tupla que contiene el ángulo de referencia en grados, el cuadrante y las positividades de seno, coseno y tangente.
      """
    
      # Convertir el ángulo a radianes si es necesario
      if tipo_dato.lower() == "grados":
        angulo = math.radians(angulo)
    
      # Calcular el ángulo de referencia
      angulo_ref = abs(angulo) % (2 * math.pi)
    
      # Determinar el cuadrante
      if angulo_ref <= math.pi / 2:
        cuadrante = 1
      elif angulo_ref <= math.pi:
        cuadrante = 2
      elif angulo_ref <= 3 * math.pi / 2:
        cuadrante = 3
      else:
        cuadrante = 4
    
    
      # Calcular las positividades de las funciones trigonométricas
      seno_positivo = True if cuadrante in [1, 2] else False
      coseno_positivo = True if cuadrante in [1, 4] else False
      tangente_positivo = True if cuadrante in [1, 3] else False
    
      # Convertir el ángulo de referencia a grados si es necesario
      angulo_ref_grados = math.degrees(angulo_ref)
    
      if (float(angulo_ref_grados) > 180.0):
        angulo_ref_grados = (360 - angulo_ref_grados) * -1
    
      return angulo_ref_grados, cuadrante, seno_positivo, coseno_positivo, tangente_positivo
    
    # Ejemplo de uso
    angulo = float(input("Ingrese el ángulo: "))
    tipo_dato = input("Ingrese el tipo de dato (radianes o grados): ").lower()
    
    resultado = calcular_angulo_referencia(angulo, tipo_dato)
    
    print(f"Ángulo de referencia: {resultado[0]:.2f}°")
    print(f"Cuadrante: {resultado[1]}")
    print(f"Seno positivo: {resultado[2]}")
    print(f"Coseno positivo: {resultado[3]}")
    print(f"Tangente positiva: {resultado[4]}")
    

    A continuación, la función determina el cuadrante en el que se encuentra el ángulo de referencia dividiendo el rango de 0 a 2π en cuatro cuadrantes iguales, y también el tipo de dato (radianes o grados). Finalmente, la función calcula las positividades de las funciones trigonométricas seno, coseno y tangente para el ángulo de referencia en el cuadrante determinado.

    La función devuelve una tupla que contiene el ángulo de referencia en grados, el cuadrante, y las positividades de seno, coseno y tangente.

    La parte final del código proporciona un ejemplo de cómo usar la función calcular_angulo_referencia. Solicita al usuario que ingrese un ángulo en radianes o grados, y luego imprime los resultados devueltos por la función.

    Calculadora científica para calcular el seno, coseno, tangente, exponencial y logaritmo neperiano

    La siguiente es una unción que simula una calculadora científica que permita calcular el seno, coseno, tangente, exponencial y logaritmo neperiano. La función preguntará al usuario el valor y la función a aplicar, y mostrará por pantalla una tabla con los enteros de 1 al valor introducido y el resultado de aplicar la función a esos enteros.

    import math
    
    def calculadora_cientifica():
      """
      Función que simula una calculadora científica básica.
    
      Permite calcular el seno, coseno, tangente, exponencial y logaritmo neperiano de un rango de valores enteros.
      """
    
      # Solicitar valor y función al usuario
      valor = int(input("Ingrese el valor máximo (entero): "))
      funcion = input("Ingrese la función a calcular (seno, coseno, tangente, exponencial, logaritmo): ").lower()
    
      # Validar la función ingresada
      if funcion not in ("seno", "coseno", "tangente", "exponencial", "logaritmo"):
        print("Función no válida. Intente de nuevo.")
        return
    
      # Crear tabla de resultados
      print("\n| Valor | Resultado |\n|---|---|")
    
      # Calcular y mostrar resultados
      for i in range(1, valor + 1):
        if funcion == "seno":
          resultado = math.sin(i)
        elif funcion == "coseno":
          resultado = math.cos(i)
        elif funcion == "tangente":
          resultado = math.tan(i)
        elif funcion == "exponencial":
          resultado = math.exp(i)
        elif funcion == "logaritmo":
          resultado = math.log(i)
    
        print(f"| {i} | {resultado:.4f} |")
    
    if __name__ == "__main__":
      calculadora_cientifica()
    
    

    Explicación del código:

    1. Importación de la biblioteca math: Se importa la biblioteca math para acceder a funciones matemáticas como sin, cos, tan, exp y log.
    2. Función calculadora_cientifica:
      • Solicitar valor y función al usuario: Se utilizan las funciones input para obtener el valor máximo (entero) y la función a calcular del usuario.
      • Validar la función ingresada: Se verifica si la función ingresada es válida ("seno", "coseno", "tangente", "exponencial", "logaritmo"). Si no es válida, se muestra un mensaje de error y se termina la función.
      • Crear tabla de resultados: Se imprime un encabezado de tabla con las columnas "Valor" y "Resultado".
      • Calcular y mostrar resultados: Se utiliza un bucle for para iterar desde 1 hasta el valor máximo ingresado. Dentro del bucle, se calcula el resultado de la función correspondiente al valor actual (i) utilizando las funciones matemáticas de la biblioteca math. El resultado se formatea con 4 decimales y se imprime en la tabla junto con el valor actual.
    3. Bloque if __name__ == "__main__"::
      • Este bloque garantiza que el código dentro de la función calculadora_cientifica solo se ejecute cuando se ejecute el script como programa principal, y no cuando se importe como módulo.

    Ejecución del código:

    1. Guarde el código como un archivo Python (por ejemplo, calculadora_cientifica.py).
    2. Abra una terminal o ventana de comandos y navegue hasta la ubicación donde guardó el archivo.
    3. Ejecute el código usando el siguiente comando:
    python calculadora_cientifica.py
    
    1. Se le pedirá que ingrese el valor máximo y la función a calcular. El código calculará y mostrará una tabla con los resultados para los valores enteros desde 1 hasta el valor máximo especificado.

    martes, 26 de enero de 2021

    5 Errores comunes programando en PHP y cómo prevenirlos

     Ahora que los desarrolladores pueden rastrear los problemas exactos que causan cuellos de botella en el rendimiento en aplicaciones PHP, veamos cinco errores comunes que cometen los desarrolladores al crear aplicaciones PHP y cómo pueden resolverlos.

    Error 1: Hacer demasiadas consultas a la base de datos

    PHP se encuentra con el mismo tipo de restricciones que los desarrolladores tendrían con otros lenguajes, como demasiadas consultas de bases de datos. Los desarrolladores no son expertos en bases de datos. La mayoría no conocen todos los matices de la base de datos que utilizan. A menudo, no están usando su capa de acceso a la base de datos de manera óptima, por lo que terminan haciendo demasiadas consultas a la base de datos o generando consultas a la base de datos que no usan índices.

    Las bases de datos también funcionan de manera diferente bajo diferentes tipos de carga. Una base de datos que se ejecuta en una computadora portátil con decenas de megabytes de memoria se comporta de manera diferente a una base de datos de producción con un gigabyte, ya que se utilizan diferentes estrategias para seleccionar qué datos mirar. Las consultas que funcionaron en la máquina local de un desarrollador o en el entorno de ensayo pueden funcionar de manera diferente en producción.

    Las mitigaciones para un rendimiento deficiente de las consultas de la base de datos son agregar consultas en caché y ajustar. El almacenamiento en caché ayuda a reducir la cantidad de consultas enviadas a la base de datos cuando el resultado ya se conoce o se accede con frecuencia. Por ejemplo, el artículo "más reciente" de un sitio de noticias cambia con menos frecuencia de la que se lee. Al almacenar en caché los resultados, los desarrolladores pueden mejorar el rendimiento leyendo los resultados del caché en lugar de la base de datos. Ajustar las consultas de la base de datos generalmente implica agregar índices adicionales en los datos que se usan con frecuencia en condiciones o combinaciones. También puede implicar el almacenamiento de datos de formas que requieran menos combinaciones para acceder.

    Error 2: Cargar demasiados archivos


    Con otros lenguajes de programación, las aplicaciones se inician y luego mantienen el código y los datos asociados en la memoria. Con PHP, sin embargo, no existe un estado de aplicación persistente: los archivos se recargan con cada solicitud. Cuando los desarrolladores no tienen en cuenta esto, pueden encontrarse con el problema de cargar demasiados archivos, lo que consume los recursos del sistema y ralentiza el rendimiento.

    Los desarrolladores pueden resolver este problema activando el almacenamiento en caché del código de operación (código de operación). Como muchos lenguajes, PHP procesa el código fuente en códigos de operación, que luego se ejecutan en el tiempo de ejecución de PHP. La conversión de código PHP a códigos de operación ocurre en cada solicitud, ya que PHP no tiene un estado compartido. Si bien analizar el código fuente y generar códigos de operación es relativamente barato, los costos se acumulan a medida que una aplicación maneja más tráfico. Al habilitar el almacenamiento en caché del código de operación, el paso de análisis del código fuente se puede omitir, lo que produce ganancias de rendimiento medibles.

    Error 3: Configuración incorrecta del servidor web

    A diferencia de otros lenguajes de programación en los que el servidor web es parte del lenguaje, PHP se ejecuta dentro de un servidor web. Apache HTTP Server y Nginx son los dos más utilizados. El servidor web es otra capa que los desarrolladores de PHP deben supervisar. Desde elegir un modelo de proceso en Apache hasta ajustar PHP-FPM (Fast Process Manager) cuando se usa Nginx, existen algunas opciones de ajuste para usar.

    Por ejemplo, los desarrolladores deberán configurar la cantidad de procesos de trabajo que se crearán y la frecuencia con la que se reciclarán. Si no tienen suficientes trabajadores (procesos en ejecución) disponibles, sus usuarios tendrán que hacer cola y esperar a que un trabajador esté libre. Si tienen demasiados trabajadores, podrían quedarse sin memoria durante un momento de mucha actividad. Los desarrolladores pueden utilizar la cantidad de memoria que normalmente utiliza una aplicación y los recursos disponibles en sus servidores como guía para elegir la cantidad de trabajadores.

    Error 4: Malas prácticas de seguridad

    PHP permite a los desarrolladores combinar una variedad de paradigmas de programación y cambiar entre código HTML y PHP con fluidez. Sin rigor, esto puede resultar rápidamente en un código desordenado que es difícil de mantener. Esta flexibilidad es una de las razones por las que PHP es un lenguaje excelente para principiantes, pero puede convertirse fácilmente en una debilidad que puede exponer las aplicaciones a problemas de seguridad como cross-site scripting (XSS) e inyección SQL (SQLi).

    Los desarrolladores pueden mitigar estos riesgos mediante el uso de bibliotecas, herramientas y frameworks maduros. El uso de una biblioteca de plantillas como Twig ayuda a evitar el scripting entre sitios al codificar automáticamente en HTML todas las variables que se muestran en las plantillas. El uso de un mapeador relacional de objetos (ORM) o una biblioteca de abstracción de bases de datos puede evitar la inyección de SQL mediante el uso de declaraciones preparadas.

    Error 5: No usar tipos estrictos y sugerencias de tipo

    PHP tiene un sistema de tipos indulgente. Históricamente, PHP ha favorecido los tipos de coerción sobre la creación de errores. Esto puede llevar a trampas como dividir números por palabras y obtener resultados "útiles", pero también crear errores en tiempo de ejecución. Para ayudar a prevenir este tipo de errores, los desarrolladores deben habilitar "strict_types" y usar herramientas como Psalm y PHPStan como parte de su proceso de desarrollo. Estas herramientas analizan el código de forma estática y, al observar qué tipos de datos se utilizan en su aplicación, pueden señalar problemas potenciales antes de que se conviertan en problemas reales que afecten a los usuarios.

    7 razones para no usar Laravel en tu proyecto de PHP

    En más de 40 años de experiencia como programador y director de proyectos de programación, he aprendido que cada requerimiento tiene mejores...