习题解析之:程序员问卷调查
【问题描述】
题目文件中保存来自约60000条程序员的问卷调查记录(部分数据),数据来源:2020 Stack Overflow Developer Survey
调查问题为:

文件中数据格式为:

每行数据分为两部分,调查编号和工作描述
请输入下列分类,统计问卷数据中下列各项分类的回答记录条数:
分类 回答
程序员 I am a developer by profession
程序爱好者 I code primarily as a hobby
程序初学者 I am a student who is learning to code
编程相关者 "I am not primarily a developer, but I write code sometimes as part of my work"
非程序员 "I used to be a developer by profession, but no longer am"
空白 NA
如果输入为记录,输出所有记录条数
如果不是以上的输入,则输出错误输入
输入 输出
示例 1 成员 错误输入
示例 2 程序爱好者 程序爱好者:23457条
示例 3 记录 总计:66887条
示例 4 空白 空白:4567条
【编程思路】
本题是字典的典型应用。创建一个字典,字典中的键值对为:各分类的英文描述作为键,相应回答次数作为值。
编写的源程序如下:
#不允许修改。fopen函数打开文件,并返回包含文件数据一个列表ls,
def fopen(name):
ls=[]
with open(name,'r',encoding = 'UTF-8') as f:
for i in f.readlines()[1:]:
ls.append(i.strip().split(',',maxsplit=1))
return ls
lt = fopen('step5/survey.csv') #不允许修改,打开题目文件,并将返回的数据列表赋值给lt
d = {}
for x in lt:
d[x[1]] = d.get(x[1],0) + 1
s = input()
if s == '程序员':
print(f'程序员:{d.get("I am a developer by profession",0)}条')
elif s == '程序爱好者':
print(f'程序爱好者:{d.get("I code primarily as a hobby",0)}条')
elif s == '程序初学者':
print(f'程序初学者:{d.get("I am a student who is learning to code",0)}条')
elif s == '编程相关者':
t = '"I am not primarily a developer, but I write code sometimes as part of my work"'
print(f'编程相关者:{d.get(t,0)}条')
elif s == '非程序员':
t = '"I used to be a developer by profession, but no longer am"'
print(f'非程序员:{d.get(t,0)}条')
elif s == '记录':
print(f'总计:{len(lt)}条')
elif s == '空白':
print(f'空白:{d.get("NA",0)}条')
else:
print('错误输入')
浙公网安备 33010602011771号