Вы можете попробовать приведенное ниже решение на чистом Python:
def getQuarter(q):
q = int(q)
if 1 <= q <= 3:
return 1
elif 4 <= q <= 6:
return 2
elif 7 <= q <= 9:
return 3
else:
return 4
def printHeaders():
print("--- Annual sales report ---")
print("ID\t\t\t",end='')
print("QT1\t\t\t",end='')
print("QT2\t\t\t",end='')
print("QT3\t\t\t",end='')
print("QT4\t\t\t",end='')
print("TOTAL\t\t\t")
def printData(currentId, q1, q2, q3, q4, total):
print(currentId+'\t\t',end='')
print('{0:.2f}'.format(q1)+'\t\t',end='')
print('{0:.2f}'.format(q2)+'\t\t',end='')
print('{0:.2f}'.format(q3)+'\t\t',end='')
print('{0:.2f}'.format(q4)+'\t\t',end='')
print('{0:.2f}'.format(total)+'\t\t')
def printFinal(finalQ1, finalQ2, finalQ3, finalQ4, finalTotal):
print("Total\t\t",end='')
print('{0:.2f}'.format(finalQ1)+"\t\t",end='')
print('{0:.2f}'.format(finalQ2)+"\t\t",end='')
print('{0:.2f}'.format(finalQ3)+"\t\t",end='')
print('{0:.2f}'.format(finalQ4)+"\t\t",end='')
print('{0:.2f}'.format(finalTotal)+"\t\t")
def printMaxSalesperson(maxSalesman):
print("Max sales by salesperson: ID = " + maxSalesman[0] + ", Amount = $" + '{0:.2f}'.format(maxSalesman[1]))
def printMaxQuarterSales(maxQ):
print("Max sales by quarter: Quarter = " + maxQ[1] + ", Amount = $" + '{0:.2f}'.format(maxQ[0]))
def getListData(inFile):
data = [elem.split() for elem in sorted([line for line in inFile], key=lambda elem: elem[0])]
ids = sorted(set([elem[0] for elem in data]))
newData = [[elem for elem in data if elem[0]==item] for item in ids]
return newData
def updateSales(sales,elem,q1,q2,q3,q4):
sales.append([elem[0][0], round(max([q1,q2,q3,q4]),2)])
finalQ1 = finalQ2 = finalQ3 = finalQ4 = finalTotal = 0
sales = []
with open("data.txt", "r") as inFile:
newData = getListData(inFile)
printHeaders()
for elem in newData:
q1 = q2 = q3 = q4 = total = 0.00
currentId = elem[0][0]
for item in elem:
quarter = getQuarter(item[1])
if quarter == 1:
q1 += float(item[2])
elif quarter == 2:
q2 += float(item[2])
elif quarter == 3:
q3 += float(item[2])
else:
q4 += float(item[2])
updateSales(sales,elem,q1,q2,q3,q4)
total = q1 + q2 + q3 + q4
finalQ1 += q1
finalQ2 += q2
finalQ3 += q3
finalQ4 += q4
finalTotal += total
printData(currentId, q1, q2, q3, q4, total)
printFinal(finalQ1, finalQ2, finalQ3, finalQ4, finalTotal)
maxSalesman = max(sales, key=lambda k: k[1])
maxQ = max([finalQ1, '1'],[finalQ2, '2'],[finalQ3, '3'],[finalQ4, '4'], key=lambda elem: elem[0])
printMaxSalesperson(maxSalesman)
printMaxQuarterSales(maxQ)
Вывод выше будет:
--- Annual sales report ---
ID QT1 QT2 QT3 QT4 TOTAL
12345 1893.32 0.00 494.44 322.22 2709.98
23422 1395.99 895.33 0.00 0.00 2291.32
32214 343.50 892.77 777.77 888.88 2902.92
57373 893.55 985.84 256.56 0.00 2135.95
68483 0.00 329.00 1163.40 1224.90 2717.30
99376 788.77 0.00 329.66 1191.22 2309.65
Total 5315.13 3102.94 3021.83 3627.22 15067.12
Max sales by salesperson: ID = 12345, Amount = $1893.32
Max sales by quarter: Quarter = 1, Amount = $5315.13
Не стесняйтесь задавать любые вопросы или, если вам нужныуточнение по коду.