用python实现职场有害关系检测 #!/usr/bin/env python3# -*- coding: utf-8 -*-职场关系健康度评估工具反职场PUA版基于五个维度、20个典型危险信号帮助用户识别职场中的有毒关系。import sys# 定义五个维度及其权重、问题列表DIMENSIONS [{name: 恩情对等度,weight: 0.25,questions: [对方是否经常主动提起曾经请你吃过饭、送过小礼物或帮过小忙,对方在物质或时间上的付出是否远小于ta从你身上获得的利益,当你拒绝对方某个要求时对方是否指责你“忘恩负义”或“不懂感恩”,对方是否常用“我对你那么好”作为理由让你服从ta的意愿]},{name: 责任归属,weight: 0.25,questions: [当你按正常流程请假或申请某事时对方是否经常“忘记”处理却反过来责怪你,对方是否曾口头承诺某些待遇如底薪、补贴、提成事后单方面修改或不认账,工作中出现问题时对方是否总能找到理由把责任推到你身上,对方是否从不承认自己有任何错误永远表现得“正确”]},{name: 边界尊重,weight: 0.20,questions: [离职或调岗后对方是否依然频繁通过私人方式联系你非必要公事,对方是否倾向于使用微信、个人手机等私人渠道沟通而非公司官方渠道,对方是否打听你的下一份工作去向或其他私人生活细节,对方是否在非工作时间或非工作场所突然出现如上门、蹲点等]},{name: 沟通方式,weight: 0.15,questions: [对方是否说过贬低你人格或否定你价值的话例如“你在家也没事”,对方是否常用居高临下的姿态和你说话例如“来领个东西”“给你个机会”,对方是否表现出对你的时间不尊重认为你的时间可以随意占用,对方沟通中是否经常出现命令式句式“你应该”“你必须”“你不该”]},{name: 利益动机,weight: 0.15,questions: [对方是否通过“拉你入职/入伙”获得了直接的经济奖励人头费、推荐奖等,对方是否鼓励你“全靠个人努力”而不提供必要的支持或资源,对方的利益是否建立在让你付出更多金钱、时间或健康的基础上,当你离开后对方是否更在意“失去利益”而不是“失去你这个人”]}]# 神吐槽字典根据最严重的维度输出一句梗ROAST_TEXTS {恩情对等度: ta请你吃了四顿饭你要用一辈子还。这高利贷比网贷狠。,责任归属: 在ta的世界里地球不转都是你的错。,边界尊重: ta以为你离职了还是ta的电子宠物。,沟通方式: ta的沟通方式贬低你、命令你、然后说你开不起玩笑。,利益动机: 你不是同事你是ta的耗材提款机。}# 正常人思维参照供用户参考不是指令NORMAL_GUIDE {恩情对等度: {think: 请吃饭是情分不是投资。如果对方反复提会觉得不太对劲。,action: 会说“那顿饭是我自己愿意请的你不用放心上。” 如果对方继续道德绑架会减少来往。},责任归属: {think: 流程我走了你忘了是你的问题责任不在我。,action: 会说“我按流程请过假了你没处理。” 不会因为对方甩锅而自我怀疑。},边界尊重: {think: 离职就是结束工作关系不是结束人生。,action: 不加微信、不接私人电话、只说“有事走官方渠道”。对方上门直接报警。},沟通方式: {think: 沟通是平等的。你居高临下是你的问题不是我的问题。,action: 会说“请你注意说话方式。” 不改就结束对话走人。},利益动机: {think: 你招我进来你给我发工资这是交易。你从我身上赚钱我不欠你。,action: 算清楚账不对等就直接走人不解释。}}def ask_question(question_text):向用户提问返回 True 表示“是”False 表示“否”while True:answer input(f{question_text} (y/n): ).strip().lower()if answer in (y, yes, 是, 1):return Trueelif answer in (n, no, 否, 0):return Falseelse:print( 请输入 y 或 n。)def get_normal_comparison(worst_dim_name, user_score):根据最严重的维度生成正常人思维参照guide NORMAL_GUIDE.get(worst_dim_name, {think: 会先保护自己的感受不会因为别人的错误而自我怀疑。,action: 会设立边界该拒绝就拒绝该走人就走人。})if user_score 20:severity 你的情况已经非常严重。正常人遇到同样的事不会忍到现在。elif user_score 40:severity 你的情况已经比较严重。正常人到了这个程度基本都会选择离开或反击。else:severity 你的情况有一些问题。正常人可能会再观察一下但不会一直忍着。return f【正常人会怎么做】针对你最严重的维度{worst_dim_name} 温馨提示“正常人”在这里不是道德标准而是一个参照系。当你反复自我怀疑“是不是我想多了”时看看一个没有受过PUA训练的正常人会怎么想、怎么做可以帮助你判断是你的感受出了问题还是对方的行为出了问题。以下内容供你参考不是指令。 正常人会这样想{guide[think]} 正常人会这样说/做{guide[action]} 小结{severity}def evaluate():print(\n *60)print(职场关系健康度评估工具反职场PUA版)print(请根据您对**当前或最近一段职场关系**的真实感受回答以下问题。)print(每个问题回答 y (是) 或 n (否)。)print(*60 \n)dimension_scores []for dim in DIMENSIONS:print(f\n--- 【{dim[name]}】维度权重{int(dim[weight]*100)}% ---)hits 0hit_details []for i, q in enumerate(dim[questions], start1):print(f {i}. {q})if ask_question( → ):hits 1hit_details.append(q)dim_score max(0, 100 - hits * 25)dimension_scores.append({name: dim[name],raw_score: dim_score,weighted_score: dim_score * dim[weight],hits: hits,hit_details: hit_details})# 计算总分total_score sum(d[weighted_score] for d in dimension_scores)# 找出最严重的维度原始得分最低worst_dim min(dimension_scores, keylambda x: x[raw_score])worst_name worst_dim[name]roast ROAST_TEXTS.get(worst_name, 这段关系有点迷建议你多留个心眼。)# 确定等级和建议if total_score 80:grade 健康color advice 关系整体良好继续保持健康的边界和沟通。elif total_score 60:grade 亚健康color advice 关系中存在一些危险信号建议留意并尝试沟通改善。elif total_score 40:grade 预警color advice 已检测到多个危险信号需要提高警惕考虑减少接触或寻求外部意见。elif total_score 20:grade 高度有毒color advice 这段关系对你伤害较大强烈建议减少私人接触必要时走官方渠道。else:grade 极度有毒color ⚫advice 立即物理隔离拒绝私下沟通只通过可留痕的官方渠道联系。# 输出用户报告print(\n *60)print(【你的评估报告】)print(*60)for d in dimension_scores:print(f\n{d[name]}: 得分 {d[raw_score]:.0f} / 100 (命中 {d[hits]} 个危险信号))if d[hit_details]:print( 命中的问题)for detail in d[hit_details]:print(f • {detail})print(f\n{*40})print(f总分: {total_score:.1f} / 100)print(f健康等级: {color} {grade})# 神吐槽仅当分数低于80时显示if total_score 80:print(f\n 神吐槽{roast})print(f\n建议: {advice})# 正常人对比仅当分数低于80时显示if total_score 80:normal_comparison get_normal_comparison(worst_name, total_score)print(\n *60)print(normal_comparison)print(*60)else:print(\n 你的得分在健康范围内。继续保持你做得对。)# 保存报告save input(\n是否将报告保存为文本文件(y/n): ).strip().lower()if save in (y, yes, 是, 1):filename workplace_health_report.txtwith open(filename, w, encodingutf-8) as f:f.write(职场关系健康度评估报告\n)f.write(*60 \n)f.write(\n【你的评估报告】\n)for d in dimension_scores:f.write(f\n{d[name]}: {d[raw_score]:.0f}/100 (命中{d[hits]}个)\n)if d[hit_details]:f.write( 问题\n)for detail in d[hit_details]:f.write(f - {detail}\n)f.write(f\n总分: {total_score:.1f}/100\n)f.write(f等级: {grade}\n)if total_score 80:f.write(f吐槽: {roast}\n)f.write(f建议: {advice}\n)if total_score 80:f.write(\n【正常人会怎么做】\n)f.write(f针对最严重的维度{worst_name}\n)guide NORMAL_GUIDE.get(worst_name, {})f.write(f\n想{guide.get(think, )}\n)f.write(f做{guide.get(action, )}\n)print(f报告已保存为 {filename})else:print(报告未保存。)if __name__ __main__:evaluate()print(\n感谢使用。)