> 文章列表 > 【Python】实战:生成无关联单选问卷 csv《精神状态评估表》

【Python】实战:生成无关联单选问卷 csv《精神状态评估表》

【Python】实战:生成无关联单选问卷 csv《精神状态评估表》

目录

一、适用场景

二、业务需求

三、Python 文件

(1)创建文件

(2)代码示例

四、csv 文件



一、适用场景

实战场景:

  • 问卷全部为单选题
  • 问卷问题全部为必填
  • 问题之间无关联关系
  • 每个问题的答案分数不同
  • 根据问卷全部问题得分生成总分
  • 根据问卷总分数生成对应判断文案结果
  • 生成 csv 文件表格需要设置固定表头
  • 表格内容需要根据总分从小到大排列


二、业务需求

精神状态评估表

认知功能

口答面试测验

“我说三样东西,请重复一遍,并记住,一会儿会问您”:苹果、手表、国旗

(1) 画钟测验:“请您在这儿画一个圆形的时钟,在时钟上标出 10 点 45 分”

(2) 回忆词语:“现在请您告诉我,刚才我要您记住的三样东西是什么?”

答:_______、________、________(不必按顺序)

评分

□分

0 分:画钟正确(画出一个闭锁圆,指针位置准确),且能回忆出 2-3 个词

1 分:画钟错误(画的圆不闭锁,或指针位置不准确),或只回忆出 0-1 个词

2 分:已确诊为认知障碍,如老年痴呆

攻击行为

□分

0 分:无身体攻击行为(如打/踢/推/咬/抓/摔东西)和语言攻击行为(如骂人、语言威胁、尖叫)

1 分:每月有几次身体攻击行为,或每周有几次语言攻击行为

2 分:每周有几次身体攻击行为,或每日有语言攻击行为

抑郁症状

□分

0 分:无

1 分:情绪低落、不爱说话、不爱梳洗、不爱活动、表情淡漠

2 分:有自杀念头或自杀行为、自伤行为

精神状态总分

□分

上述 3 个项目得分之和

精神状态分级

□级

0 能力完好:总分为 0 分

1 轻度受损:总分为 1 分

2 中度受损:总分 2-3 分

3 重度受损:总分 4-6 分

精神状态分级标准

分级

分级名称

分级标准

0

能力完好

精神状态总分为 0 分

1

轻度受损

精神状态总分为 1 分

2

中度受损

精神状态总分为 2~3 分

3

重度受损

精神状态总分为 4~6 分



三、Python 文件

(1)创建文件

MentalityForm.py


(2)代码示例

  1. 以下代码使用了 Python 的 itertools 模块中的 product 函数,用于生成 a、b、c 三个列表的笛卡尔积,即所有可能的组合情况。
  2. 然后对于每个组合,计算其总分并根据总分判断精神状态等级,并将结果写入到一个 csv 文件中。其中,精神状态等级根据总分的不同而不同,总分为 0 时为 “能力完好”,总分为 1 时为 “轻度受损”,总分为 2-3 时为 “中度受损”,总分为 4-6 时为 “重度受损”,总分大于 6 时为 “其他等级”。
  3. 最后,使用 with 语句打开 csv 文件,并将结果写入到文件中。
import os
import csv
from itertools import product# 精神状态评估表
Score_1 = [0, 1, 2]
Score_2 = [0, 1, 2]
Score_3 = [0, 1, 2]'''
[精神状态评估表问卷问题及答案(得分)]
-- Score_1:问题 1 评分
-- Score_2:问题 2 评分
-- Score_3:问题 3 评分第 1 题:认知功能()分
a.0   b.1   c.2
-- 口答面试测验
“我说三样东西,请重复一遍,并记住,一会儿会问您”:苹果、手表、国旗
(1) 画钟测验:“请您在这儿画一个圆形的时钟,在时钟上标出 10 点 45 分”
(2) 回忆词语:“现在请您告诉我,刚才我要您记住的三样东西是什么?” (不必按顺序)
-- 评分标准
0 分:画钟正确(画出一个闭锁圆,指针位置准确),且能回忆出 2-3 个词
1 分:画钟错误(画的圆不闭锁,或指针位置不准确),或只回忆出 0-1 个词
2 分:已确诊为认知障碍,如老年痴呆第 2 题:攻击行为()分
a.0   b.1   c.2
-- 评分标准
0 分:无身体攻击行为(如打/踢/推/咬/抓/摔东西)和语言攻击行为(如骂人、语言威胁、尖叫)
1 分:每月有几次身体攻击行为,或每周有几次语言攻击行为
2 分:每周有几次身体攻击行为,或每日有语言攻击行为第 3 题:抑郁症状()分
a.0   b.1   c.2
-- 评分标准
0 分:无
1 分:情绪低落、不爱说话、不爱梳洗、不爱活动、表情淡漠
2 分:有自杀念头或自杀行为、自伤行为
''''''
[精神状态总分]
-- 评分标准:以上 3 个问题评分之和
''''''
[精神状态分级标准]
-- 等级标准:根据精神状态总分分级
0 能力完好:总分 0 分
1 轻度受损:总分 1 分
2 中度受损:总分 2 - 3 分
3 重度受损:总分 4 - 6 分
'''# 配置文件:配置csv文件表格基本参数
# 文件路径和文件名称
filename = r'E:\\ScoreGradeForm\\CSVFiles\\精神状态评估表.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 = csvheaderwriter = csv.writer(csvfile_0)writer.writerow(header)# 生成表格内容for scoreGroup in product(Score_1, Score_2, Score_3):if sum(scoreGroup) == 0:grade = '能力完好'elif sum(scoreGroup) == 1:grade = '轻度受损'elif 2 <= sum(scoreGroup) <= 3:grade = '中度受损'elif 4 <= sum(scoreGroup) <= 6: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 1 2
中度受损 3 0 2 1
中度受损 3 1 0 2
中度受损 3 1 1 1
中度受损 3 1 2 0
中度受损 3 2 0 1
中度受损 3 2 1 0
重度受损 4 0 2 2
重度受损 4 1 1 2
重度受损 4 1 2 1
重度受损 4 2 0 2
重度受损 4 2 1 1
重度受损 4 2 2 0
重度受损 5 1 2 2
重度受损 5 2 1 2
重度受损 5 2 2 1
重度受损 6 2 2 2