您现在的位置是:首页 >技术交流 >【Python】实战:生成无关联单选问卷 csv《社会参与评估表》网站首页技术交流
【Python】实战:生成无关联单选问卷 csv《社会参与评估表》
简介【Python】实战:生成无关联单选问卷 csv《社会参与评估表》
目录
一、适用场景
实战场景:
- 问卷全部为单选题
- 问卷问题全部为必填
- 问题之间无关联关系
- 每个问题的答案分数不同
- 根据问卷全部问题得分生成总分数
- 根据问卷总分数生成对应判断文案结果
- 生成 csv 文件表格需要设置固定表头
- 表格内容需要根据总分从小到大排列
二、业务需求
社会参与评估表
1. 生活能力 | □ 分 | 0 分,除个人生活自理(如进食、洗漱、穿脱衣物、二便等)外,能做家务(如做饭、洗衣等)或当家管理事务 |
1 分,除个人生活自理外,能做家务,但欠佳,家庭事务安排欠条理 | ||
2 分,个人生活能自理,需在他人帮助下才能做部分家务,但质量欠佳 | ||
3 分,个人基本生活事务能自理(如进食、二便等),在督促下可洗漱 | ||
4 分,个人基本生活事务(如进食、二便等)需部分帮助或完全依赖他人 | ||
2. 工作能力 | □ 分 | 0 分,原来熟悉的脑力工作或体力技巧性工作可照常进行 |
1 分,原来熟悉的脑力工作或体力技巧性工作能力有所下降 | ||
2 分,原来熟悉的脑力工作或体力技巧性工作明显不如以往,部分遗忘 | ||
3 分,对熟练工作只有一些片段保留,技能全部遗忘 | ||
4 分,对以往的知识或技能全部磨灭 | ||
3. 社会交往能力 | □ 分 | 0 分,参与社会,在社会环境有一定的适应能力,待人接物恰当 |
1 分,能适应单纯环境,主动接触人,初见面时难让人发现智力问题,不能理解隐喻语 | ||
2 分,脱离社会,可被动接触,不会主动待人,谈话中很多不适词句,容易上当受骗 | ||
3 分,勉强可与人交往,谈吐内容不清楚,表情不恰当 | ||
4 分,难以与人接触 | ||
社会参与总分 | □ 分 | 上述 3 项得分之和 |
社会参与分级 | □ 级 | 0 能力完好:总分 0-2 分 1 轻度受损:总分 3-5 分 2 中度受损:总分 6-8 分 3 重度受损:总分 9-12 分 |
社会参与分级标准
分级 | 分级名称 | 分级标准 |
0 | 能力完好 | 社会参与总分为 0-2 分 |
1 | 轻度受损 | 社会参与总分为 3-5 分 |
2 | 中度受损 | 社会参与总分为 6-8 分 |
3 | 重度受损 | 社会参与总分为 9-12 分 |
三、Python 文件
(1)创建文件
SocialParticipationForm.py
(2)代码示例
以下代码主要是生成社会参与评估表,包括评分标准、总分、分级标准等内容。
具体流程如下:
- 导入必要的模块:os、csv、itertools。
- 定义三个列表 Score_1、Score_2、Score_3,分别表示第1题、第2题、第3题的评分。
- 根据题目要求,给出题目描述、评分标准、总分、分级标准等内容。
- 配置 csv 文件表格基本参数:文件路径和文件名称、表头。
- 检查是否已存在该 csv 文件,如已存在则先删除。
- 生成 csv 文件,表格内容未排序。使用 itertools 库中的 product 函数,对三个评分列表进行排列组合,得到所有可能的评分组合。根据评分标准,计算出每个组合的总分和分级,将结果写入 csv 文件中。
- 将已存在的 csv 文件进行调整,按表格第 2 列从小到大排序内容。使用 csv 库中的 reader函数读取文件内容,使用 sorted 函数对除表头外的行进行排序,再使用 csv 库中的writerows 函数将排序后的结果写入文件中。
import os
import csv
from itertools import product
# 社会参与评估表
Score_1 = [0, 1, 2, 3, 4]
Score_2 = [0, 1, 2, 3, 4]
Score_3 = [0, 1, 2, 3, 4]
'''
[社会参与评估表问卷问题及答案(得分)]
-- Score_1:第 1 题评分
-- Score_2:第 2 题评分
-- Score_3:第 3 题评分
第 1 题:生活能力()
a.除个人生活自理(如进食、洗漱、穿脱衣物、二便等)外,能做家务(如做饭、洗衣等)或当家管理事务
b.除个人生活自理外,能做家务,但欠佳,家庭事务安排欠条理
c.个人生活能自理,需在他人帮助下才能做部分家务,但质量欠佳
d.个人基本生活事务能自理(如进食、二便等),在督促下可洗漱
f.个人基本生活事务(如进食、二便等)需部分帮助或完全依赖他人
-- 评分标准
a.0 分
b.1 分
c.2 分
d.3 分
f.4 分
第 2 题:工作能力()
a.原来熟悉的脑力工作或体力技巧性工作可照常进行
b.原来熟悉的脑力工作或体力技巧性工作能力有所下降
c.原来熟悉的脑力工作或体力技巧性工作明显不如以往,部分遗忘
d.对熟练工作只有一些片段保留,技能全部遗忘
f.对以往的知识或技能全部磨灭
-- 评分标准
a.0 分
b.1 分
c.2 分
d.3 分
f.4 分
第 3 题:社会交往能力()
a.参与社会,在社会环境有一定的适应能力,待人接物恰当
b.能适应单纯环境,主动接触人,初见面时难让人发现智力问题,不能理解隐喻语
c.脱离社会,可被动接触,不会主动待人,谈话中很多不适词句,容易上当受骗
d.勉强可与人交往,谈吐内容不清楚,表情不恰当
f.难以与人接触
-- 评分标准
a.0 分
b.1 分
c.2 分
d.3 分
f.4 分
'''
'''
[社会参与总分]
-- 评分标准:以上 3 个问题评分之和
'''
'''
[社会参与分级标准]
-- 等级标准:根据社会参与总分分级
0 能力完好:总分 0 - 2 分
1 轻度受损:总分 3 - 5 分
2 中度受损:总分 6 - 8 分
3 重度受损:总分 9 - 12 分
'''
# 配置文件:配置csv文件表格基本参数
# 文件路径和文件名称
filename = r'E:ScoreGradeFormCSVFiles社会参与评估表.csv'
# 表头
csvheader = ['社会参与分级', '社会参与总分', '问题 1 评分[生活能力]', '问题 2 评分[工作能力]', '问题 3 评分[社会交往能力]']
# 删除文件:检查是否已存在该csv文件,如已存在则先删除
if os.path.exists(filename):
os.remove(filename)
# 新建文件:生成csv文件,表格内容未排序
with open(filename, 'a+', encoding='utf-8-sig', newline='') as csvfile_0:
# 生成表头
header = csvheader
writer = csv.writer(csvfile_0)
writer.writerow(header)
# 生成表格内容
for scoreGroup in product(Score_1, Score_2, Score_3):
if 0 <= sum(scoreGroup) <= 2:
grade = '能力完好'
elif 3 <= sum(scoreGroup) <= 5:
grade = '轻度受损'
elif 6 <= sum(scoreGroup) <= 8:
grade = '中度受损'
elif 9 <= sum(scoreGroup) <= 12:
grade = '重度受损'
else:
grade = '其他等级'
writer.writerow([grade, sum(scoreGroup), scoreGroup[0], scoreGroup[1], scoreGroup[2]])
# 编辑文件:将已存在的csv文件进行调整,按表格第2列从小到大排序内容
with open(filename, 'r', encoding='utf-8-sig') as csvfile_1:
rows = list(csv.reader(csvfile_1))
rows[1:] = sorted(rows[1:], key=lambda x: int(x[1]))
with open(filename, 'w', encoding='utf-8-sig', newline='') as csvfile_2:
writer = csv.writer(csvfile_2)
writer.writerows(rows)
四、csv 文件
生成如下结果表格:
社会参与分级 | 社会参与总分 | 问题 1 评分[生活能力] | 问题 2 评分[工作能力] | 问题 3 评分[社会交往能力] |
能力完好 | 0 | 0 | 0 | 0 |
能力完好 | 1 | 0 | 0 | 1 |
能力完好 | 1 | 0 | 1 | 0 |
能力完好 | 1 | 1 | 0 | 0 |
能力完好 | 2 | 0 | 0 | 2 |
能力完好 | 2 | 0 | 1 | 1 |
能力完好 | 2 | 0 | 2 | 0 |
能力完好 | 2 | 1 | 0 | 1 |
能力完好 | 2 | 1 | 1 | 0 |
能力完好 | 2 | 2 | 0 | 0 |
轻度受损 | 3 | 0 | 0 | 3 |
轻度受损 | 3 | 0 | 1 | 2 |
轻度受损 | 3 | 0 | 2 | 1 |
轻度受损 | 3 | 0 | 3 | 0 |
轻度受损 | 3 | 1 | 0 | 2 |
轻度受损 | 3 | 1 | 1 | 1 |
轻度受损 | 3 | 1 | 2 | 0 |
轻度受损 | 3 | 2 | 0 | 1 |
轻度受损 | 3 | 2 | 1 | 0 |
轻度受损 | 3 | 3 | 0 | 0 |
轻度受损 | 4 | 0 | 0 | 4 |
轻度受损 | 4 | 0 | 1 | 3 |
轻度受损 | 4 | 0 | 2 | 2 |
轻度受损 | 4 | 0 | 3 | 1 |
轻度受损 | 4 | 0 | 4 | 0 |
轻度受损 | 4 | 1 | 0 | 3 |
轻度受损 | 4 | 1 | 1 | 2 |
轻度受损 | 4 | 1 | 2 | 1 |
轻度受损 | 4 | 1 | 3 | 0 |
轻度受损 | 4 | 2 | 0 | 2 |
轻度受损 | 4 | 2 | 1 | 1 |
轻度受损 | 4 | 2 | 2 | 0 |
轻度受损 | 4 | 3 | 0 | 1 |
轻度受损 | 4 | 3 | 1 | 0 |
轻度受损 | 4 | 4 | 0 | 0 |
轻度受损 | 5 | 0 | 1 | 4 |
轻度受损 | 5 | 0 | 2 | 3 |
轻度受损 | 5 | 0 | 3 | 2 |
轻度受损 | 5 | 0 | 4 | 1 |
轻度受损 | 5 | 1 | 0 | 4 |
轻度受损 | 5 | 1 | 1 | 3 |
轻度受损 | 5 | 1 | 2 | 2 |
轻度受损 | 5 | 1 | 3 | 1 |
轻度受损 | 5 | 1 | 4 | 0 |
轻度受损 | 5 | 2 | 0 | 3 |
轻度受损 | 5 | 2 | 1 | 2 |
轻度受损 | 5 | 2 | 2 | 1 |
轻度受损 | 5 | 2 | 3 | 0 |
轻度受损 | 5 | 3 | 0 | 2 |
轻度受损 | 5 | 3 | 1 | 1 |
轻度受损 | 5 | 3 | 2 | 0 |
轻度受损 | 5 | 4 | 0 | 1 |
轻度受损 | 5 | 4 | 1 | 0 |
中度受损 | 6 | 0 | 2 | 4 |
中度受损 | 6 | 0 | 3 | 3 |
中度受损 | 6 | 0 | 4 | 2 |
中度受损 | 6 | 1 | 1 | 4 |
中度受损 | 6 | 1 | 2 | 3 |
中度受损 | 6 | 1 | 3 | 2 |
中度受损 | 6 | 1 | 4 | 1 |
中度受损 | 6 | 2 | 0 | 4 |
中度受损 | 6 | 2 | 1 | 3 |
中度受损 | 6 | 2 | 2 | 2 |
中度受损 | 6 | 2 | 3 | 1 |
中度受损 | 6 | 2 | 4 | 0 |
中度受损 | 6 | 3 | 0 | 3 |
中度受损 | 6 | 3 | 1 | 2 |
中度受损 | 6 | 3 | 2 | 1 |
中度受损 | 6 | 3 | 3 | 0 |
中度受损 | 6 | 4 | 0 | 2 |
中度受损 | 6 | 4 | 1 | 1 |
中度受损 | 6 | 4 | 2 | 0 |
中度受损 | 7 | 0 | 3 | 4 |
中度受损 | 7 | 0 | 4 | 3 |
中度受损 | 7 | 1 | 2 | 4 |
中度受损 | 7 | 1 | 3 | 3 |
中度受损 | 7 | 1 | 4 | 2 |
中度受损 | 7 | 2 | 1 | 4 |
中度受损 | 7 | 2 | 2 | 3 |
中度受损 | 7 | 2 | 3 | 2 |
中度受损 | 7 | 2 | 4 | 1 |
中度受损 | 7 | 3 | 0 | 4 |
中度受损 | 7 | 3 | 1 | 3 |
中度受损 | 7 | 3 | 2 | 2 |
中度受损 | 7 | 3 | 3 | 1 |
中度受损 | 7 | 3 | 4 | 0 |
中度受损 | 7 | 4 | 0 | 3 |
中度受损 | 7 | 4 | 1 | 2 |
中度受损 | 7 | 4 | 2 | 1 |
中度受损 | 7 | 4 | 3 | 0 |
中度受损 | 8 | 0 | 4 | 4 |
中度受损 | 8 | 1 | 3 | 4 |
中度受损 | 8 | 1 | 4 | 3 |
中度受损 | 8 | 2 | 2 | 4 |
中度受损 | 8 | 2 | 3 | 3 |
中度受损 | 8 | 2 | 4 | 2 |
中度受损 | 8 | 3 | 1 | 4 |
中度受损 | 8 | 3 | 2 | 3 |
中度受损 | 8 | 3 | 3 | 2 |
中度受损 | 8 | 3 | 4 | 1 |
中度受损 | 8 | 4 | 0 | 4 |
中度受损 | 8 | 4 | 1 | 3 |
中度受损 | 8 | 4 | 2 | 2 |
中度受损 | 8 | 4 | 3 | 1 |
中度受损 | 8 | 4 | 4 | 0 |
重度受损 | 9 | 1 | 4 | 4 |
重度受损 | 9 | 2 | 3 | 4 |
重度受损 | 9 | 2 | 4 | 3 |
重度受损 | 9 | 3 | 2 | 4 |
重度受损 | 9 | 3 | 3 | 3 |
重度受损 | 9 | 3 | 4 | 2 |
重度受损 | 9 | 4 | 1 | 4 |
重度受损 | 9 | 4 | 2 | 3 |
重度受损 | 9 | 4 | 3 | 2 |
重度受损 | 9 | 4 | 4 | 1 |
重度受损 | 10 | 2 | 4 | 4 |
重度受损 | 10 | 3 | 3 | 4 |
重度受损 | 10 | 3 | 4 | 3 |
重度受损 | 10 | 4 | 2 | 4 |
重度受损 | 10 | 4 | 3 | 3 |
重度受损 | 10 | 4 | 4 | 2 |
重度受损 | 11 | 3 | 4 | 4 |
重度受损 | 11 | 4 | 3 | 4 |
重度受损 | 11 | 4 | 4 | 3 |
重度受损 | 12 | 4 | 4 | 4 |
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。