🎨
Informática para ingeniería 2023-2024
  • Informática para ingeniería
  • Básico python
  • Estructuras de control
    • while
    • for
    • try...except
    • If, else, elif, while, for
    • Ejemplo. Ciclos anidados. Tablas de multiplicar
    • Método abreviado
    • ¿Qué hace zip() ?
  • Secuencias
  • Comparativas: Cadena, lista, tupla y conjunto
    • Ejemplos listas y funciones: Control de temperatura
    • Verificación del NIF
    • Ejemplo listas: control de temperaturas
  • Secuencias: Matriz
    • Definición: Matriz
    • Localizar valores únicos en una matriz
    • Ejemplo matrices: Suma y Multiplicación
    • verificar si una matriz es cuadrada
  • Funciones
    • Definición: funciones
    • Ejemplo de funciones
  • Módulos
    • Módulo. Definición
    • Ejemplos de Módulos: math y random
  • Método abreviado de comprensión de listas...
    • Comprensión de listas
  • Funciones- Matriz-Ejemplos
    • Ejemplo, cálculo de Nómina mensual
    • Ejemplo, cálculo de Nómina mensual (desde el programa principal)
    • Menú, matriz y funciones
    • Localizar valores únicos en una matriz. Usar Funciones
    • Ejemplo funciones, matriz, archivos: Recuento de votos
    • Matrices 2ª Prueba Evaluación Continua. Curso 2018-2019 Parcial. Prof MRD
    • Prueba Evaluación Continua. Curso 2018-2019. Examen 1. Prof. MRD
    • Gestión de una matriz de números enteros
  • Ejecutable
    • Crear un programa ejecutable
  • Archivo (ficheros)
    • Definición: archivos (ficheros)
  • Ejemplos de Matriz y archivos (ficheros)
    • ¿Cómo se multiplican dos matrices?
    • Crear una matriz a partir de un archivo
    • Pedir datos, guardarlos en una matriz y en un archivo
    • Cálcular la media de unos datos almacenados en un archivo
    • Leer archivo, modificar datos y guardarlos
  • Interfaz Gráfica
    • Definición: Interfaz Gráfica de Usuario (IGU)
      • Label
      • Button
      • Radiobutton y Checkbutton
      • LabelFrame
      • Listbox
      • Entry
      • Características comunes de Label, Entry, button, radiobutton checkbutton
      • ttk.Combobox
      • Tamaño de una ventana
    • Ejemplo de Entorno gráfico: RadioButton
    • Visualizar la especialidad y nombre de un alumno
    • Visualizar los datos introducidos
    • Sumar 10 a un número introducido
    • Cálculo del área de un triángulo
    • Cálculo del área de un Círculo. Y dibujo de un círculo
    • ¿Dos números son divisibles?
    • Introducir valores y graficar
    • Ejemplo de botón, lista
  • Ejemplos de interfaz gráfica y archivos
  • Entorno gráficos y archivos
    • Almacenar los datos de un alumno
Con tecnología de GitBook
En esta página
  • Análisis
  • Diagrama
  • Archivo Nómina
  • Código programa principal.
  • Elementos comunes
  • Opción 1. Introducir los datos diarios de los trabajadores por teclado
  • Solución
  • Opción1. Obtiene los datos de un archivo.
  • Opción 1. Programa
  • Opción 2. Indicar cuantos trabajadores hicieron un trabajo perteneciente a una categoría (A o B)
  • Funcion con listas
  • Programa principal. Opción 2
  • Puntualizaciones
  • Programa principal. Opción 2
  • Opción 3. Indicar cuantos trabajadores no realizaron ningún trabajo y su nombre
  • Sin utilizar conjuntos
  • Con conjuntos
  • Programa Principal. Opción 3
  • Opción 4. Desembolso de la empresa. Nómina
  • Programa Principal. Opción 3
  1. Funciones- Matriz-Ejemplos

Ejemplo, cálculo de Nómina mensual (desde el programa principal)

AnteriorEjemplo, cálculo de Nómina mensualSiguienteMenú, matriz y funciones

Última actualización hace 1 año

Diseñar un programa que permita a la empresa XX calcular la nómina mensual de sus trabajadores por horas. El salario del trabajador estará en función de las horas trabajadas (no podrá realizar más de 8 horas diarios) y su categoría. El coste por hora es de 15 Euros para los trabajadores cuya categoría sea A, 10 si es de categoría B. Se realizará un registro diario. Un trabajador puede realizar un trabajo dentro de la categoría A o B.

En primer lugar, se construirá una tupla con todos los trabajadores que tiene la empresa.

Para ello, tendrá un menú que permita:

  1. Introducir los datos diarios de los trabajadores. Se debe preguntar cuántos trabajadores va a introducir en el programa principal. Para ello, se creará una función llamada Nuevo_trabajo, y devuelve la lista creada (Nombre del trabajador, número de horas, y categoría). Esta opción se implementará por pantalla y archivo

  2. Indicar cuantos trabajadores hicieron un trabajo perteneciente a una categoría (A o B), esté dato se le preguntará al usuario en el programa principal. Para ello, crear una función Contabilizar_categoría y la función devuelve la cantidad calculada que se visualizará en programa principal.

  3. Indicar cuantos trabajadores no realizaron ningún trabajo y su nombre, utilizar conjuntos. Para ello, utilizará una función Llamada Trabajadores_sin_sueldo y debe devolver una cadena con los nombre y la cantidad, que será visualizada en el programa principal.

  4. Calcular el desembolso que realizará la empresa. Para ello, creará una función llamada Cálculo_nómina, que me devuelva la cantidad a pagar por la empresa, esta información se visualizará en el programa principal.

  5. Extra. Crear una función llamada crear_cantidadcategoria en donde se le envía la matriz de empleados y creará una matriz en donde la primera columna aparezca la categoría, y en la segunda la cantidad de empleados. La matriz se visualizará en el programa principal. Para ello, creara una función llamada mostrar_matriz_cantidad(?).

  6. Salir.

Análisis

Diagrama

Archivo Nómina

Código programa principal.

La función def menu() visualiza las opciones, def pedir_datos(mensaje,limite), permite de validar las diferentes opciones del menú y para validar el número de horas.

def menu():
    print(
        '''
        CÁLCULO DE NÓMINA MENSUAL
        
        1 - Introducir horas trabajadas
        2 - Contabilizar categoría
        3 - Trabajadores sin sueldo
        4 - Cálculo de nóminas
        
        S - Salir
        '''
        )
def pedir_datos(mensaje, limite):
    cierto=True
    while cierto:
        try:
              numero=int(input(mensaje))
              if numero >=0 and numero<=limite:        
                   cierto=False
   #                print("Has introducido un número correcto")
              else:
                   print("Haste tecleado un número fuera del límite")
        except:
                print("Has introducido una letra")
        return numero   
#Programa principal
tupla=("IRIA","JUAN","DANIEL","ANA","SERGIO","LUIS")
categoria=[["A", 10],["B",15]]
nomina=[["IRIA","A",5],["JUAN","B",5],["JUAN","A",5]]
bandera=True
while bandera:
    menu()
    opcion=pedir_datos("dame la opción a realizar",5)
    if opcion==1:
        print("opcion trabajadores")
        
            
    elif opcion==2:
            print("Contabilizar categoríar")
           
    elif opcion==3:
            print("Trabajadores sin sueldo")
            
    elif opcion==4:
            print("Nómina")
    elif opcion ==5:
            print("fin")
            bandera=False
    else:
            print("Cálculo de nóminas")
print("fin de programa")

menu()

OJO nomina=[["IRIA","A",5],["JUAN","B",5],["JUAN","A",5]] es para poder poder probar las opciones 2,3. Pero no se sabe cuantos datos tendra debe ser nomina=[]

Elementos comunes

Se pregunta en la opción 1 y opción 2 la categoría, con lo cuál se debe validar y crear una sola función que lo permita en este caso se llama pedir_categoria (categoria_precio).

def pedir_categoria (categoria_precio):
    cierta=True
    while cierta:
         categoria=input("Introduce la categoria A o B").upper()
         print(categoria_precio[0][0]," ", categoria_precio[1][0])
         if categoria !=categoria_precio[0][0] and categoria!=categoria_precio[1][0]:
                  print("Debes introducir o A o B")
         else:
             cierta=False

Opción 1. Introducir los datos diarios de los trabajadores por teclado

pedir_datos(nominamcantidad,tupla,categoria_precio), permite introducir los datos diarios de los trabajadores y verificar_nombre(nomina,nombre), verifica que ese trabajador no exceda las 8 horas.

Solución

def verificar_nombre(nomina,nombre):
    total=0
   
    trabajadores_existe=set([]) #creo otro conjunto
    for i in nomina: #recorro la matriz
        print("i",i)
        trabajadores_existe.add(i[0])
    if nombre in trabajadores_existe:
         for i in nomina:
            print(i[1])
            if i[0]==nombre:
                total+=i[2]
            
    return total
 
def pedir_datos(nomina,cantidad,tupla,categoria_precio):
    for i in range(cantidad+1):
        
        condicion=True
       
        while condicion:
            nombre=input("dame el nombre del trabajador").upper()
            if nombre in tupla:
                total=0
                horas=verificar_datos("Dame la cantidad de horas que trabajo", 8)
                categoria=pedir_categoria (categoria_precio)
                if i!=0:
                    total=verificar_nombre(nomina,nombre)
                if total + horas >8:
                        print("Te has excedido en el número de horas")
                else:    
                   nomina.append([])
                   nomina[i].append(nombre)
                   nomina[i].append(categoria)
                   nomina[i].append(horas)
                  
                   condicion=False
            
    return nomina

Opción1. Obtiene los datos de un archivo.

import os
    
def introducir_datos_archivo(matriz):
        cierta=True
        while cierta:
            nombre_del_archivo=input("dame el nombre del archivo")
#            nombre_del_archivo="nomina.txt", es el nombre del archivo que aparece arriba
            if os.path.exists(nombre_del_archivo):
                i=0
                archivo=open(nombre_del_archivo,"r")
                for lineas in archivo.readlines():
                    print(lineas)
                    
                    matriz.append([])
                    informacion=lineas.split(";")
                    for j in range(3):
                            matriz[i].append(informacion[j])            
                    i+=1
                print(matriz)            
                archivo.close()
                return matriz
    
            else:
                print("El archivo no existe")
                        

El archivo nomina.txt está al principio

Opción 1. Programa

      if opcion==1:
        print("opcion trabajadores")
       
        pedir_datos(nomina,cantidad,tupla,categoria_precio)

Opción 2. Indicar cuantos trabajadores hicieron un trabajo perteneciente a una categoría (A o B)

Funcion con listas

def Contabilizar_categoria(nomina, categoria):
    
    trabajadores=0
    for i in (nomina):
        print(i)
        if categoria==i[1]:
            trabajadores+=1
    return trabajadores 

Ojo que le factaría a la Opción 2. Con listas

Programa principal. Opción 2

elif opcion==2:
            print("Contabilizar categoríar")
            cierto=True
            while cierta:
                categoria=input("Introduce la categoria A o B").upper()
                print(categoria_precio[0][1])
                if categoria ==categoria_precio[0][0] or categoria==categoria_precio[0][1]:
                    cuenta=Contabilizar_categoria(nomina,categoria) #llamo la segunda funcion
                    print("Hay {0} trabajadores de la categoria {1}".format(cuenta,categoria))
                    cierta=False
                else:
                    print("Debes introducir o A o B")

Puntualizaciones

La opción 1 y la opción 2, le preguntan al usuario cuál es la categoría y validan. Con lo cuál, lo más conveniente, es crear una función que permita validar la categoria, en este caso se llamará def pedir_categoria (categoria_precio).

Programa principal. Opción 2

print("Contabilizar categoría")
            if len(nomina)!= 0:
                categoria=pedir_categoria (categoria_precio)
                cuenta=Contabilizar_categoria(nomina,categoria) #llamo la segunda funcion
                print("Hay {0} trabajadores de la categoria {1}".format(cuenta,categoria))
                cierta=False
            else:
                print("Nadie realizo ningún trabajo")

Opción 3. Indicar cuantos trabajadores no realizaron ningún trabajo y su nombre

La función def visualizar_conjunto(Trabajadores_sintrabajo), se utiliza para imprimir los que no han trabajado

Sin utilizar conjuntos

def visualizar_conjunto(Trabajadores_sintrabajo):
    trabajador=""
    for i in Trabajadores_sintrabajo:
        trabajador+=i+" "
    return trabajador
def Trabajadores_sin_sueldo(nomina,tupla): #creo la funcion 3
    trabajadores_sin_trabajo=[] #Crea una lista sin trabajo
    trabajadores_contrabajo=[] #creo una lista
    for i in nomina: #recorro la matriz
        trabajadores_contrabajo.append(i[0]) #añado cada nombre de todos los trabajadores de la matriz 
    
    for i in tupla:
        if i not in trabajadores_contrabajo and i not in trabajadores_sin_trabajo:
            trabajadores_sin_trabajo.append(i)


     
    if len(trabajadores_sin_trabajo)==0:
        enviar="Todos lo trabajadores han realizado algún trabajo"
    else:
        enviar="Los trabajadores han realizado algún trabajo son: "+ visualizar_conjunto(trabajadores_sin_trabajo) +" y son "+ str(len(trabajadores_sin_trabajo))
       
    return enviar

Con conjuntos

def visualizar_conjunto(Trabajadores_sintrabajo):
    trabajador=""
    for i in Trabajadores_sintrabajo:
        trabajador+=i+" "
    return trabajador
def Trabajadores_sin_sueldo(nomina,tupla): #creo la funcion 3
    trabajadores_todos=set(tupla) #creo un conjunto
    trabajadores_contrabajo=set([]) #creo otro conjunto
    for i in nomina: #recorro la matriz
        print(i)
        trabajadores_contrabajo.add(i[0]) #añado cada nombre de todos los trabajadores de la matriz al primer conjunto
    print(trabajadores_contrabajo)
    Trabajadores_sintrabajo=trabajadores_todos-trabajadores_contrabajo #solo guardo los trabajadores que no estan en la matriz
    print(Trabajadores_sintrabajo)
    if len(Trabajadores_sintrabajo)==0:
        enviar="Todos lo trabajadores han realizado algún trabajo"
    else:
        enviar="Los trabajadores han realizado algún trabajo son: "+ visualizar_conjunto(Trabajadores_sintrabajo) +" y son "+ str(len(Trabajadores_sintrabajo))
       
    return enviar

Programa Principal. Opción 3

    elif opcion==3:
            print("Trabajadores sin sueldo")
            if len(nomina)!= 0:
                print(Trabajadores_sin_sueldo(nomina,tupla))
            else:
                print("Nadie realizo ningún trabajo")

Opción 4. Desembolso de la empresa. Nómina

def calculo_nomina(nomina,categoria):
    total=0
    for i in nomina:
        print(i[1])
        if i[1]==categoria[0][0]:
            precio=categoria[0][1]
        else:
            precio=categoria[1][1]
        total+=precio*int(i[2])
    return total

Programa Principal. Opción 3

elif opcion==4:
            print("Nómina")
            if len(nomina)!= 0:
                print("la nómina es de: ", calculo_nomina(nomina,categoria_precio))
            else:
                print("Nadie realizo ningún trabajo")
39B
nomina.txt