从1000行文本中查找总薪资和平均薪资
我需要写一个Python程序,读取1000行文本,计算每个教授类别(助理教授、副教授、正教授和所有教职员工)的总薪资和平均薪资。这里是问题的描述:
一所大学在 http://cs.armstrong.edu/liang/data/Salary.txt上发布了员工薪资。文件中的每一行包含教职员工的名字、姓氏、职称和薪资(参见练习13.16)。请写一个程序,分别显示助理教授、副教授、正教授和所有教职员工的总薪资,并分别显示助理教授、副教授、正教授和所有教职员工的平均薪资。
这是我目前写的代码:
import urllib.request
def main():
infile = urllib.request.urlopen('http://cs.armstrong.edu/liang/data/Salary.txt')
s = infile.read().decode().splitlines()
asstTotal = 0
asstCount = 0
asscTotal = 0
asscCount = 0
fullTotal = 0
fullCount = 0
for line in s:
if "assistant" in line:
asstCount += 1
asstTotal += int(float(s[3]))
if "associate" in line:
asscCount += 1
asscTotal += int(float(s[3]))
if "full" in line:
fullCount += 1
fullTotal += int(float(s[3]))
allFacTotal = asstTotal + asscTotal + fullTotal
avgAsst = int(asstTotal / asstCount)
avgAssc = int(asscTotal / asscCount)
avgFull = int(fullTotal / fullCount)
avgAll = int(allFacTotal / 1000)
print("Total assistant professor salary is", asstTotal)
print("Total associate professor salary is", asscTotal)
print("Total full professor salary is", fullTotal)
print("Total faculty salary is", allFacTotal)
print("Average assistant professor salary is", avgAsst)
print("Average associate professor salary is", avgAssc)
print("Average full professor salary is", avgFull)
print("Average faculty salary is", avgAll)
main()
我不太确定如何从各个教授的职称中获取薪资,并进行总和和平均计算。任何建议都非常感谢!
结果:
Total assistant professor salary is 24306418
Total associate professor salary is 27235856
Total full professor salary is 27631726
Total faculty salary is 79174000
Average assistant professor salary is 79174
Average associate professor salary is 79174
Average full professor salary is 79174
Average faculty salary is 79174
3 个回答
0
在编程中,有时候我们会遇到一些问题,比如代码运行不正常或者出现错误。这些问题可能是因为我们没有正确理解某些概念或者使用了不合适的代码。
当我们在网上寻找解决方案时,像StackOverflow这样的网站就非常有用。这里有很多程序员分享他们的经验和解决方案,帮助我们解决各种编程难题。
如果你在学习编程,遇到问题不要气馁,记得多看看别人的提问和回答,这样可以帮助你更好地理解编程的世界。
import urllib.request
def main():
infile = urllib.request.urlopen("http://cs.armstrong.edu/liang/data/Salary.txt")
asstSalTotal = 0
asstTotal = 0
asscSalTotal = 0
asscTotal = 0
fullSalTotal = 0
fullTotal = 0
for line in infile.readlines():
data = line.decode().split()
designation = data[2]
if designation == "assistant":
asstSalTotal += float(data[3])
asstTotal += 1
elif designation == "associate":
asscSalTotal += float(data[3])
asscTotal += 1
elif designation == "full":
fullSalTotal += float(data[3])
fullTotal += 1
allSalTotal = asstSalTotal + asscSalTotal + fullSalTotal
allTotal = asstTotal + asscTotal + fullTotal
print("Total Salary:\n\tAssistant:\t%d\n\tAssociate:\t%d\n\tFull:\t%d\n\tAll:\t%d\n\nAvg Salary:\n\tAssistant:\t%d\n\tAssociate:\t%d\n\tFull:\t%d\n\tAll:\t%d\n" % (asstSalTotal, asscSalTotal, fullSalTotal, allSalTotal, asstTotal, asscTotal, fullTotal, allTotal))
main()
0
在python2.7中,你可以使用 urllib2.urlopen
来打开网址,并把不同职位的工资放在一个表格里。
在python3中,你需要用 urllib.request.urlopen
来打开网址,同时把 print ..
改成 print(..)
这种写法。
import urllib2
rs = urllib2.urlopen('http://cs.armstrong.edu/liang/data/Salary.txt')
title_salaries = {}
for line in rs.read().split("\n"):
_, _, title, salary = line.split(' ')
if not title_salaries.has_key(title):
title_salaries[title] = []
title_salaries[title].append(float(salary))
for title, salaries in title_salaries.items():
print title
print 'avg:', sum(salaries) / len(salaries)
print 'total:', sum(salaries)
print
1
这可以通过建立一个字典,记录每个职位的薪水,然后把所有薪水加起来,再除以职位的数量,来计算任何类型的排名。
我的例子是:
import urllib.request
def main():
infile = urllib.request.urlopen('http://cs.armstrong.edu/liang/data/Salary.txt')
s = infile.read().decode().splitlines()
pays = {}
for line in s:
*name, rank, pay = line.split()
pays[rank] = pays.get(rank, []) + [float(pay)]
for rank, sals in pays.items():
avg = sum(sals) / len(sals)
print("{:>10} ({:3}): ${:,.2f}".format(rank.title(), len(sals), avg))
if __name__ == '__main__':
main()
输出结果是:
Associate (344): $83,849.26
Full (349): $102,229.37
Assistant (307): $65,949.55