1. 实战概述
- 本项目通过
while(时间推进)与for(车厢/站点遍历)嵌套,模拟地铁列车在多站间往返运行,动态处理乘客上下车、高峰期客流、车厢容量限制等逻辑,实现调度过程可视化与数据统计,强化循环结构实战应用。
2. 实战步骤
2.1 系统设计
- 本系统采用事件驱动与时间步进相结合的模拟架构。外层
while循环以“到站”为单位推进时间,每站停靠固定秒数;内层多个for循环分别处理乘客下车、上车及车厢调度。列车状态用列表表示各车厢载客量,站点用数组记录等车人数与上下车统计。通过方向变量实现往返运行,高峰期机制动态调整客流生成。系统实时追踪总运送量、错失乘客、载客率及站点繁忙度,兼顾逻辑清晰性与教学目的,突出while + for嵌套在复杂流程控制中的实战价值。
2.2 系统实现
-
创建
智能地铁调度模拟系统.py文件

""" 功能:智能地铁调度模拟系统 —— while + for 嵌套实战 作者:华卫 日期:2025年11月11日 """ import random import time # ----------------- 可调参数 ----------------- STATIONS = 5 # 站点 0~4 CARS = 4 # 车厢节数 CAPACITY = 20 # 每节车厢上限 TOTAL_TIME = 60 # 总模拟时长(秒) STOP_SECONDS = 5 # 每站停靠时间(秒) RUSH_START = 20 # 高峰期开始(秒) RUSH_END = 40 # 高峰期结束(秒) # ------------------------------------------- def subway_simulation(): # 列车状态:列表中每个元素表示一节车厢的乘客数 train = [0] * CARS # 各站点等车人数 waiting = [0] * STATIONS current_station = 0 # 列车当前位置 direction = 1 # 1 表示正向 0→4,-1 表示反向 4→0 elapsed = 0 # 已流逝时间(秒) total_transported = 0 # 成功上车总人数 missed_passengers = 0 # 因满载被挤掉人数 # 记录每站上下车数据,方便最后统计 station_board = [0] * STATIONS station_alight = [0] * STATIONS print("🚇 地铁调度模拟开始!\n") # ============ 外层 while:时间推进 ============ while elapsed < TOTAL_TIME: # ---------------- 到达站点 ---------------- print(f"🚉 到达站点 {current_station} (运行时间 {elapsed:>4} s)") print(f"📊 当前列车状态: {train}") # 1. 乘客下车:简单假设每节车厢有 20%~40% 的人下车 for car_idx in range(CARS): if train[car_idx] == 0: continue alight_ratio = random.uniform(0.2, 0.4) alight_num = int(train[car_idx] * alight_ratio) alight_num = max(0, min(alight_num, train[car_idx])) train[car_idx] -= alight_num station_alight[current_station] += alight_num # 2. 乘客上车 # 2.1 根据是否高峰期生成新到乘客 if RUSH_START <= elapsed <= RUSH_END: new_arrival = random.randint(5, 15) else: new_arrival = random.randint(0, 10) waiting[current_station] += new_arrival # 2.2 用 for 循环把等车乘客按“先少后多”原则塞进车厢 want_to_board = waiting[current_station] boarded = 0 for _ in range(want_to_board): # 找剩余空间最多的车厢 best_car = 0 max_space = -1 for car_idx in range(CARS): space = CAPACITY - train[car_idx] if space > max_space: max_space = space best_car = car_idx if max_space <= 0: # 全列满载,挤掉剩余乘客 missed = want_to_board - boarded missed_passengers += missed break # 上车一人 train[best_car] += 1 boarded += 1 waiting[current_station] -= boarded station_board[current_station] += boarded total_transported += boarded print(f"👥 本次上车: {boarded} 人 剩余等车: {waiting[current_station]} 人") print("-" * 50) # 3. 模拟停靠耗时 time.sleep(0.1) # 肉眼可见地“跑”,可删掉 elapsed += STOP_SECONDS # 4. 列车移动(到终点站就折返) next_station = current_station + direction if next_station >= STATIONS or next_station < 0: direction *= -1 next_station = current_station + direction current_station = next_station # ================== 模拟结束 ================== print("\n🏁 模拟结束!") print(f"📈 总运送乘客: {total_transported} 人") print(f"😔 被挤掉乘客: {missed_passengers} 人") # 计算平均载客率 total_seats = CARS * CAPACITY avg_rate = sum(train) / total_seats * 100 print(f"📊 结束时刻列车载客: {train} 瞬时载客率: {avg_rate:5.1f}%") # 最繁忙站点(按上车人数) busiest = max(range(STATIONS), key=lambda s: station_board[s]) print(f"🔥 最繁忙站点: 站点 {busiest} (共上车 {station_board[busiest]} 人)") # 各站详细数据 print("\n----- 各站详细 -----") for s in range(STATIONS): print(f"站点 {s}: 上车 {station_board[s]:>3} | 下车 {station_alight[s]:>3}") # ---------------------- 主程序入口 ---------------------- if __name__ == "__main__": # 启动地铁调度模拟函数 subway_simulation() -
代码说明:本代码实现了一个基于时间步进的智能地铁调度模拟系统。通过外层
while循环控制总运行时间,每次循环代表列车到达一个站点;内层多个for循环分别处理乘客下车、新乘客生成及上车逻辑。系统动态维护列车各车厢载客量和各站等车人数,高峰期(RUSH_START 至 RUSH_END)会增加客流。上车策略优先填入空余最多的车厢,满载后拒绝后续乘客。程序实时输出运行状态,并在结束时统计总运送量、错失乘客、瞬时载客率及各站上下车数据,突出while + for嵌套在流程控制与资源调度中的综合应用。
2.3 系统测试
- 运行程序,查看结果

3. 实战总结
- 本次实战通过构建“智能地铁调度模拟系统”,深入运用了
while与for的嵌套结构,实现了时间推进、站点循环、车厢遍历与乘客调度等多层逻辑控制。系统不仅模拟了列车往返运行、高峰期客流变化、车厢容量限制等真实场景,还完成了上下车统计、载客率分析和繁忙站点识别等数据处理功能。整个项目结构清晰、参数可调、输出直观,既强化了对循环语句的综合应用能力,也体现了编程在解决实际调度问题中的建模思维,具有良好的教学示范价值和扩展潜力。
293

被折叠的 条评论
为什么被折叠?



