您现在的位置是:首页 >技术交流 >【Python】实战:生成无关联单选问卷 csv《社会参与评估表》网站首页技术交流

【Python】实战:生成无关联单选问卷 csv《社会参与评估表》

顾三殇 2023-06-13 04:00:03
简介【Python】实战:生成无关联单选问卷 csv《社会参与评估表》

目录

一、适用场景

二、业务需求 

三、Python 文件 

(1)创建文件

(2)代码示例 

四、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)代码示例 

以下代码主要是生成社会参与评估表,包括评分标准、总分、分级标准等内容。

具体流程如下:

  1. 导入必要的模块:os、csv、itertools。
  2. 定义三个列表 Score_1、Score_2、Score_3,分别表示第1题、第2题、第3题的评分。
  3. 根据题目要求,给出题目描述、评分标准、总分、分级标准等内容。
  4. 配置 csv 文件表格基本参数:文件路径和文件名称、表头。
  5. 检查是否已存在该 csv 文件,如已存在则先删除。
  6. 生成 csv 文件,表格内容未排序。使用 itertools 库中的 product 函数,对三个评分列表进行排列组合,得到所有可能的评分组合。根据评分标准,计算出每个组合的总分和分级,将结果写入 csv 文件中。
  7. 将已存在的 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 评分[社会交往能力]
能力完好0000
能力完好1001
能力完好1010
能力完好1100
能力完好2002
能力完好2011
能力完好2020
能力完好2101
能力完好2110
能力完好2200
轻度受损3003
轻度受损3012
轻度受损3021
轻度受损3030
轻度受损3102
轻度受损3111
轻度受损3120
轻度受损3201
轻度受损3210
轻度受损3300
轻度受损4004
轻度受损4013
轻度受损4022
轻度受损4031
轻度受损4040
轻度受损4103
轻度受损4112
轻度受损4121
轻度受损4130
轻度受损4202
轻度受损4211
轻度受损4220
轻度受损4301
轻度受损4310
轻度受损4400
轻度受损5014
轻度受损5023
轻度受损5032
轻度受损5041
轻度受损5104
轻度受损5113
轻度受损5122
轻度受损5131
轻度受损5140
轻度受损5203
轻度受损5212
轻度受损5221
轻度受损5230
轻度受损5302
轻度受损5311
轻度受损5320
轻度受损5401
轻度受损5410
中度受损6024
中度受损6033
中度受损6042
中度受损6114
中度受损6123
中度受损6132
中度受损6141
中度受损6204
中度受损6213
中度受损6222
中度受损6231
中度受损6240
中度受损6303
中度受损6312
中度受损6321
中度受损6330
中度受损6402
中度受损6411
中度受损6420
中度受损7034
中度受损7043
中度受损7124
中度受损7133
中度受损7142
中度受损7214
中度受损7223
中度受损7232
中度受损7241
中度受损7304
中度受损7313
中度受损7322
中度受损7331
中度受损7340
中度受损7403
中度受损7412
中度受损7421
中度受损7430
中度受损8044
中度受损8134
中度受损8143
中度受损8224
中度受损8233
中度受损8242
中度受损8314
中度受损8323
中度受损8332
中度受损8341
中度受损8404
中度受损8413
中度受损8422
中度受损8431
中度受损8440
重度受损9144
重度受损9234
重度受损9243
重度受损9324
重度受损9333
重度受损9342
重度受损9414
重度受损9423
重度受损9432
重度受损9441
重度受损10244
重度受损10334
重度受损10343
重度受损10424
重度受损10433
重度受损10442
重度受损11344
重度受损11434
重度受损11443
重度受损12444
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。