它来决定今天吃什么
一个轻量、零依赖的「今天吃什么」推荐器。最早是为桌面小狗宠物(PySide6 无边框桌宠)
做的右键菜单功能,现抽成独立 skill,任何需要「帮用户决定吃啥」的场景都能直接用。
何时使用
- 用户说"中午吃什么""晚上吃啥""随便推荐个""帮我决定今天吃啥"。
- 用户在做选择困难、想让程序替他拍板。
- 需要在气泡 / 弹窗 / 聊天里展示一条带 emoji 的、可直接阅读的餐饮建议。
核心特性
- 时间感知:按当前小时自动切换餐型(早餐/午餐/下午茶/晚餐/夜宵),文案随之变化。
- 纯本地随机:不调 API、不联网、不需要 key,永远可用。
- 可复现换一个:再次调用
recommend_lunch()即得新组合,适合"再给我换一个"的诉求。 - 展示友好:返回多行纯文本,天然适配气泡框、Toast、聊天回复。
实现逻辑
_meal_word():读datetime.now().hour,映射成餐型与开场问候。recommend_lunch():随机挑 1 个主食(带 emoji)、1 个搭配、1 句俏皮话,拼成文案。
代码(lunch.py)
> 直接复制即可用。PySide6 无关,纯标准库。
"""午餐/正餐推荐 — 纯本地随机,不依赖 API。"""
import random
from datetime import datetime
# 主食候选(带 emoji 的短语,方便气泡展示)
MAINS = [
("\U0001F35A", "番茄牛腩盖饭"),
("\U0001F35B", "照烧鸡腿饭"),
("\U0001F35C", "红烧牛肉面"),
("\U0001F35D", "番茄肉酱意面"),
("\U0001F95F", "猪肉白菜水饺"),
("\U0001F371", "日式肥牛便当"),
("\U0001F957", "鸡胸肉轻食沙拉"),
("\U0001F354", "芝士牛肉汉堡"),
("\U0001F959", "土耳其烤肉卷饼"),
("\U0001F372", "酸菜鱼配米饭"),
("\U0001F35A", "梅菜扣肉饭"),
("\U0001F35C", "麻辣鲜虾粉"),
("\U0001F958", "黄焖鸡米饭"),
("\U0001F371", "三文鱼刺身定食"),
("\U0001F96A", "培根鸡蛋三明治"),
("\U0001F35A", "宫保鸡丁盖饭"),
("\U0001F35C", "葱油拌面"),
("\U0001F95F", "鲜虾云吞面"),
("\U0001F35B", "咖喱土豆牛腩饭"),
("\U0001F957", "牛油果鸡蛋沙拉碗"),
]
# 搭配候选(汤/饮品/小食)
SIDES = [
"一碗热乎乎的紫菜蛋花汤",
"一杯冰镇柠檬水",
"一份爽口拍黄瓜",
"一小碗银耳莲子羹",
"一杯无糖酸奶",
"一份时令水果拼盘",
"一碗西红柿豆腐汤",
"一杯美式咖啡提提神",
]
# 俏皮推荐语
QUIPS = [
"热乎吃下去,下午干活更有劲~",
"今天也要好好吃饭呀!",
"就它了,别纠结啦 \U0001F436",
"营养均衡,狗子认证 \U0001F44D",
"吃完记得眯一会儿,效率翻倍。",
"已经替你决定了,去吃吧!",
]
def _meal_word():
"""根据当前时间返回正餐类型提示。"""
h = datetime.now().hour
if 6 <= h < 11:
return ("早餐", "早上好呀,先吃点垫垫肚子")
if 11 <= h < 14:
return ("午餐", "中午啦,该补充能量了")
if 14 <= h < 17:
return ("下午茶/加餐", "有点饿了?先垫一口")
if 17 <= h < 21:
return ("晚餐", "辛苦一天,吃顿好的犒劳自己")
return ("夜宵", "这么晚还在忙?整点清淡的")
def recommend_lunch():
"""返回一条正餐推荐文本(适合放进气泡)。"""
meal, greet = _meal_word()
emoji, main = random.choice(MAINS)
side = random.choice(SIDES)
quip = random.choice(QUIPS)
return (
f"\U0001F371 推荐{meal}:\n\n"
f"{emoji} {main}\n"
f"➕ {side}\n\n"
f"{greet}~\n{quip}\n\n"
f"(再点一次「今天中午吃什么」可换一个)"
)
if __name__ == "__main__":
print(recommend_lunch())
接入示例(PySide6 桌宠右键菜单)
在宠物窗口的右键菜单里加一项,点击后把 recommend_lunch() 的结果塞进气泡:
a6 = menu.addAction("\U0001F371 今天中午吃什么?")
a6.triggered.connect(lambda: self.lunch_requested and self.lunch_requested())
# main.py 中:
# window.lunch_requested = lambda: window.set_bubble(recommend_lunch(), auto_hide=True)
可调项
- 增删菜品:直接改
MAINS/SIDES/QUIPS三个列表。 - 改餐型时段:改
_meal_word()里的小时区间。 - 想要"不重样":把已推荐项记到一个
set里,下次从剩余里抽,直到抽完再清空。 - 想更聪明:后续可接 LLM,把"冰箱里剩什么 / 忌口 / 预算"作为约束再生成,但当前版零依赖、永远可用。