编写程序对比一帆风顺和历经波折两种状态下的作品风格,利用低谷心境打造差异化创意。

顺境与低谷的双面镜:用 Python 对比两种心境下的作品风格,把"至暗时刻"变成创意差异化引擎。

说明:本文为纯技术实践分享,不涉及任何课程推广、营销引流或商业产品。所有代码可在本地离线运行。

一、实际应用场景描述

在《心理健康与创新能力》课程中,有一个让我久久不能平静的发现:"人在顺境中产出的作品,往往精致但趋同;而在低谷中产出的作品,往往粗糙但独特。"

教授播放了两段对比素材:同一位摄影师在事业巅峰期拍摄的时尚大片,和在抑郁症康复期拍摄的街头快照。前者构图完美、光线精准、无可挑剔——但也"没什么记忆点"。后者画面摇晃、曝光不准、人物表情模糊——但每一张都让人移不开眼睛。

他说了一句我至今记得的话:"顺境让人追求正确,低谷让人追求真实。而真实,才是差异化的唯一来源。"

这句话像一根针扎进了我的日常。我回顾了自己的代码仓库:

- 状态好的时候写的代码:架构清晰、注释完整、测试覆盖率 90%、CI/CD 流水线绿得发亮——但拿给别人看,得到的评价通常是"嗯,写得不错"。

- 状态差的时候写的代码:一个周六凌晨三点,睡不着,爬起来写的一个小脚本——没有测试、没有文档、变量名全是 a/b/c——但它解决了一个我自己都没意识到的问题。后来这段代码被我改造成了公司内部工具,现在每天有几十个人在用。

我最好的作品,几乎全部诞生在状态最差的日子里。

但问题是:低谷中的作品通常被我自己嫌弃。写完就丢在那儿,觉得"这什么垃圾",永远不会拿出来给人看。我一直在用顺境的标准去评判低谷的产物——当然会觉得它不合格。

于是我写了一个本地命令行工具:

系统性地记录你在"顺境"和"低谷"两种心境下产出的作品,从多个维度对比它们的风格差异,识别出低谷作品的独特基因,并有意识地将其转化为你的差异化创意标签。

典型使用场景:

- 每次完成一个作品(代码/文章/设计/任何创作),记录当时的心境状态和作品特征

- 程序自动归类到"顺境集"或"低谷集"

- 对比两组作品在风格、深度、独特性上的差异

- 提取低谷作品的"差异化基因",生成创作建议

- 所有数据保存在本地,不上传、不联网

二、引入痛点

在创作和心理健康的互动关系中,存在着三个被普遍忽略的问题:

1. 顺境的"甜蜜陷阱"

人在状态好时,执行力强、审美在线、工具熟练。但心理学中的"功能固着"(Functional Fixedness)在顺境中更容易出现——你用已知的正确方式做事,不太会跳出框架。结果是:你的作品"没问题",但也"没惊喜"。课程中将这种现象称为"高功能平庸"。

2. 低谷作品的自我否定循环

低谷中产出的作品通常伴随着强烈的自我怀疑:"我今天状态这么差,写出来的东西肯定不行。"这种预设导致两个后果:一是直接放弃不写,二是写出来也不敢示人。但实际上,低谷恰恰打破了你的"习惯性正确"——你不再追求完美,反而更容易触碰到一些平时被压抑的表达。

3. 缺乏系统化的风格对比

大多数创作者从未认真对比过自己在不同心境下的产出差异。你觉得自己"风格统一",但其实你的顺境作品和低谷作品可能有着截然不同的气质。如果能看清这种差异,你就可以有意识地选择何时调用哪种风格——而不是被动地等待状态来找你。

我们需要一个工具来:

- 客观地记录不同心境下的作品特征

- 量化对比顺境与低谷作品的风格差异

- 识别低谷作品的"差异化基因"

- 将低谷中的创造力转化为可复用的创作策略

三、核心逻辑讲解

本程序的核心是"心境-作品风格对比引擎",逻辑流程如下:

[记录每次创作:心境 + 作品特征 + 自评]

[自动归入"顺境集"或"低谷集"]

[多维度对比:复杂度/实验性/情感浓度/独特性]

[提取低谷作品的差异化基因]

[生成"低谷风格"创作建议]

[长期追踪:你的差异化标签是什么]

关键设计点

1. 心境的五维评估

每次创作时,记录五个维度的状态(1-5分):

-

"energy":精力充沛度

-

"mood":情绪积极度

-

"confidence":自我确信度

-

"clarity":思路清晰度

-

"pressure":外部压力感

综合得分 ≥ 16 → 归入"顺境集"

综合得分 ≤ 10 → 归入"低谷集"

中间地带 → "平近期"(不作为对比样本)

2. 作品的六维风格标注

每条作品记录标注六个风格维度(1-5分):

-

"complexity":结构复杂度(精巧/繁复 vs 简单/直接)

-

"experiment":实验性(突破常规 vs 遵循惯例)

-

"emotion":情感浓度(克制/冷静 vs 浓烈/外露)

-

"uniqueness":独特性(像别人的 vs 只属于你的)

-

"polish":完成度/打磨程度

-

"risk":冒险程度(安全牌 vs 险棋)

3. 对比分析的核心指标

程序计算两组作品在每个维度上的平均分,重点关注:

- 实验性差距:低谷作品是否比顺境作品更具实验性?

- 情感浓度差距:低谷作品是否情感更浓烈?

- 独特性差距:低谷作品是否更难被替代?

- 完成度与独特性的反比关系:低谷作品是否"越糙越独特"?

4. "差异化基因"提取

当低谷作品在"独特性"和"实验性"上显著高于顺境作品时,程序会提取这些作品的共性标签,生成类似这样的洞察:

"你的低谷作品倾向于:极简结构 + 高情感浓度 + 非常规表达。这正是你的差异化基因。"

四、代码模块化实现

项目结构:

mirror_mood/

├── main.py # 命令行入口

├── models.py # 数据结构定义

├── classifier.py # 心境分类器

├── comparator.py # 风格对比引擎

├── storage.py # 本地持久化

├── data/

│ └── works.json # 作品记录

└── README.md

models.py —— 数据结构定义

"""

数据模型层

定义作品记录和心境评估的结构

"""

from dataclasses import dataclass, field

from typing import Optional

from datetime import datetime, date

import uuid

@dataclass

class MoodState:

"""创作时的心境状态"""

energy: int = 3 # 精力 1-5

mood: int = 3 # 情绪 1-5

confidence: int = 3 # 自信 1-5

clarity: int = 3 # 清晰 1-5

pressure: int = 3 # 压力 1-5(反向计分:压力越大分越低)

@property

def composite_score(self) -> int:

"""心境综合得分(越高越顺境)"""

return self.energy + self.mood + self.confidence + self.clarity + (6 - self.pressure)

@property

def label(self) -> str:

"""心境标签"""

score = self.composite_score

if score >= 18:

return "顺境"

elif score <= 12:

return "低谷"

else:

return "平稳"

@dataclass

class WorkRecord:

"""一次作品记录"""

id: str

title: str

description: str = ""

category: str = "other" # code/writing/design/music/other

created_date: date = field(default_factory=date.today)

# 心境

mood_state: MoodState = field(default_factory=MoodState)

# 风格六维

complexity: int = 3 # 结构复杂度

experiment: int = 3 # 实验性

emotion: int = 3 # 情感浓度

uniqueness: int = 3 # 独特性

polish: int = 3 # 完成度

risk: int = 3 # 冒险程度

# 自评

satisfaction: Optional[int] = None # 创作满意度

external_feedback: str = "" # 外部反馈摘要

tags: list = field(default_factory=list)

recorded_at: datetime = field(default_factory=datetime.now)

@property

def mood_label(self) -> str:

return self.mood_state.label

def to_dict(self):

return {

"id": self.id,

"title": self.title,

"description": self.description,

"category": self.category,

"created_date": self.created_date.isoformat(),

"mood_state": {

"energy": self.mood_state.energy,

"mood": self.mood_state.mood,

"confidence": self.mood_state.confidence,

"clarity": self.mood_state.clarity,

"pressure": self.mood_state.pressure

},

"complexity": self.complexity,

"experiment": self.experiment,

"emotion": self.emotion,

"uniqueness": self.uniqueness,

"polish": self.polish,

"risk": self.risk,

"satisfaction": self.satisfaction,

"external_feedback": self.external_feedback,

"tags": self.tags,

"recorded_at": self.recorded_at.isoformat()

}

@classmethod

def from_dict(cls, d):

ms = d.get("mood_state", {})

mood_state = MoodState(

energy=ms.get("energy", 3),

mood=ms.get("mood", 3),

confidence=ms.get("confidence", 3),

clarity=ms.get("clarity", 3),

pressure=ms.get("pressure", 3)

)

return cls(

id=d["id"],

title=d["title"],

description=d.get("description", ""),

category=d.get("category", "other"),

created_date=date.fromisoformat(d["created_date"]),

mood_state=mood_state,

complexity=d.get("complexity", 3),

experiment=d.get("experiment", 3),

emotion=d.get("emotion", 3),

uniqueness=d.get("uniqueness", 3),

polish=d.get("polish", 3),

risk=d.get("risk", 3),

satisfaction=d.get("satisfaction"),

external_feedback=d.get("external_feedback", ""),

tags=d.get("tags", []),

recorded_at=datetime.fromisoformat(d["recorded_at"])

)

classifier.py —— 心境分类器

"""

心境分类模块

负责判断作品所属的心境集合

"""

from models import WorkRecord, MoodState

class MoodClassifier:

"""

心境分类器

将作品归入顺境集、低谷集或平稳期

"""

HIGH_THRESHOLD = 18 # 综合分 ≥ 18 → 顺境

LOW_THRESHOLD = 12 # 综合分 ≤ 12 → 低谷

def classify(self, work: WorkRecord) -> str:

"""返回心境分类"""

return work.mood_label

def is_extreme(self, work: WorkRecord) -> bool:

"""是否为极端心境(顺境或低谷)"""

return work.mood_label in ("顺境", "低谷")

def categorize_batch(self, works: list[WorkRecord]) -> dict:

"""批量分类"""

result = {"顺境": [], "低谷": [], "平稳": []}

for w in works:

result[w.mood_label].append(w)

return result

comparator.py —— 风格对比引擎

"""

风格对比引擎

负责对比顺境和低谷作品的风格差异

"""

from models import WorkRecord

from classifier import MoodClassifier

from typing import List

class StyleComparator:

"""

心境-作品风格对比引擎

核心思想:低谷中的作品往往具有更高的差异化和独特性

"""

DIMENSIONS = ["complexity", "experiment", "emotion", "uniqueness", "polish", "risk"]

DIMENSION_LABELS = {

"complexity": "结构复杂度",

"experiment": "实验性",

"emotion": "情感浓度",

"uniqueness": "独特性",

"polish": "完成度",

"risk": "冒险程度"

}

def __init__(self):

self.classifier = MoodClassifier()

def compare(self, works: List[WorkRecord]) -> dict:

"""对比顺境和低谷作品的风格差异"""

categorized = self.classifier.categorize_batch(works)

highs = categorized["顺境"]

lows = categorized["低谷"]

if not highs or not lows:

return {"error": "需要至少一条顺境和一条低谷作品才能对比"}

high_avg = self._average_scores(highs)

low_avg = self._average_scores(lows)

diff = {}

for dim in self.DIMENSIONS:

diff[dim] = {

"high": high_avg.get(dim, 0),

"low": low_avg.get(dim, 0),

"gap": round(low_avg.get(dim, 0) - high_avg.get(dim, 0), 2)

}

return {

"high_count": len(highs),

"low_count": len(lows),

"dimensions": diff

}

def _average_scores(self, works: List[WorkRecord]) -> dict:

"""计算一组作品的平均分"""

if not works:

return {}

result = {}

count = len(works)

for dim in self.DIMENSIONS:

result[dim] = round(sum(getattr(w, dim) for w in works) / count, 2)

return result

def extract_differentiation_gene(self, works: List[WorkRecord]) -> str:

"""

提取低谷作品的差异化基因

找出低谷作品中显著高于顺境的维度

"""

comparison = self.compare(works)

if "error" in comparison:

return comparison["error"]

dims = comparison["dimensions"]

strengths = []

for dim, values in dims.items():

gap = values["gap"]

if gap >= 0.5: # 低谷比顺境高 0.5 分以上

strengths.append({

"dimension": dim,

"label": self.DIMENSION_LABELS[dim],

"gap": gap,

"low_score": values["low"],

"high_score": values["high"]

})

if not strengths:

return "暂未检测到明显的差异化基因。继续积累作品吧。"

strengths.sort(key=lambda x: x["gap"], reverse=True)

lines = ["🔬 你的低谷差异化基因:\n"]

for s in strengths:

lines.append(

f" • {s['label']}:低谷 {s['low_score']} vs 顺境 {s['high_score']} "

f"(差距 +{s['gap']})"

)

lines.append("\n💡 创作建议:")

lines.append(" 当你的作品需要差异化竞争力时,尝试主动调用低谷期的创作模式——")

lines.append(" 降低完成度预期,提高实验性和情感浓度,允许自己冒险。")

return "\n".join(lines)

def generate_report(self, works: List[WorkRecord]) -> str:

"""生成完整对比报告"""

comparison = self.compare(works)

if "error" in comparison:

return comparison["error"]

lines = []

lines.append(f"📊 心境-作品风格对比报告")

lines.append(f"{'='*50}")

lines.append(f"\n 顺境作品:{comparison['high_count']} 件")

lines.append(f" 低谷作品:{comparison['low_count']} 件\n")

lines.append(f" {'维度':<12} {'顺境':>6} {'低谷':>6} {'差距':>8}")

lines.append(f" {'-'*36}")

for dim, values in comparison["dimensions"].items():

label = self.DIMENSION_LABELS[dim]

gap_str = f"+{values['gap']}" if values['gap'] > 0 else str(values['gap'])

lines.append(f" {label:<12} {values['high']:>6} {values['low']:>6} {gap_str:>8}")

lines.append(f"\n{'='*50}")

gene = self.extract_differentiation_gene(works)

lines.append(f"\n{gene}")

return "\n".join(lines)

storage.py —— 本地持久化

"""

存储模块

所有数据以 JSON 格式保存在本地

"""

import json

from pathlib import Path

from models import WorkRecord

DATA_DIR = Path("data")

WORKS_FILE = DATA_DIR / "works.json"

def _ensure_file():

DATA_DIR.mkdir(exist_ok=True)

if not WORKS_FILE.exists():

with open(WORKS_FILE, "w", encoding="utf-8") as f:

json.dump([], f, ensure_ascii=False, indent=2)

def load_works() -> list[WorkRecord]:

_ensure_file()

with open(WORKS_FILE, "r", encoding="utf-8") as f:

return [WorkRecord.from_dict(d) for d in json.load(f)]

def save_work(work: WorkRecord):

works = load_works()

works.append(work)

with open(WORKS_FILE, "w", encoding="utf-8") as f:

json.dump([w.to_dict() for w in works], f, ensure_ascii=False, indent=2)

def get_by_mood(mood_label: str) -> list[WorkRecord]:

"""按心境标签筛选"""

works = load_works()

return [w for w in works if w.mood_label == mood_label]

main.py —— 命令行入口

"""

主程序入口

提供命令行交互界面

"""

from datetime import date, datetime

from models import WorkRecord, MoodState

from classifier import MoodClassifier

from comparator import StyleComparator

from storage import load_works, save_work, get_by_mood

def record_work():

"""记录一次作品"""

print("\n📝 记录一次作品\n")

title = input("🎨 作品名称:").strip()

if not title:

print("❌ 名称不能为空")

return

desc = input("📄 描述(可选):").strip()

print("\n📂 类别:1.代码 2.文字 3.设计 4.音乐 5.其他")

cat_map = {"1": "code", "2": "writing", "3": "design", "4": "music"}

cat = cat_map.get(input(" 选择:").strip(), "other")

print("\n😶 心境五维评估(1-5分):")

try:

energy = int(input(" 精力充沛度:").strip() or "3")

mood = int(input(" 情绪积极度:").strip() or "3")

conf = int(input(" 自我确信度:").strip() or "3")

clarity = int(input(" 思路清晰度:").strip() or "3")

pressure = int(input(" 外部压力(1=极大 5=无压力):").strip() or "3")

except ValueError:

energy, mood, conf, clarity, pressure = 3, 3, 3, 3, 3

print("\n🎭 作品风格六维(1-5分):")

try:

complexity = int(input(" 结构复杂度:").strip() or "3")

experiment = int(input(" 实验性:").strip() or "3")

emotion = int(input(" 情感浓度:").strip() or "3")

uniqueness = int(input(" 独特性:").strip() or "3")

polish = int(input(" 完成度:").strip() or "3")

risk = int(input(" 冒险程度:").strip() or "3")

except ValueError:

complexity = experiment = emotion = uniqueness = polish = risk = 3

tags_input = input("\n🏷 标签(逗号分隔,可选):").strip()

tags = [t.strip() for t in tags_input.split(",")] if tags_input else []

mood_state = MoodState(energy=energy, mood=mood, confidence=conf, clarity=clarity, pressure=pressure)

label = mood_state.label

work = WorkRecord(

id=str(int(datetime.now().timestamp()))[-8:],

title=title,

description=desc,

category=cat,

mood_state=mood_state,

complexity=complexity,

experiment=experiment,

emotion=emotion,

uniqueness=uniqueness,

polish=polish,

risk=risk,

tags=tags

)

save_work(work)

print(f"\n✅ 已记录。心境判定:{label}")

if label == "低谷":

print("💡 低谷作品往往藏着你的差异化基因。别急着否定它。")

elif label == "顺境":

print("💡 顺境作品是你的基本功展示。保持这个水准,已经很棒了。")

def show_comparison():

"""显示对比报告"""

works = load_works()

comparator = StyleComparator()

report = comparator.generate_report(works)

print(f"\n{report}")

def show_by_mood():

"""按心境查看作品"""

print("\n1. 顺境作品 2. 低谷作品 3. 平稳期作品")

choice = input("> ").strip()

mapping = {"1": "顺境", "2": "低谷", "3": "平稳"}

label = mapping.get(choice, "顺境")

works = get_by_mood(label)

if not works:

print(f"📭 暂无{label}作品")

return

print(f"\n📋 {label}作品({len(works)}件):\n")

for w in works:

print(f" • {w.title}")

print(f" 风格:实验{w.experiment} 情感{w.emotion} 独特{w.uniqueness} 完成{w.polish}")

if w.tags:

print(f" 标签:{', '.join(w.tags)}")

print()

def main():

print("🪞 顺境与低谷的双面镜")

print("核心理念:低谷中的作品不是垃圾,而是你的差异化基因\n")

while True:

print("\n请选择操作:")

print("1. 📝 记录一次作品")

print("2. 📊 心境-风格对比报告")

print("3. 📋 按心境查看作品")

print("q. 退出")

choice = input("\n> ").strip()

if choice == "1":

record_work()

elif choice == "2":

show_comparison()

elif choice == "3":

show_by_mood()

elif choice == "q":

print("\n👋 再见。愿你学会欣赏低谷中的自己——那是你最真实的样子。")

break

else:

print("❌ 无效选择。")

if __name__ == "__main__":

main()

五、README.md 与使用说明

# 双面镜:心境-作品风格对比工具(Mirror Mood)

一个本地运行的 Python 工具,用于记录不同心境下的作品,对比顺境与低谷的风格差异,提取低谷中的差异化创意基因。

## 设计背景

本项目基于《心理健康与创新能力》课程中的核心观点:

- 顺境作品往往精致但趋同,低谷作品往往粗糙但独特

- 低谷打破了"习惯性正确",反而触及更真实的表达

- 识别并利用低谷风格,可以建立个人创作的差异化标签

## 功能特性

- ✅ 记录作品时同步评估心境五维(精力/情绪/自信/清晰/压力)

- ✅ 自动归入顺境集或低谷集

- ✅ 六维风格标注(复杂度/实验性/情感/独特性/完成度/冒险)

- ✅ 两组作品的多维度对比分析

- ✅ 自动提取"差异化基因"

- ✅ 完全本地运行,无网络请求,无数据上传

- ✅ 零第三方依赖(仅 Python 标准库)

## 安装与使用

### 环境要求

- Python 3.9+

### 安装

bash

git clone <repository-url>

cd mirror_mood

python main.py

### 使用流程

#### 记录作品

选择 `1`,依次填写:

- 作品基本信息

- 心境五维评分

- 作品风格六维评分

程序自动判定该作品属于"顺境""低谷"还是"平稳期"。

#### 查看对比

选择 `2`,生成完整对比报告,包括:

- 各维度平均分对比

- 差距最大的维度

- 差异化基因提取

- 创作建议

#### 按心境浏览

选择 `3`,分别查看不同时期的作品列表。

### 心境判定标准

| 综合得分 | 标签 | 含义 |

|---------|------|------|

| ≥18 | 顺境 | 精力充沛、情绪积极、自信清晰 |

| ≤12 | 低谷 | 疲惫低落、自我怀疑、思路模糊 |

| 13-17 | 平稳 | 中性状态 |

### 数据文件

- `data/works.json`:所有作品记录

## 示例报告

📊 心境-作品风格对比报告

顺境作品:8 件

低谷作品:5 件

维度 顺境 低谷 差距

结构复杂度 4 3 -1.2

实验性 2 4 +2.0

情感浓度 2 5 +3.0

独特性 3 4 +1.0

完成度 5 2 -3.0

冒险程度 2 4 +2.0

🔬 你的低谷差异化基因:

• 情感浓度:低谷 5 vs 顺境 2 (差距 +3.0)

• 实验性:低谷 4 vs 顺境 2 (差距 +2.0)

• 冒险程度:低谷 4 vs 顺境 2 (差距 +2.0)

💡 创作建议:

当你的作品需要差异化竞争力时,尝试主动调用低谷期的创作模式——

降低完成度预期,提高实验性和情感浓度,允许自己冒险。

## 局限说明

- 评分完全依赖主观自评

- 样本量较少时对比结果可能不稳定

- 无图形界面,仅命令行交互

- 不构成心理诊断工具

## 适用人群

- 希望理解自己创作风格变化的创作者

- 想从低谷中提炼创意价值的人

- 对"差异化"和"个人风格"感兴趣的实践者

## 许可证

MIT License

六、核心知识点卡片

知识点 来源领域 工程映射

高功能平庸 创新心理学 Local Optimum——在局部最优解附近打转

低谷创造力 创伤后成长(PTG) Fault Injection——主动引入异常以发现隐藏路径

差异化基因 品牌定位理论 Unique Value Proposition——唯一不可替代的特征

功能固着 认知心理学 Design Pattern Lock-in——被既有模式锁死

情感浓度 艺术治疗 Signal Amplitude——噪声中的强信号更容易被接收

完成度与独特性的反比 产品管理 MVP vs Polished——粗糙的原型往往更接近本质需求

七、总结

这个项目让我做了一件以前从未做过的事:认真回看了自己低谷期的作品,并且没有嫌弃它们。

我发现那些在凌晨三点、失眠、焦虑、自我怀疑中写出来的代码和文字,确实有一个共同特质——它们不漂亮,但它们真。它们没有试图讨好任何人,包括我自己。它们只是把那一刻的我原封不动地倒了出来。

而恰恰是这些"不漂亮的真相",成了我最独特的创作标签。

课程结束时教授说:"不要等风暴过去才开始创作。风暴本身就是你的颜料。"

这个工具不会帮你避免低谷——没人能做到。但它会帮你做一件更有用的事:在低谷中拿起笔,而不是放下笔。

因为你最独特的声音,往往出现在你最不想开口的时候。

利用AI解决实际问题,如果你觉得这个工具好用,欢迎关注长安牧笛!