Ejercicios en python (parte 5)

Ejercicio en python
Ejercicio en python

Hace unos días me dejaron un comentario en una de las entradas anteriores, planteando un ejercicio que me ha parecido interesante compartir con ustedes.
Para darle un poco de complejidad al ejercicio, la idea es hacerlo utilizando una base de datos (en este caso utilizaremos Sqlite3): puedes ver la entrada que hice sobre Sqlite3 (Python y Sqlite3 como base de datos) para que sirva como guía.

Ejercicio Python:

Una
PyME, tiene la siguiente estructura de pagos para sus 10 empleados: 

Un sueldo
base

Una bonificación del 1% del sueldo base, por
cada mes trabajado

Una asignación familiar del 5% del sueldo base,
por cada hijo


La suma de los tres valores anteriores, conforman
la “base imponible”.

Todos los empleados están en FONASA, así que
deben cotizar el 7% de la base imponible en salud. 
Los empleados están en una de dos: AFPs, la
primera cobra (entre imposición y otros gastos) el 
12 % de la base imponible, mientras que la
segunda cobra el 11.4%


Construyan un programa Python que:


a) Pida el ingreso de datos de los 10 empleados
y los almacene. Debe pedir: nombre, apellido, sueldo base, afap, fecha de ingreso
y cantidad de hijos.

b) El programa debe calcular la base imponible,
según lo indicado arriba y luego descontar según corresponda.

c) El programa debe calcular lo que se debe
pagar a FONASA y el monto de cada AFAP.

d) El programa debe calcular los promedios de
pago a los empleados

e) El programa debe implementar control de
excepciones en cada ingreso de información.

El mensaje debe ser claro al usuario, indicando
que debe corregir en cada intento de ingresar los datos.E

Se entiende por:

FONASAEl Fondo Nacional de Salud, FONASA, es el organismo público encargado de otorgar cobertura de atención, tanto a las personas que cotizan el 7% de sus ingresos mensuales en FONASA, como a aquellas que, por carecer de recursos propios, financia el Estado a través de un aporte fiscal directo.

AFAPAFAP significa “Administradora de Fondos de Ahorro Previsional”. Son empresas que administran parte del aporte de los trabajadores afiliados para que en el futuro tengan una mejor jubilación. 


Puedes ver también: Ejercicios de programación

Suerte.....

  1. Anónimo dice:

    Hola, creo que el literal B de las pregunta esta mal especificada. no se debe descontar según corresponda, debe aumentar porque son las bonificaciones

  2. Unknown dice:

    Dejo mi código para que lo mires (y)

    # -*- coding: utf-8 -*-
    def calculo(x,a):
    from datetime import datetime, date, time
    baseimponible = [None]*a
    sueldoreal = [None]*a
    sumsueldo = 0
    Fonansa = 0
    AFP1 = 0
    AFP2 = 0
    PromPago = 0
    dif = 0
    for j in range(a):
    dia = int(x[j][4][0] + x[j][4][1])
    mes = int(x[j][4][3] + x[j][4][4])
    ano = int(x[j][4][6] + x[j][4][7] + x[j][4][8] + x[j][4][9])
    fecha = datetime(ano,mes,dia,0,0,0)
    ahora = datetime.now()
    dif = ahora - fecha
    factor = float(dif.days/365)*12 # Aprox 30 días por mes
    baseimponible[j] = x[j][2] + 0.01*factor*x[j][2]+0.05*x[j][5]*x[j][2]
    if x[j][3] == 1:
    sueldoreal[j] = baseimponible[j] - 0.07*baseimponible[j] - 0.12*baseimponible[j]
    sumsueldo = sumsueldo + sueldoreal[j]
    AFP1 = 0.12*baseimponible[j]+AFP1
    else:
    sueldoreal[j] = baseimponible[j] - 0.07*baseimponible[j] - 0.114*baseimponible[j]
    sumsueldo = sumsueldo + sueldoreal[j]
    AFP2 = 0.114*baseimponible[j]+AFP2
    Fonansa = 0.07*baseimponible[j]+Fonansa
    PromPago = sumsueldo/a
    print("Fonansa Total: ", + Fonansa)
    print("AFP 1: ", + AFP1)
    print("AFP 2: ", + AFP2)
    print("Promedio de pagos", + PromPago)

    def main():
    n = input("numero de empleados")
    s = [None]*n
    for i in range(n):
    s[i] = [None]*6
    for i in range(n): #Numero de empleados
    s[i][0] = raw_input("Nombre: ")
    s[i][1] = raw_input("Apellido: ")
    while True:
    try:
    s[i][2] = input("Sueldo Base: ")
    break
    except:
    print "Oops! No es valido el argumento, intente nuevamente"
    while True:
    try:
    s[i][3] = input("AFP (1 (12%) o 2 (11.4%)): ")
    break
    except:
    print "Oops! No es valido el argumento, intente nuevamente"
    s[i][4] = raw_input("Fecha de ingreso (DD/MM/AAAA): ")
    while True:
    try:
    s[i][5] = input("Numero de hijos: ")
    break
    except:
    print "Oops! No es valido el argumento, intente nuevamente"
    calculo(s,n)

    1. PythonDiario dice:

      Ok, cuando tenga un tiempito lo miro. Gracias por visitar el blog. Saludos

  3. Unknown dice:

    hola estoy buscando un programa simple .. soy novato y necesito que me pases los codicos del sigte problema..
    el ejercicio es elsigte..
    hacer programa en python que calcule el total de una factura.
    crea una variable llamada total_importe que contendra el total a pagar.
    crea 2 constantes llamadas IVA_UNO y IVA-DOS QUE CONTENDRA el porceentaje del impuesto, 5 % y 10 % respectivamente.
    si el monto a pagar es menor a 100000 debes usar 5% de iva, en caso contrario debes usar 10 %.
    hay que realizar un descuento, en fucion de la suma de los importes, dicho descuento es del 0% si es menor que 1000, es del 5% si es mayor o igual que 10000 y menor que 50000 y es de 8% si es mayor que 100000. El descuento se debe aplicar antes de calcular el IVA.
    para acabar se debe imprimir el importe total y el iva resultantes..

    por favor si me ayuda desde ya muchas gracias..!!

    1. Primer. Blogger dice:

      Disculpa por la tardanza.
      aquí está tu código:

      """factura básica"""
      def borrar():
      import os
      name=os.name
      if name=="nt":
      os.system("cls")
      else:
      os.system("clear")
      while True:
      print("0-Para terminar; 1-para limpiar pantalla; cualquier numero para continuar")
      monto=float(input("Iglese el monto:"))
      IVA_UNO=5
      IVA_DOS=10
      total=0
      if monto<1000 or monto<10000:
      total_a_pagar=monto-total
      total=monto
      des="0%"
      else:
      if monto>=10000 and monto<50000:
      total=monto*5/10
      total_a_pagar=monto-total
      des="5%"
      else:
      if monto>50000 and monto<100000:
      total_a_pagar=monto-total
      des="5%"
      else:
      if monto>=100000:
      total=monto*8/100
      total_a_pagar=monto-total
      IVA_UNO=total_a_pagar*5/100
      iva=IVA_UNO
      des="8%"
      if monto>=100000:
      iva="5%"
      IVA_UNO=total_a_pagar+monto
      iva_a_usar=total_a_pagar
      else:
      iva="8%"
      IVA_DOS=total_a_pagar*8/100
      iva_a_usar=IVA_DOS+monto
      print("___________________________________________")
      print("El monto inicial es:.................",monto)
      print()
      print("Su descuento es de:................."+des)
      print()
      print("Su monto con descuento es:............",total)
      print()
      print("El IVA es del:........................",iva)
      print()
      print("===========================================")
      print("Total a pagar: Sin IVA................",total_a_pagar)
      print()
      print("Total a pagar: con IVA:..............",iva_a_usar)
      print("___________________________________________")
      print()
      if monto==0:
      borrar()
      print("Gracias por complar en python.ca")
      break
      if monto==1:
      borrar()

  4. Unknown dice:

    buenas tardes me gustaria y me pudieran ayudar con este ejercicio
    Desarrollar un programa que permita el ingreso de datos de n empleados tomando en cuenta las

    siguientes consideraciones:

    1. Los datos de un empleado deben estar formados por: Nombres, Apellidos, Cedula, Sueldo.

    2. El programa deberá indicar el número de empleados ​a ingresar.

    3. Luego, ingresar los datos de cada empleado hasta completar el número indicado.

    4. Mostrar un menú con las siguientes opciones:

    0. Salir

    1. Promedio sueldo

    2. Datos del empleado con mayor sueldo

    3. Datos del empleado de menor sueldo

    4. Buscar Empleado

    El programa solo puede terminar cuando se escoja la opción 0

    Características del desarrollo

    ● El programa debe ser desarrollado en python

    ● Se debe crear la clase Empleado

    ● En el desarrollo se deben implementar las siguientes funciones:

    Dentro de la clase Empleado:

    def leer()

    #lee los datos necesarios del empleado, se debe validar mediante expresiones regulares que los

    datos de nombre y apellido solo contengan letras, que la cédula posea 10 dígitos y finalmente

    que el sueldo permitido sea mayor al sueldo básico en Ecuador

    def imprimir()

    #imprime todos los datos del empleado

    También debe implementar las siguientes funciones:

    def buscarEmpleadoPorCedula(ListaEmpleados, cedulaAbuscar)

    #Recibe una lista de empleados y la cédula a buscar, el valor de retorno será el #objeto

    empleado (en caso de encontrar un empleado con la cédula buscada)

    Def obtenerEmpleadoMayorSueldo(ListaEmpleados)

    #retorna el objeto empleado que tenga el mayor sueldo, recibe como parámetro una lista de

    empleados.

    Def obtenerEmpleadoMenorSueldo(ListaEmpleados)

    #retorna el objeto empleado que tenga el menor sueldo, recibe como parámetro una lista de

    empleados.

    1. Unknown dice:

      Este comentario ha sido eliminado por el autor.

  5. Unknown dice:

    hey si ya tienes la respuesta por favor ayudame

  6. Unknown dice:

    este el código que yo he creado

    código:
    #! user/bin/env python
    # -*- encoding: utf-8 -*-

    from datetime import date
    from sqlite3 import *

    def empleado(numero):
    try:
    print("Datos empleado No. {0}".format(numero))
    nombre = input("Nombre: ")
    apellido = input("Apelldo: ")
    sueldoB = int(input("Sueldo base: "))
    afap = int(input("AFAP (1, 2): "))
    if afap < 0 or afap > 2: raise ValueError
    fecha = input("Fecha de ingreso (dd/mm/aa): ")
    if len(fecha) < 8: raise ValueError
    hijos = int(input("cantidad de hijos: "))

    tupla = nombre, apellido, sueldoB, afap, fecha, hijos
    return tupla
    except ValueError:
    print("Dato ingresado de manera erronea")
    return empleado(numero)

    def mesesTrabajados(fecha):
    now = date.today()
    fechaNow = now.strftime('%d/%m/%y')
    mes = int(fechaNow[3:5]) - int(fecha[3:5]) +1
    if len(fecha[6:]) > 2:
    anyo = int(fechaNow[6:]) - int(fecha[8:])
    else: anyo = int(fechaNow[6:]) - int(fecha[6:])

    return mes + (anyo * 12)

    cantEmp = 4 #cambiar el valor por 10 para que sea la cantidad de empleados proueta en el ejercicio
    promedio = 0
    empleados = []
    baseImponible = []

    tablaEmpleado = '''CREATE TABLE empleados(
    id INTEGER PRIMARY KEY,
    nombre VARCHAR(80) NOT NULL,
    apellido VARCHAR(80) NOT NULL,
    sueldo base INTEGER NOT NULL,
    afap INTEGER NOT NULL,
    fecha ingreso VARCHAR(8) NOT NULL,
    hijos INTEGER NOT NULL
    );'''

    db = connect("data.db")
    cursor = db.cursor()

    try:
    cursor.execute(tablaEmpleado)
    except OperationalError:
    pass

    cursor.execute("SELECT * FROM empleados;")
    c = len(cursor.fetchall())
    if c < cantEmp:
    for i in range(cantEmp - c):
    print("{:-^80}".format("pythondiario company"))
    print("{:^80}".format("Registro de Empleados"))
    empleados.append(empleado(c+1))
    print("nn")

    for i in empleados:
    cursor.execute("INSERT INTO empleados(nombre, apellido, sueldo, afap, fecha, hijos) VALUES(?,?,?,?,?,?);", i)
    db.commit()

    cursor.execute("SELECT * FROM empleados;")
    print("{:*^60}".format("Tabla de Empleados"))
    print("_"*60)
    print("|{:^18}|{:^10}|{:^8}|{:^10}|{:^8}|".format("Nombre y Apellido", "Sueldo", "AFAP", "Fecha", "Hijos"))
    for i in cursor:
    print("|{:^18}|{:^10}|{:^8}|{:^10}|{:^8}|".format("{0}{1}".format(i[1], i[2]), i[3], i[4], i[5], i[6]))
    bonificacion = (1 * i[3] / 100) * mesesTrabajados(i[5])
    familiar = (5 * i[3] / 100) * i[6]
    base = i[3] + bonificacion + familiar
    baseImponible.append(base)
    promedio += i[3]

    # bonificacion -> (1*sueldo/100)*mes
    # familiar -> (5*sueldo/100)*hijos
    # baseImponible -> sueldo + bonificacion + familiar

    print("-"*60)
    print("nDatos de los empleados: ")
    print("_"*76)
    print("|{:^10}|{:^15}|{:^15}|{:^15}|{:^15}|".format("Empleado", "Base Imponible", "FONASA", "AFAP", "TOTAL"))

    cursor.execute("SELECT * FROM empleados;")
    for i, x in zip(baseImponible, cursor):
    fonasa = (7*i/100)
    afap = 0
    if x[4] == 1:
    afap = (12*i/100)
    else: afap = (11.4*i/100)
    print("|{:^10}|{:^15.2f}|{:^15.2f}|{:^15.2f}|{:^15.2f}|".format(x[1], i, fonasa, afap, i-(fonasa+afap)))
    print("-"*76)

    print("Promedio: {:.2f}".format(promedio/cantEmp))

    cursor.close()
    db.close()

  7. Unknown dice:

    Buenos dias de verdad necesito ayuda debo crear un programa basado en un juego de domino con una corrida de 7 soy novata y no se bien como hacerlo podria alguien ayudarme :c

  8. Unknown dice:

    necesito realizar un programa en python que le permita a una empresa calcular su nómina de manera básica.

    El programa debe:

    Preguntar al usuario el precio por hora trabajada.
    Preguntar al usuario cuantos empleados va a procesar.
    Preguntar de cada empleado cuantas horas ha trabajado, si tiene seguro medico y cuantos años tiene en la empresa.
    Para cada empleado se debe calcular su sueldo bruto que es igual a las horas que ha trabajado multiplicado por el precio por hora trabajada.
    Para cada empleado se le debe calcular el descuento por seguro médico. Si el empleado tiene seguro medico se le descuenta un 3% de su sueldo bruto.
    Para cada empleado se le debe calcular el bono por años en servicio. Si el empleado tiene mas de 5 años en la empresa se le da un bono de un 5% de su sueldo bruto.
    Para cada empleado se le debe calcular su sueldo neto. El sueldo neto es igual a la cantidad de horas que ha trabajado multiplicado por el precio de las horas trabajadas, menos el descuento por seguro medico (Si este tiene) mas el bono por años en servicio (Si a este le toca).
    Realizar los cálculos de los pagos de todos los empleados y sumarlos, para al final imprimir un reporte como el siguiente ejemplo:
    ===========================================

    Cantidad de empleados procesados: 12

    Total horas trabajadas por todos los empleados: 480

    Precio por Hora trabajada: 60

    Sumatoria bruta de sueldos a pagar: 28,800

    Sumatoria descuentos por seguro médico: 5,380

    Sumatoria bonos por años en servicios: 3,000

    Sumatoria neta de sueldos a pagar: 26,420

    ==========================================

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir

Te has suscrito correctamente al boletín

Se produjo un error al intentar enviar tu solicitud. Inténtalo de nuevo.

Mi Diario Python will use the information you provide on this form to be in touch with you and to provide updates and marketing.