Меня смущает моя функция print (tmp [3]) элемента в наборе. Когда печатается элемент tmp [3], он дает мне две строки: одна со значением, а другая пустая. Все работает до строки 132.
Цель программы - напечатать сводный отчет о заработной плате, основанный на информации из предыдущих программ (с разными ставками). Вы должны использовать отдельные функции для выполнения следующего:
Вычисление обычных отработанных часов (40 часов и меньше) Вычисление отработанных сверхурочных часов (тех, которые превышают 40 часов) Вычисление регулярной оплаты (обычные часы, умноженные на регулярную оплату) Вычислить оплата сверхурочной работы (сверхурочные часы, умноженные на обычную оплату, умноженную на 1,5). Вычислите сумму выплаты брутто. Вычислите сумму удержанного федерального налога (15,1% валовой заработной платы). Вычислите сумму удержанного государственного налога (5,5% валовой заработной платы). (1,2% от заработной платы брутто) Вычислить сумму удерживаемого социального обеспечения (4,8% от заработной платы брутто) Вычислить общие отчисления (федеральный налог + налог штата + медицинское обслуживание + социальное обеспечение) Вычислить заработную плату net (заработная плата брутто - удержания) Вычислить общая (общая для всех) net оплата Распечатать (на экран) чистый итоговый отчет (см. вывод выше) Распечатать (на экран) общую сумму net оплата.
Я нашел функции для версии на основе ввода, поэтому мне было сложно извлечь данные из CSV и d используйте его в функциях.
ЕСЛИ вам нужно более простое копирование и прошивку программы, аналогичной этой, вот ссылка: Прочитать записи из файла CSV и распечатать отчет
Ожидаемый результат print (tmp [3]) - «10». Фактический результат .. «10». Я не знаю, почему он печатает лишнюю строку. Я думаю, что признаком этой проблемы является невозможность рассчитать регулярную оплату = Payrate * Horked. Ожидаемый результат - 420. 42 (зарплата) * 10 (часы) = 420 Вот ошибка в строке 133 «TypeError: невозможно умножить последовательность на не-int типа 'float'» в строке 132. Это домашнее задание. и я просто ищу решение этой ошибки, поэтому размещение всей моей программы кажется ненужным.
Вот файл csv:
First, Last, Hours, Pay
Matthew, Hightower, 42, 10
Samuel, Jackson, 53, 12.58
Catherine, Jones, 35, 19.43
Это вся программа. def main ():
results = get_data("employeestest.csv")
payrollSummaryReport(results)
def get_data(fname):
Function returns the dictionary with following
format:
{ 0 : {
"fname": "...",
"lname": "...",
"gross": "...",
},
1 : {
....,
,,,,
},
}
result = {} # возвращаемое значение i = 0 # вы можете заархивировать range (), если хотите, используя open (fname, 'r') как f:
for line in f.readlines()[1:]:
result[i] = {}
tmp = line.split(",") # list of values from file
# access file values by their index, e.g.
# tmp[0] -> first name
# tmp[1] -> last name
# tmp[2] -> hours
# tmp[3] -> pay rate
employeeRegularHours, employeeOvertimeHours = calculateRegularHours(tmp[2])
employeeOvertimeHours = calculateOvertimeHours(tmp[2])
employeeTotalHours = calculateTotalHours(employeeRegularHours, employeeOvertimeHours)
print(tmp[3])
This is were I print the item but it comes out to
"10
"
I don't know why it skips a line. I found this error through this "TypeError:can't multiply sequence by non-int of type 'float'" at line 132
#print(employeeRegularHours)
regularPayAmount = calculateRegularPay(tmp[3], employeeRegularHours)
overtimePayAmount = calculateOvertimePay(tmp[3], employeeOvertimeHours)
grossPayAmount = calculateGrossPay(regularPayAmount, overtimePayAmount)
federalTaxWithheld = calculateFederalTax(grossPayAmount)
stateTaxWithheld = calculateStateTax(grossPayAmount)
medicareTaxWithheld = calculateMedicareTax(grossPayAmount)
socSecTaxWithheld = calculateSocSecTax(grossPayAmount)
totalTaxesWithheld = calculateTotalTaxes(federalTaxWithheld, stateTaxWithheld,
medicareTaxWithheld, socSecTaxWithheld)
netPayAmount = calculateNetPay(grossPayAmount, totalTaxesWithheld)
#(calculateOvertimePay, calculateTotalHours) =
#etc.) and store the results in dictionary
# e.g:
result[i]["fname"] = tmp[0]
result[i]["lname"] = tmp[1]
result[i]["hours"] = tmp[2]
result[i]["payrate"] = tmp[3]
# ...
# do calculations for report
# ...
result[i]["regular"] = employeeRegularHours
result[i]["overtime"] = employeeOvertimeHours
result[i]["totalhours"] = employeeTotalHours
result[i]["regPay"] = regularPayAmount
result[i]["overPay"] = overtimePayAmount
result[i]["gross"] = grossPayAmount
result[i]["fedtax"] = federalTaxWithheld
result[i]["stateTax"] = stateTaxWithheld
result[i]["medTax"] = medicareTaxWithheld
result[i]["socsectax"] = socSecTaxWithheld
result[i]["totaltax"] = totalTaxesWithheld
result[i]["netpay"] = netPayAmount
i += 1
return result
def calculateRegularHours(employeeHoursWorked) :
#print(employeeHoursWorked)
if float(employeeHoursWorked) < 40.0 :
employeeRegularHours = employeeHoursWorked
employeeOvertimeHours = 0.0
else:
employeeRegularHours = 40.0
employeeOvertimeHours = 0.0
#employeeOvertimeHours = employeeHoursWorked - 40.0
return employeeRegularHours, employeeOvertimeHours
def calculateOvertimeHours(employeeHoursWorked) :
if float(employeeHoursWorked) > 40 :
#float(employeeOvertimeHours) = employeeHoursWorked - 40
#print(employeeHoursWorked)
employeeOvertimeHours = 0.0
else :
employeeOvertimeHours = 0
return employeeOvertimeHours
def calculateTotalHours(employeeRegularHours, employeeOvertimeHours) :
employeeTotalHours = employeeRegularHours #+ employeeOvertimeHours
return employeeTotalHours
def calculateRegularPay(employeePayRate, employeeHoursWorked) :
regularPayAmount = employeePayRate * employeeHoursWorked
return regularPayAmount
def calculateOvertimePay(employeePayRate, employeeOvertimeHours) :
overtimePayRate = 1.5
overtimePayAmount = (employeePayRate * employeeOvertimeHours) *
overtimePayRate
return overtimePayAmount
def calculateGrossPay(regularPayAmount, overtimePayAmount) :
grossPayAmount = regularPayAmount + overtimePayAmount
return grossPayAmount
def calculateFederalTax(grossPayAmount) :
federalTaxRate = 0.151
federalTaxWithheld = grossPayAmount * federalTaxRate
return federalTaxWithheld
def calculateStateTax(grossPayAmount) :
stateTaxRate = 0.055
stateTaxWithheld = grossPayAmount * stateTaxRate
return stateTaxWithheld
def calculateMedicareTax(grossPayAmount) :
medicareTaxRate = 0.012
medicareTaxWithheld = grossPayAmount * medicareTaxRate
return medicareTaxWithheld
def calculateSocSecTax(grossPayAmount) :
socSecTaxRate = 0.048
socSecTaxWithheld = grossPayAmount * socSecTaxRate
return socSecTaxWithheld
def calculateTotalTaxes(federalTaxWithheld, stateTaxWithheld,
medicareTaxWithheld, socSecTaxWithheld) :
totalTaxesWithheld = federalTaxWithheld + stateTaxWithheld +
medicareTaxWithheld + socSecTaxWithheld
return totalTaxesWithheld
def calculateNetPay(grossPayAmount, totalTaxesWithheld) :
netPayAmount = grossPayAmount - totalTaxesWithheld
return netPayAmount
def payrollSummaryReport(vals):
print()
print("\t\t\t\t\t\tPayroll Summary Report")
print("%-12s%-12s%-8s%-10s%-10s%-12s%-10s%-11s%-13s%-10s" %\
("LastName", "FirstName", "Hours", "RegHours", "OTHours", "RegPay", "OTPay", "GrossPay", "Deductions", "NetPay"))
for i in vals:
print("%-12s%-12s%-8.2f%-10.2f%-10.2f$%-11.2f$%-9.2f$%-10.2f$%-12.2f$%-10.2f" %\
(vals[i]["fname"], vals[i]["lname"], vals[i]["gross"]))
main ()
[Expected Output][1]
Payroll Summary Report
Фамилия Имя Часы Обычные часы Сверхурочные часы
Хайтауэр Мэтью 42,0 40,0 2,0 400,0 30,0 430,00 107,07 322,93 Джексон Сэмюэл 53,0 40,0 13,0 506,0 246,68 752,67 187,42 565,25 Джонс Кэтрин 35,0 35,0 0,0 680,05 0,0 680,05 169,33 510,72
Итого Net Заработная плата 1398,90
Регулярная заработная плата OT Отчисления из заработной платы брутто Net Заработная плата