最近在阅读《python语言程序设计》的第八章,提到了计算思维的概念,该书通过列举体育竞技的程序模拟来阐释计算思维,以及顶层设计的编程方法论。本篇文章是记录我学习第八章产生的其他想法与观点。 计算思维是抽象实际问题的计算特征,利用计算机求解。计算思维的本质是抽象和自动化。 基于现实生活的观察,为什么高速在节假日时比平时更容易堵车呢? 如同下面代码,是模拟高速堵车的顶层设计:它描述的是“介绍 - 输入 - 处理 - 输出” 的完整流程,但核心的拥堵计算逻辑未实现。def main(): printIntro() n,k,v=getInput() process() printOutput()def printIntro(): print("这是一个高速堵车模拟器") RL=20000 #模拟高速总长20km RN=4 #模拟高速4车道 VM=100 #模拟车子最高限速100km/h VMI=60 #模拟车子最低限速60km/h print("高速总长{0:},高速车道数{1:}".format(RL,RN)) print("高速限速为{}km/h~{}km/h".format(VM,VMI)) passdef getInput(): a=eval(input("请输入阻力值(0-1):")) n=eval(input("请输入一个小时内进入高速的车的数量:")) return n,adef process(n,a): t=0 #阈值q为单位时间内高速尾端的车流量,q越大代表车辆越密集,道路越拥堵。 return t,qdef printOutput(t,q): print("在第{}时开始拥堵,且此时的车流量为{}".format(t,q)) pass
现在通过把顶层设计发送给AI。AI不但理解了我的目的是通过python编程,模拟高速堵车,还帮助我完善了核心的拥堵计算逻辑。def main(): printIntro() # 修正:接收getInput返回的两个值(阻力值、车辆数) resistance, car_num = getInput() # 调用处理函数并接收返回值 block_time, flow = process(resistance, car_num) # 打印结果 printOutput(block_time, flow)
def getInput(): # 增加异常处理,避免用户输入非数字导致报错 while True: try: resistance = eval(input("请输入阻力值(0-1):")) if 0 <= resistance <= 1: break else: print("阻力值需在0-1之间,请重新输入!") except: print("请输入有效的数字!") while True: try: car_num = eval(input("请输入一个小时内进入高速的车的数量:")) if car_num >= 0: break else: print("车辆数量不能为负数,请重新输入!") except: print("请输入有效的数字!") return resistance, car_num
def process(resistance,car_num): #核心拥堵计算逻辑: #param resistance: 阻力值(0-1),0=无阻力,1=完全堵塞: #param car_num: 1小时内进入高速的车辆总数 #return: 拥堵开始时间t(小时)、拥堵时的尾端流量q(辆/小时) # 1. 基础交通参数(基于真实交通工程标准) single_lane_capacity = 2000 # 单车道每小时通行能力(辆/小时) speed_correction = 0.9 # 速度修正系数(因实际车速低于限速) lane_num = 4 # 车道数(与printIntro中的RN一致) # 2. 计算道路实际通行能力(受阻力影响)# 基础通行能力 = 车道数 × 单车道通行能力 × 速度修正 base_capacity = lane_num * single_lane_capacity * speed_correction # 实际通行能力 = 基础通行能力 × (1 - 阻力系数)(阻力越大,通行能力越低) actual_capacity = base_capacity * (1 - resistance) # 3. 计算单位时间实际车流量(辆/小时) hourly_flow = car_num # 因为输入的是1小时内的车辆数,所以小时流量就是car_num # 4. 拥堵判定与计算 t = 0 # 拥堵开始时间(小时),默认0=不拥堵 q = 0 # 拥堵时的尾端流量(辆/小时) if hourly_flow > actual_capacity: # 4.1 计算拥堵开始时间:超出通行能力的比例越大,拥堵开始越早 # 超出比例 = (实际流量 - 通行能力) / 通行能力 exceed_ratio = (hourly_flow - actual_capacity) / actual_capacity # 拥堵开始时间:超出比例越高,时间越早(最小0.1小时,最大1小时) t = round(1 / (1 + exceed_ratio), 2) # 保证t在0.1~1之间 # 4.2 计算拥堵时的尾端流量:拥堵时尾端流量≈通行能力(道路扛不住更多车) # 阻力越大,尾端流量折损越多 q = round(actual_capacity * (1 - 0.2 * resistance), 2) else: # 不拥堵时,尾端流量=实际小时流量 q = round(hourly_flow, 2) return t, q
def printOutput(t, q): if t > 0: print(f"\n拥堵判定结果:") print(f"在第{t}小时开始拥堵,此时高速尾端的车流量为{q}辆/小时") else: print(f"\n拥堵判定结果:") print(f"未发生拥堵,当前高速尾端的车流量为{q}辆/小时")
# 执行主函数if __name__ == "__main__": main()
AI的辅助编程确实把编程的门槛降低了,我在没有想好该用什么公式才能建立堵车的数学模型时,AI就能包办了。在学习python中,AI的加入对编程的学习有怎么样的影响呢?如同堵车模拟器,不需要知道具体的理论(交通流理论),就能实现代码的生成。