模拟人生
一个普通中国人的一辈子
Python 代码编辑器
import random from collections import defaultdict class LifeSimulator: def __init__(self, gender, name, birth_year=1990): # 基本信息 self.gender = gender self.name = name self.birth_year = birth_year self.birth_place = self.city_or_rural = random.choices( ["城市", "农村"], weights=[0.6, 0.4])[0] self.death_year = None self.age = 0 self.current_year = birth_year # 人生指标 self.health = 100 self.sick_probability = 1.0 self.happiness = 50 self.wealth = 0 self.education_level = 0 # 0-无教育, 1-小学, 2-初中, 3-高中, 4-大学, 5-研究生 self.career_level = 0 # 0-无工作, 1-基层, 2-中级, 3-高级, 4-管理层 5-中层管理 6-高层管理 # 人生状态 self.is_alive = True self.is_married = False self.has_house = False self.has_children = False self.baby_birthday = None self.children_married = False self.is_retired = False # 记录事件 self.events = [] self.milestones = [] self.achievements = set() self.yearly_data = defaultdict(dict) # 出生 self.add_event(0, "出生", f"{name}在{birth_year}年出生于{self.birth_place}") self.add_milestone("出生", 0) def simulate_life(self, max_age=100): while self.is_alive and self.age < max_age: self.simulate_year() if self.age == max_age: self.add_event( self.age, "死亡", f"{self.name}寿终正寝,享年{self.age}岁") self.clear() if self.happiness > 999: self.add_achievements("修得正果") self.add_event(self.age + 1, "生命", f"{self.name}去世一周年,门前老树开新芽") def simulate_year(self): if not self.is_alive: return if 30 <= self.age <= 50 and random.random() < 0.02: self.clear() self.add_event( self.age, "死亡", f"{self.name}虽然活着,但已经死了") self.add_achievements("虽活但死") return self.age += 1 self.current_year += 1 # 记录当前状态 self.yearly_data[self.current_year] = { "age": self.age, "health": self.health, "happiness": self.happiness, "wealth": self.wealth, "education": self.education_level, "career": self.career_level } # 随机事件 self.random_events() # 年龄相关事件 self.age_based_events() # 自然衰老 self.aging() # 检查是否死亡 self.check_death() def add_event(self, age, event_type, description): event = { "age": age, "year": self.current_year, "type": event_type, "description": description } self.events.append(event) def add_milestone(self, milestone, age): self.milestones.append((milestone, age)) def add_achievements(self, achievement): self.achievements.add(achievement) def age_based_events(self): # 教育阶段 if 6 <= self.age <= 22: self.education_phase() # 婚姻家庭 if 25 <= self.age <= 45: self.marriage_phase() # 工作阶段 if 22 <= self.age < 65: self.work_phase() # 退休阶段 if self.age >= 65 and not self.is_retired: self.retirement_phase() def education_phase(self): # 义务教育阶段 if self.age == 6: self.education_level = 1 self.add_event(self.age, "教育", f"{self.name}开始上小学") self.add_milestone("开始上学", self.age) elif self.age == 12: self.education_level = 2 self.add_event(self.age, "教育", f"{self.name}开始上初中") elif self.age == 15: self.education_level = 3 if random.random() < 0.01: self.add_event(self.age, "生活", f"{self.name}学业压力大,又被同学排挤,轻度抑郁") self.happiness -= random.randint(1, 10) if random.random() > 0.3: self.add_event(self.age, "教育", f"{self.name}开始上高中") else: self.add_event(self.age, "教育", f"{self.name}初中毕业后进入职业学校") self.education_level = 3 # 高中/职校同等 # 大学阶段 elif self.age == 18: if self.education_level == 3 and random.random() > 0.4: # 60%机会上大学 self.education_level = 4 self.add_event(self.age, "教育", f"{self.name}考入了大学") # 毕业 elif self.age == 22 and self.education_level >= 4: self.add_event(self.age, "教育", f"{self.name}大学毕业,开始找工作") self.add_milestone("大学毕业", self.age) def work_phase(self): # 开始工作 if self.age == 22 and self.education_level >= 4: # 大学毕业 self.career_level = 1 self.add_event(self.age, "职业", f"{self.name}开始了第一份工作") self.add_milestone("开始工作", self.age) salary = random.randint(5000, 20000) * 12 # 年薪 self.wealth += salary if salary > 15000 and self.birth_place == "农村": self.add_achievements("小镇做题家") elif self.age == 18 and self.education_level < 4: # 高中毕业开始工作 self.career_level = 1 self.add_event(self.age, "职业", f"{self.name}开始了第一份工作") self.add_milestone("开始工作", self.age) self.wealth += random.randint(3000, 8000) * 12 # 年薪 if self.age == 40 and random.random() < 0.2: self.add_event(self.age, "职业", f"{self.name}中年危机, 但成年人不能喊累") self.happiness -= random.randint(5, 10) # 职业发展 if 22 < self.age < 60 and self.career_level > 0: if random.random() < 0.0001: self.add_event(self.age, "职业", f"{self.name}喜欢他/她的工作") self.happiness += random.randint(50, 200) # 每年有15%晋升机会 if random.random() < 0.15 and self.career_level != 6: self.career_level = min(self.career_level + 1, 6) level_names = ["初级", "中级", "高级", "管理", "中层管理", "高层管理"] self.add_event( self.age, "职业", f"{self.name}晋升为{level_names[self.career_level - 1]}职位") # 每年5-15%工资增长 salary_increase = random.uniform(1.05, 1.15) self.wealth *= salary_increase # 工作压力影响健康 if random.random() < 0.3: self.health -= random.randint(1, 3) self.happiness -= random.randint(1, 5) if random.random() < 0.1: self.health -= random.randint(1, 5) self.happiness -= random.randint(1, 10) self.add_achievements("福报体验官") if random.random() < 0.05: self.clear() self.add_event( self.age, "死亡", f"{self.name}过劳而死,享年{self.age}岁,{self.name}获得”天选打工人“称号") self.add_achievements("天选打工人") # 失业 if random.random() < 0.008: self.add_event(self.age, "职业", f"{self.name}失业了") self.add_achievements("被优化的零件") self.career_level = 0 self.happiness -= random.randint(5, 10) def marriage_phase(self): # 结婚 if not self.is_married: if random.random() < 0.15: self.add_event(self.age, "生活", f"{self.name}谈了一次恋爱") self.happiness += random.randint(0, 20) if random.random() < 0.15: self.is_married = True self.add_event(self.age, "家庭", f"{self.name}结婚了") self.add_milestone("结婚", self.age) self.happiness += random.randint(-10, 20) # 买房 if not self.has_house: if random.random() > 0.2: # 80%的人会买房 self.has_house = True house_cost = random.randint(500000, 5000000) self.wealth -= house_cost if random.random() > 0.3: self.wealth += random.randint(500000, 5000000) self.add_achievements("全职儿女") self.add_event( self.age, "家庭", f"{self.name}购买了房子,花费{house_cost}元") # 生子 if self.is_married and not self.has_children: if random.random() < 0.25: self.has_children = True self.baby_birthday = self.current_year child_gender = "男孩" if random.random() > 0.5 else "女孩" self.add_event( self.age, "家庭", f"{self.name}有了一个{child_gender}") self.add_milestone("有了孩子", self.age) self.happiness += random.randint(-10, 20) self.wealth -= random.randint(200000, 2000000) # 生育和养育成本 def retirement_phase(self): if self.age >= 60 and not self.is_retired: self.is_retired = True self.add_event(self.age, "职业", f"{self.name}退休了") self.add_milestone("退休", self.age) # 退休金 pension = self.wealth * 0.0005 * random.uniform(0.8, 1.2) + 0 self.wealth += pension self.add_event( self.age, "财务", f"{self.name}开始领取退休金,每年约{int(pension)}元") def random_events(self): # 健康事件 if random.random() < 0.1 * self.sick_probability: severity = random.choice(["轻微", "中度", "严重"]) if severity == "轻微": self.health -= random.randint(1, 5) self.add_event(self.age, "健康", f"{self.name}生了一场小病") elif severity == "中度": self.health -= random.randint(5, 15) self.wealth -= random.randint(5000, 20000) self.add_event(self.age, "健康", f"{self.name}生病住院了") else: # 严重 self.health -= random.randint(20, 40) self.wealth -= random.randint(50000, 200000) self.add_event(self.age, "健康", f"{self.name}患了严重疾病") if random.random() < 0.001: self.add_event( self.age, "生命", f"{self.name}下定决心从此食饮有节,起居有常,不妄作劳,恬惔虚无,获得称号”形与神俱“") self.happiness += random.randint(100, 300) self.add_achievements("形与神俱") self.sick_probability = 0.1 # 财务事件 if self.age > 25 and random.random() < 0.1: event_type = random.choice( ["投资成功", "副业失败", "购买A股", "购买彩票", "遭遇诈骗", "朋友借钱"]) if event_type == "投资成功": gain = random.randint(5000, 50000) self.wealth += gain self.happiness += 5 self.add_event(self.age, "财务", f"{self.name}投资获利{gain}元") elif event_type == "副业失败": loss = random.randint(5000, 500000) self.wealth -= loss self.happiness -= 10 self.add_event(self.age, "财务", f"{self.name}搞副业失败,损失{loss}元") elif event_type == "购买A股": expense = random.randint(2000, 200000) self.wealth -= expense self.happiness -= 5 if expense > 100000: self.add_event( self.age, "财务", f"{self.name}投资A股亏损超过{expense}元,获得”韭菜的一生“称号") self.add_achievements("韭菜的一生") elif event_type == "购买彩票": expense = random.randint(200, 200000) self.wealth -= expense self.happiness -= 5 if expense > 50000: self.add_event( self.age, "财务", f"{self.name}持续购买彩票支出{expense}元") self.add_achievements("热心慈善家") else: # 意外支出 expense = random.randint(2000, 20000) self.wealth -= expense self.happiness -= 5 self.add_event(self.age, "财务", f"{self.name}遇到意外支出{expense}元") # 家庭事件 if self.has_children and self.age < 50 and (not self.children_married) and (self.current_year >= self.baby_birthday + 6) and random.random() < 0.1: if random.random() < 0.3: self.add_event( self.age, "孩子", f"{self.name}在班级家长群说了一百次”收到,老师辛苦了“") event_type = random.choice(["孩子成绩优异", "孩子惹麻烦"]) if event_type == "孩子成绩优异": self.happiness += 10 self.add_event(self.age, "孩子", f"{self.name}的孩子在考试中取得优异成绩") else: # "孩子惹麻烦": self.happiness -= 8 self.wealth -= random.randint(1000, 5000) self.add_event(self.age, "孩子", f"{self.name}的孩子在学校惹了麻烦") if self.has_children and (not self.children_married) and (self.current_year >= self.baby_birthday + 22): if random.random() < 0.15: self.children_married = True self.happiness += random.randint(0, 15) self.add_event(self.age, "家庭", f"{self.name}的孩子结婚了") if random.random() < 0.8: self.wealth -= random.randint(500000, 5000000) self.add_achievements("中国父母") # 其他事件 def etc(): pass if 12 <= self.age < 65: if random.random() < 0.01: self.add_event(self.age, "生活", f"{self.name}认真观看一次星星") self.happiness += random.randint(1, 5) if random.random() < 0.01: self.add_event(self.age, "生活", f"{self.name}培养一门长期爱好") self.happiness += random.randint(1, 5) if random.random() < 0.01: self.add_event(self.age, "休闲", f"{self.name}辛苦劳作后美美睡了一觉") self.happiness += random.randint(1, 5) if self.has_children and self.current_year <= self.baby_birthday + 20 and random.random() < 0.02: self.add_event(self.age, "生活", f"{self.name}带孩子进行一次户外活动") self.happiness += random.randint(1, 5) etc() if random.random() < 0.01: self.add_event(self.age, "休闲", f"{self.name}观看中国队比赛,摔了一个杯子") self.happiness -= random.randint(1, 5) if random.random() < 0.01: self.add_event(self.age, "生活", f"{self.name}被亲戚朋友点评,有点不开心") self.happiness -= random.randint(1, 5) if 25 < self.age < 35 and (not self.is_married) and random.random() < 0.05: self.add_event(self.age, "生活", f"{self.name}被反复催婚,郁闷了好几天") self.happiness -= random.randint(1, 5) etc() def aging(self): # 年龄增长带来的自然变化 if self.age > 30: self.health -= random.uniform(0.5, 2) if self.age > 40: self.health -= random.uniform(1, 3) if self.age > 50: self.health -= random.uniform(2, 5) # 财富自然增长 if self.wealth > 100000: self.wealth *= random.uniform(0.98, 1.02) # 幸福感自然波动 self.happiness += random.randint(-3, 3) # 确保数值在合理范围内 self.health = max(0, min(100, self.health)) self.happiness = max(0, min(100, self.happiness)) self.wealth = max(0, self.wealth) def clear(self): self.is_alive = False self.death_year = self.current_year self.add_milestone("死亡", self.age) self.wealth = 0 def check_death(self): # 死亡概率随着年龄增长而增加 base_prob = 0.001 age_factor = max(0, (self.age - 75) * 0.01) health_factor = max(0, (100 - self.health) * 0.00005) death_prob = base_prob + age_factor + health_factor def get_death_causes(age): if age < 20: return ["意外事故", "突发疾病"] elif age > 70: return ["自然衰老", "心脏病", "癌症", "中风"] else: return ["心脏病", "癌症", "中风", "意外事故"] if random.random() < death_prob: death_causes = get_death_causes(self.age) cause = random.choice(death_causes) self.add_event( self.age, "死亡", f"{self.name}因{cause}去世,享年{self.age}岁") self.clear() def print_summary(self): print(f"\n{'='*35}") print(f"{self.name}的一生总结 ({self.birth_year}-{self.death_year or '至今'})") print( f"性别: {self.gender}, 出生地: {self.birth_place}, 享年: {self.age if not self.is_alive else '至今'}") print(f"最终财富: ¥{int(self.wealth):,}元") print(f"幸福程度: {int(self.happiness):,}") print(f"人生里程碑:") for milestone, age in self.milestones: print(f" - {age}岁: {milestone}") print("\n重要事件:") for event in self.events: if event["type"] in ["出生", "死亡", "教育", "职业", "家庭", "生活", "孩子", "生命"] or "里程碑" in event["type"]: print(f" [{event['age']}岁] {event['description']}") print("\n取得的称号:") for ach in self.achievements: print(f" - {ach}") # 随机性别和出生年份 def random_gender_and_year(): male_names = ["张伟", "刘洋", "陈强", "赵磊", "周杰", "徐沐宸", "何宇轩", "马浩宇"] female_names = ["王芳", "李娜", "杨静", "孙丽", "吴敏", "唐梓涵", "林若汐", "郑雨桐"] gender = "男" if random.random() < 0.51 else "女" birth_year = random.randint(1985, 2010) if gender == "男": name = random.choice(male_names[5:]) if birth_year >= 2005 else random.choice( male_names[:5]) else: name = random.choice(female_names[5:]) if birth_year >= 2005 else random.choice( female_names[:5]) return gender, name, birth_year def simulate_person(gender, name, birth_year): person = LifeSimulator(gender, name, birth_year) person.simulate_life() person.print_summary() return person # 运行模拟 if __name__ == "__main__": print("="*35) print("人生模拟器 - 一个普通中国人的一生") print("="*35) for i in range(1): gender, name, birth_year = random_gender_and_year() simulate_person(gender, name, birth_year)
开始模拟
运行结果
点击"开始模拟"按钮运行代码
结果将在这里显示
💡 提示:你可以修改上面的代码来创建你自己的人生模拟器