В настоящее время я пытаюсь прочитать 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 был преобразован в список, и, по-видимому, он не складывает плату за каждого сотрудника. Подвести итог.