我在写大学实验报告的时候编写了几行代码,目的是随机生成一些汽车数据,对其进行计算,最后输出。
但最后发现运行结果不完全,且没有报错
import random
#匀减速运动求距离函数
def lenth(v,a):
d = 0
d = 0.5 * v**2 / a
#这里的*a修改成/a时会出现问题,不知道原因
return d
#提前相撞确定位置
def pre_hit(pre,aft,v,t,a):
j = 0.01
while pre > aft :
j += 0.01
x = v*t + v*j + 0.5*a*(j**2)
return x
#主要功能函数,确定数值与计算
def main():
#随机数
x1 = random.uniform(100,150) #前车距离x1[100,150]
v1 = random.uniform(60,80) #前车初始速度v1[80,100]
a1 = random.uniform(10,15) #前车加速度a1[[3,8]
t0 = random.uniform(5,20) #前车刹车时刻t0[5,20]
T = random.uniform(0.3,1) #后车反应时间T[0.3,1]
v0 = random.uniform(60,80) #后车初始速度v0[80,100]
#计算
#两车初始距离X
X = x1
#两车制动距离
d3 = lenth(v1,a1) #前车制动距离
a0 = abs(( v1 - v0 )/T) #后车加速度a0 = T^-1 * (V1 - V0)
d2 = lenth(v0,a0) #后车制动距离
d1 = v0 * T #后车制动前行驶距离
Locat1 = d3 + x1 #停车后前车位置
Locat0 = d1 + d2 #停车后后车位置
#判断是否撞车
L = d3 - d2 - d1 #两车距离
if L >= 0 :
print('两车未相撞')
print('前车初始位置为:' + str(x1))
print('前车初始速度为:' + str(v1) + 'm/s')
print('前车加速度为:' + str(a1) + 'm/s^2')
print('后车初始速度为:' + str(v0) + 'm/s')
print('后车加速度为:' + str(a0) + 'm/s^2')
print('两车相距' + str(L) +'m')
print('两车最后位置分别为 前车:' + str(Locat1) +' 后车:' + str(Locat0) )
print('------我是分割线------')
else:
x = pre_hit(Locat1,Locat0,v0,T,a0)
print('两车相撞')
print('前车初始位置为:' + str(x1))
print('前车初始速度为:' + str(v1) + 'm/s')
print('前车加速度为:' + str(a1) + 'm/s^2')
print('后车初始速度为:' + str(v0) + 'm/s')
print('后车加速度为:' + str(a0) + 'm/s^2')
print('最后两车的位置均为:' + str(x))
print('------我是分割线------')
#循环,可调整次数
time = input('请输入模拟次数:\n')
for i in range(int(time)):
print('第' + str(i + 1) + '次模拟')
main()
i += 1
#停留界面
q = 1
while q != 'quit':
q = input('输入’quit‘退出\n')
请输入模拟次数:
10
第1次模拟
两车相撞
前车初始位置为:122.54887012238481
前车初始速度为:60.24171919687605m/s
前车加速度为:12.494151247407284m/s^2
后车初始速度为:66.5969905267397m/s
后车加速度为:6.891401340771879m/s^2
最后两车的位置均为:62.08226220801786
------我是分割线------
第2次模拟
两车相撞
前车初始位置为:101.40015769902477
前车初始速度为:61.033491917515455m/s
前车加速度为:14.498470363316962m/s^2
后车初始速度为:69.27293574769249m/s
后车加速度为:11.563440283817119m/s^2
最后两车的位置均为:50.053225428955734
------我是分割线------
第3次模拟 #到这里就没有显示了
最开始的lenth函数中的公式是
d = 0.5 * v**2 * a
此时能够正常输出,但是结果并不符合常理
我发现是公式写错了
所以我将公式的’*a‘修改为’/a‘,开始出现问题
d = 0.5 * v**2 /a
同时我注意到出现问题的似乎是这行代码
x = pre_hit(Locat1,Locat0,v0,T,a0)
希望能够了解出现问题的原因