Один индекс списка изменяется на другой, а другие остаются неизменными? - PullRequest
0 голосов
/ 05 ноября 2019

В настоящее время я пытаюсь прочитать 3 файла, которые представляют списки сотрудников, расценки и количество рабочих часов. По какой-то причине у моего списка рабочих часов возникла проблема. Я пытаюсь вставить вход в программу, чтобы определить, имеет ли какой-либо из этих списков неверный тип значения (например, слово в списке часов), и в то же время разрешить выполнение оставшейся части программы. Список часов, когда я добавил третий индекс после 80 (это важное условие для предупреждения о возможных ошибках / мошенничестве с расписанием), он начал разбивать это число на собственный список.

Я пыталсячтобы уменьшить число до двух цифр, как я впервые начал с нелепой 1000. Затем я попытался изменить способ представления журнала, так как подумал, что, возможно, это была проблема.

Вот как явзятие файлов и помещение их в отдельные списки

Employeesl=[]#sets a list for employees
hrRatel=[]#sets a list for hourly pay rates
hrWorkl=[]#sets a list for hours worked
Employees=open('C:\\MGMT28800\\names.txt') #sets a variable for employees
hrRate=open('C:\\MGMT28800\\rates.txt') #sets a variable for hourly pay rates
hrWork=open('C:\\MGMT28800\\hours.txt') #sets a variable for hours worked
Employeesc=Employees.read()#sets variable to the file
hrRatec=hrRate.read()#sets variable to the file
hrWorkc=hrWork.read()#sets variable to the file
Employeesl=Employeesc.split('\n')#splits the file data into a list
hrRatel=hrRatec.split('\n')#splits the file data into a list
hrWorkl=hrWorkc.split('\n')#splits the file data into a list

Это моя функция для расчета как заработной платы, так и количества отработанных часов

def payCalc(hrRatel,hrWorkl):#create function
        logging.debug('Start of payCalc for iteration (%s)' % (i))
        if hrWorkl[i]<=40:#tells payment for employees with equal to and sub 40 work hours
            z=hrWorkl[i]*hrRatel[i]#equation to solve for payment
            return z
            logging.debug('End of payCalc for iteration (%s)' % (i))
        elif 40<hrWorkl[i]<=80:#payment for those with more than 40 hrs. Accounts for overtime, but restricts more than 80 hrs of work per period
            x=hrWorkl[i]#sets a variable equal to employees work time
            a=x-40# finds how many hours overtime worked
            opay=a*1.5*hrRatel[i]# figures out overtime payment
            b=hrWorkl[i]-a#sets the 40 hours not overtime
            pay=b*hrRatel[i]#calculates the 40 hours of pay at the base rate
            z=pay+opay#adds base and overtime pay
            logging.debug('You will pay '+str(z)+' to '+Employeesl[i]+'.')
            return z
            logging.debug('End of payCalc for iteration (%s)' % (i))
        else:
            raise Exception(Employeesl[i]+' has worked more than 80 hours, totaling to '+str(hrWorkl[i])+'.')
            logging.debug('End of payCalc for iteration (%s)' % (i))

Здесь я называюи проверьте, есть ли в списках несовместимые типы значений, чтобы он вызывал ошибку.

for i in range(len(Employeesl)):#sets a loop to print out the employee follwoed by their specific pay for the pay period
    try:
        if hrRatel[i]==str:
            raise Exception('The rate ('+str(hrRatel[i])+') must be a number')
        else:
            hrRatel[i]=map(float,hrRatel[i])#ensures all rates are floated
        if hrWorkl[i]==str:
            raise Exception('The hours worked ('+str(hrWorkl)+') must be a number')
        else:
            hrWorkl[i]=map(int,hrWorkl[i])#ensures all rates are numbers
        z=payCalc(hrRatel,hrWorkl)#calls the payCalc() function
        Total=Total+z#provides a count of all the salaries added up

    except Exception as err:
        print('An error has occured, '+str(err))

Я ожидаю, что это скажет мне, что Фабио Факерсон проработал более 80 часов, проработав все часы. в файлах написано более 80. Вместо этого, когда я заставляю его работать, скажем, 81 час, он выдает: Произошла ошибка, Фабио Факерсон проработал более 80 часов, всего[8, 1].

Это также дает две ошибки для преобразования строки в число с плавающей точкой, но, насколько мне известно, ничего подобного не должно происходить

Произошла ошибка, не удалось преобразовать строкудержаться на плаву: . Произошла ошибка, не удалось преобразовать строку в число с плавающей точкой:.

Основная проблема, однако, заключается в том, что 81 был преобразован в список, и, по-видимому, он не складывает плату за каждого сотрудника. Подвести итог.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...