如何将函数中的变量传递给另一个函数?

时间:2017-07-08 04:14:27

标签: python arrays function class variables

很抱歉,如果我的英语不好,但不是我的母语

我正在用Python开始我的编程研究,我需要为我的课程编写这段代码。

基本上包括公司员工的清单,以计算他们的工资,申请一些折扣和奖金。在菜单的选项4中,我必须显示所有已注册的ID及其最终工资

我需要将变量 Sueldo Descontado 放在函数 Def Calpha_中函数 Def Liquidaciones_Rut <中 Def Calef_Sueldo() /强>

有人告诉我将其定义为一个类并将其添加到注册表 List [] 但我不知道如何执行此操作:/

PS:如果我将变量 SueldoDescontado 定义为 global 为所有ID打印相同的值:/

我希望有人可以帮助我

Heres my code

Lista = [] #<----- Array


Mess = ['enero', 'febrero', 'marzo', 'abril','mayo', 'junio', 'julio', 
       'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre',
       'Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 
       'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre',
       'ENERO', 'FEBRERO', 'MARZO', 'ABRIL', 'MAYO', 'JUNIO', 'JULIO', 
       'AGOSTO', 'SEPTIEMBRE', 'OCTUBRE', 'NOVIEMBRE', 'DICIEMBRE']

Rank =  ['novato', 'experto', 'supervisor', 'administrativo',
        'Novato', 'Experto', 'Supervisor', 'Administrativo',
        'NOVATO', 'EXPERTO', 'SUPERVISOR', 'ADMINISTRATIVO']

SistemaSalud = ['a', 'b', 'c',
               'A', 'B', 'C']



class Trabajador: #Class <----
Mes = '' 
Año = 0
Rut = ''
Nombre = ''
Categoria = ''
DiasOff = 0
AFP = ''
SSalud = ''
SueldoBruto = 0
SueldoDescontado = 0

def Ingresar_Datos():
    Elementos = int(input('Ingrese cantidad de trabajadores que desea agregar: \n')) #<--- How many people do you want to add
        for Trabajadores in range(Elementos):
        dato = Trabajador()

        while True:
            Nombre = input("Ingrese un nombre: ") #<--- Name
            if vacio(Nombre):
                print ('No puede dejar el campo vacio')
            else:
                dato.Nombre = Nombre
                break

       while True:
            Rut = input('Ingrese Rut: ') # <---- ID Number
            if vacio(Rut):
                print ('No puede dejar el campo vacio')
            else:
                dato.Rut = Rut
                break

       while True:
            Mes = input('Ingrese mes: ') # <---- Month when start at work
            if vacio(Mes):
                print ('No puede dejar el campo vacio')
            elif Mes in Mess:
                dato.Mes = Mes
                break
            else:
                print('Mes invalido')


        while True:
            Año = input('Ingrese año: ') # <---- Year when start at work
            if vacio(Año):
                print ('No puede dejar el campo vacio')
            else:
                dato.Año = Año
                break

        while True:
            AFP = input('Ingrese AFP: ') # <---- NVM just a company name can be put here, not relevant
            if vacio(AFP):
                print ('No puede dejar el campo vacio')
            else:
                dato.AFP = AFP
                break

        while True:
            SSalud = input('Sistema de salud A B o C\nDigite opcion: ') # <---- System Health, Here is A, B or C, This make a discount%
            if vacio(SSalud):
                print ('No puede dejar el campo vacio')
           elif SSalud in SistemaSalud:
                dato.SSalud = SSalud
                break
            else:
                print ('::::::::::::::::::::ERROR Opcion Invalida::::::::::::::::::::')


        while True:
            Categoria = input('Categoria; Novato, Supervisor, Experto o Administrativo: ') # <---- Worker rank, Expert have a 2xBonus for 0 days off
            if vacio(Categoria):
                print ('No puede dejar el campo vacio')
            elif Categoria in Rank:
                dato.Categoria = Categoria
                break
            else:
                print ('::::::::::::::::::::ERROR Categoria invalida::::::::::::::::::::')


        while True:
                DiasOff = input('Ingrese cantidad de dias de ausencia: ') #<------ Days of absence, 0 days have a bonus$
                if dato.DiasOff < 0 or dato.DiasOff > 30:
                    print ('Dias de ausencia no puede ser negativo o mayor a 30')
                else:
                    dato.DiasOff = DiasOff
                    break


       while True:
            try:
                SueldoBruto = int(input('Ingrese sueldo bruto: ')) # <------- Gross Salary
                if dato.SueldoBruto < 0:
                    print ('El monto del sueldo bruto no puede ser negativo')
                else:
                    dato.SueldoBruto = SueldoBruto
                    break
            except ValueError:
                print('error')

        print("------------------------------------------------")
        Lista.append(dato)


def vacio(x):
    if x and x.strip():
        return False
    return True 


def Calcular_Sueldo():
    Bono = 50000 #<-------- Bonus for 0 Days of absence
    for Trabajadores in Lista:
        print('Nombre trabajador: ',Trabajadores.Nombre,'\n')

        if Trabajadores.DiasOff == '0' and Trabajadores.Categoria == ('experto') or Trabajadores.DiasOff == '0' and Trabajadores.Categoria == ('Experto') or Trabajadores.DiasOff == '0' and Trabajadores.Categoria == ('EXPERTO'):
            SueldoBono = Trabajadores.SueldoBruto + Bono*2 #<-------- There is if 0 days absence and rank experto, 2xBonus
            print('Sueldo bruto + Bono (Experto) por 0 faltas: ',SueldoBono)


        elif Trabajadores.DiasOff == '0': #<-------- Bonus for 0 Days of absence, nvm about rank here
            SueldoBono = Trabajadores.SueldoBruto + Bono
            print('Sueldo bruto + Bono por 0 faltas: ',SueldoBono)


        else:
            SueldoBono = Trabajadores.SueldoBruto #<-------- No bonus for days absence
            print('Tiene faltas/ausencia, no tiene derecho a Bono: ',SueldoBono)


        DctoAFP = SueldoBono - (SueldoBono * 0.1) #<-------- This makes a 10% descuento for AFP, the nvm'company name
        print('Sueldo bruto + Recorte del 10% por AFP ',Trabajadores.AFP,': ',DctoAFP)



        if Trabajadores.SSalud == 'a' or Trabajadores.SSalud == 'A': #<-------- If Sistem Health is A, make a 5,7% discount
            DctoSalud = (DctoAFP/100) * 5.7
            print('Recorte del sistema de salud A: ',DctoSalud)
            SueldoDescontado = DctoAFP - DctoSalud #<-------------------------- This Variable --------- !"#$"!#%!"#%!#"%"#$%$"#----------
            print('Total a pagar: ',SueldoDescontado)





        if Trabajadores.SSalud == 'b' or Trabajadores.SSalud == 'B': #<-------- If Sistem Health is B, make a 6.1% discount
            DctoSalud = (DctoAFP/100) * 6.1
            print('Recorte del sistema de salud B: ',DctoSalud)
            SueldoDescontado = DctoAFP - DctoSalud #<-------------------------- This Variable --------- !"#$"!#%!"#%!#"%"#$%$"#----------
            print('Total a pagar: ',SueldoDescontado)





        if Trabajadores.SSalud == 'c' or Trabajadores.SSalud == 'C': #<-------- If Sistem Health is C, make a 6.5% discount
            DctoSalud = (DctoAFP/100) * 6.5
            print('Recorte del sistema de salud C: ',DctoSalud)
            SueldoDescontado = DctoAFP - DctoSalud #<-------------------------- This Variable --------- !"#$"!#%!"#%!#"%"#$%$"#----------
            print('Total a pagar: ',SueldoDescontado)




        print('--------------------------------------')

def Liquidaciones_Rut(): #<------- Here I need to print all the ID's number's with his Final Salary (SueldoDescontado)
    for Trabajadores in Lista:
        print('Rut: ',Trabajadores.Rut,'Total a pagar: $',SueldoDescontado) #<----- To here --------- !"#$"!#%!"#%!#"%"#$%$"#----------




def Listar_Empleados(): #<------------------ Here just print the names of all workers
    for Trabajadores in Lista:
        print("Empleados registrados: ", Trabajadores.Nombre)






opcion = 7
while (opcion != 6):
    print(' ========== Administracion NovaVision ========== ')
    print('Menu')
    print('1.- Ingresar Datos') #<-------------------------- Enter Data
    print('2.- Calcular Sueldo') #<-------------------------- Calculate Salary
    print('3.- Listar Empleados') #<----------------------------- List employees (by his name)
    print('4.- Mostrar Liquidaciones por RUT') # <--------- List numbers ID with his Respective Salary
    print('5.- Salir')
    opcion = int(input('Ingrese su opcion: '))
    if (opcion == 1):
       Ingresar_Datos() 
    elif (opcion == 2):
       Calcular_Sueldo()
    elif (opcion == 3):
       Listar_Empleados()
    elif (opcion == 4):
       Liquidaciones_Rut()
    elif (opcion == 5):
       print('Saliendo .. ')
    else:
       print ('Opcion no valida')

1 个答案:

答案 0 :(得分:0)

小例子

class Trabajador:

    def __init__(self, number, month, year):
        self.number = number
        self.month = month
        self.year = year

Mess = ['enero', 'febrero', 'marzo', 'abril','mayo', 'junio', 'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre']             

T1 = Trabajador(10, Mess[0] , 1979)

print (T1.number)
print (T1.month)
print (T1.year)

__ init方法是类构造函数,但请阅读我给你的链接

在Linux中从命令行运行

python example1.py

你会得到

10
enero
1979