I am a teacher!

导航

习题解析之:程序员问卷调查

【问题描述】

题目文件中保存来自约60000条程序员的问卷调查记录(部分数据),数据来源:2020 Stack Overflow Developer Survey‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

调查问题为:

image

文件中数据格式为:

image

 每行数据分为两部分,调查编号和工作描述

请输入下列分类,统计问卷数据中下列各项分类的回答记录条数:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

分类 回答
程序员 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('错误输入')

posted on 2025-12-03 16:35  aTeacher  阅读(1)  评论(0)    收藏  举报