目录
一、适用场景
二、业务需求
三、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)代码示例
- 以下代码使用了 Python 的 itertools 模块中的 product 函数,用于生成 a、b、c 三个列表的笛卡尔积,即所有可能的组合情况。
- 然后对于每个组合,计算其总分并根据总分判断精神状态等级,并将结果写入到一个 csv 文件中。其中,精神状态等级根据总分的不同而不同,总分为 0 时为 “能力完好”,总分为 1 时为 “轻度受损”,总分为 2-3 时为 “中度受损”,总分为 4-6 时为 “重度受损”,总分大于 6 时为 “其他等级”。
- 最后,使用 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 = csvheader
writer = 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 |