如何在我的代码中转换速度?
How can I convert speeds in my code?
我的任务是创建一个程序来检测外国和超速的车牌。为此,必须创建路段、经过的时间等。代码的问题不在于速度有多不切实际,而是我最近从我的老师那里发现速度应该是 英里每小时 ,而不是 米每秒。
import re
# DATA
distance = 0.06 # Distance between the Camera A and B; 0.06 = 600 metres
speed_limit = 20 # (meters per second)
number_plates = ["DV61 GGB", #UK
"D31 EG 2A", #F
"5314 10A02", #F
"24TEG 5063", #F
"TR09 TRE", #UK
"524 WAL 75", #F
"TR44 VCZ", #UK
"FR52 SWD", #UK
"100 GBS 12", #F
"HG55 BPO" #UK
]
enter = [7.12,7.17,7.22,7.12,7.23,7.41,7.18,7.25,7.11,7.38]
leave = [7.56,7.39,7.49,7.56,7.45,7.57,7.22,7.31,7.59,7.47]
# Find the non-UK plates
pattern = "(?![A-Z]{2}\d{2}\s+[A-Z]{3}$)"
foreign_numbers = list(filter(lambda x: re.match(pattern, x), number_plates))
# Calculations for speed
elapsed = [(l - e)/100 for l, e in zip(leave, enter)]
speed = [distance/t for t in converted_elapsed]
# Dictionary for foreign speeders + 2 conditions
foreign_speeders = {plate: speed
for plate, speed in zip(number_plates, speed)
if (plate in foreign_numbers) and (speed > speed_limit)}
print("10 cars have passed Camera A, then Camera B\nSpeed limit is 20 meters per second.\n")
# Write foreign speeders to file
for plate, speed in foreign_speeders.items():
speeders_data = open("speeders.txt","w") # Opens file with name of "speeders.txt"
speeders_data.write(
"{0:>13s} is foreign and is speeding at{1:5.1f} mps, and has an excess speed of {2:3.1f} mps.".format(plate, speed, speed-speed_limit))
speeders_data = open("speeders.txt","r")
print(speeders_data.read())
speeders_data.close()
我想知道,重写所有速度变量会更简单吗,例如 speed_limit
和 elapsed
的项目和 speed
的公式转换为它们的形式,或者在代码中间转换速度?
哪种解决方案看起来更合适,我该怎么做?
你可以这样写一个函数:
def mps_to_mph(mps):
return 2.23694 * mps
然后在你的 for 循环中使用它:
speed = map(mps_to_mph, speed)
speed_limit = mps_to_mph(speed_limit)
您可以保留以米/秒为单位的计算和阈值,只为显示进行转换。
首先,您肯定需要一个可以转换单位的函数,例如mps_to_mph
正如@mirosval 建议的那样。
但是,我建议您应该在某个时候更清楚地说明单位是什么。
最简单的解决办法是把它放在变量名中:speed_mps = 78.7
、speed_mph = mps_to_mph(speed_mps)
,否则你再读一遍就看不懂你的代码了(好吧,你可能永远都不会读懂这个 再次编写代码,但至少你的老师会......并且你编写的每段代码都应该易于理解,无需额外解释)。
在更复杂的应用程序中,有许多这样的计算,您可能希望有一个 class 可以记住单位并知道如何转换值,这样您就可以执行以下操作:
speed = Speed(78.8, 'm/s')
if speed > Speed(60, 'mph'):
# something
我的任务是创建一个程序来检测外国和超速的车牌。为此,必须创建路段、经过的时间等。代码的问题不在于速度有多不切实际,而是我最近从我的老师那里发现速度应该是 英里每小时 ,而不是 米每秒。
import re
# DATA
distance = 0.06 # Distance between the Camera A and B; 0.06 = 600 metres
speed_limit = 20 # (meters per second)
number_plates = ["DV61 GGB", #UK
"D31 EG 2A", #F
"5314 10A02", #F
"24TEG 5063", #F
"TR09 TRE", #UK
"524 WAL 75", #F
"TR44 VCZ", #UK
"FR52 SWD", #UK
"100 GBS 12", #F
"HG55 BPO" #UK
]
enter = [7.12,7.17,7.22,7.12,7.23,7.41,7.18,7.25,7.11,7.38]
leave = [7.56,7.39,7.49,7.56,7.45,7.57,7.22,7.31,7.59,7.47]
# Find the non-UK plates
pattern = "(?![A-Z]{2}\d{2}\s+[A-Z]{3}$)"
foreign_numbers = list(filter(lambda x: re.match(pattern, x), number_plates))
# Calculations for speed
elapsed = [(l - e)/100 for l, e in zip(leave, enter)]
speed = [distance/t for t in converted_elapsed]
# Dictionary for foreign speeders + 2 conditions
foreign_speeders = {plate: speed
for plate, speed in zip(number_plates, speed)
if (plate in foreign_numbers) and (speed > speed_limit)}
print("10 cars have passed Camera A, then Camera B\nSpeed limit is 20 meters per second.\n")
# Write foreign speeders to file
for plate, speed in foreign_speeders.items():
speeders_data = open("speeders.txt","w") # Opens file with name of "speeders.txt"
speeders_data.write(
"{0:>13s} is foreign and is speeding at{1:5.1f} mps, and has an excess speed of {2:3.1f} mps.".format(plate, speed, speed-speed_limit))
speeders_data = open("speeders.txt","r")
print(speeders_data.read())
speeders_data.close()
我想知道,重写所有速度变量会更简单吗,例如 speed_limit
和 elapsed
的项目和 speed
的公式转换为它们的形式,或者在代码中间转换速度?
哪种解决方案看起来更合适,我该怎么做?
你可以这样写一个函数:
def mps_to_mph(mps):
return 2.23694 * mps
然后在你的 for 循环中使用它:
speed = map(mps_to_mph, speed)
speed_limit = mps_to_mph(speed_limit)
您可以保留以米/秒为单位的计算和阈值,只为显示进行转换。
首先,您肯定需要一个可以转换单位的函数,例如mps_to_mph
正如@mirosval 建议的那样。
但是,我建议您应该在某个时候更清楚地说明单位是什么。
最简单的解决办法是把它放在变量名中:speed_mps = 78.7
、speed_mph = mps_to_mph(speed_mps)
,否则你再读一遍就看不懂你的代码了(好吧,你可能永远都不会读懂这个 再次编写代码,但至少你的老师会......并且你编写的每段代码都应该易于理解,无需额外解释)。
在更复杂的应用程序中,有许多这样的计算,您可能希望有一个 class 可以记住单位并知道如何转换值,这样您就可以执行以下操作:
speed = Speed(78.8, 'm/s')
if speed > Speed(60, 'mph'):
# something