用python实现职场有害关系检测
2026/6/10 2:46:32 网站建设 项目流程

#!/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 True

elif answer in ('n', 'no', '否', '0'):

return False

else:

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 = 0

hit_details = []

for i, q in enumerate(dim['questions'], start=1):

print(f" {i}. {q}")

if ask_question(" → "):

hits += 1

hit_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, key=lambda 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.txt"

with open(filename, "w", encoding="utf-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感谢使用。")

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询