Примечание: я новичок в Python.для цикла и если в словаре
У меня есть задача разработать программу, которая будет выводить иностранных номерных знаков из списка из 10 номерных знаков (смесь британских и зарубежных), но только если они ускоряются. Я сделал несколько ошибок на этом пути, и я не знаю, как я могу решить эти проблемы. #UK и #F - это всего лишь мои заметки для меня, чтобы иметь возможность быстро взглянуть на то, что это британская номерная табличка и которая является иностранной.
import re
distance=750 #variable for the distance between the Camera A and B (in m)
speedlimit=60 # (mps)
NumberPlates=["DV61 GGB",#UK
"D3S11 EUBG 20",#F
"5T314 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.20,7.45,7.23,7.33,7.18,7.25,7.33,7.38]
#A list for the times of cars passing Camera A
Leave=[7.56,7.24,7.48,7.52,7.45,7.57,7.22,7.31,7.37,7.47]
#A list for the times of cars passing Camera B
Timestaken=[]
Timestaken2=[]
Timestaken3={}
for enter_data, leave_data in zip(Enter, Leave):
Timestaken.append(leave_data-enter_data)
Timestaken=["%.2f" % (leave_data-enter_data) for enter_data, leave_data in zip(Enter, Leave)]
Timestaken2=[s.strip("0") for s in Timestaken]
Timestaken2=[s.strip('.') for s in Timestaken2]
for key,value in zip(NumberPlates,Timestaken2):
Timestaken3[key]=value
print(Timestaken3)
for item in NumberPlates:
UK_Numbers=list(filter(lambda x: re.match("[A-Z]{2}\d{2}\s+[A-Z]{3}$",x),NumberPlates))
for item in UK_Numbers:
if item in UK_Numbers:
NumberPlates.remove(item)
print(NumberPlates) #These are foreign number plates only.
Timestaken4={}
for key,value in zip(NumberPlates,Timestaken2):
Timestaken4[key]=value
print(Timestaken4) #NumberPlate:Time
print("10 cars have passed Camera A, then Camera B\n")
for key,value in Timestaken4.items():
speed=distance/int(value)
if speed>speedlimit:
print(key,"is speeding with",distance/int(value),"mps")
я получаю этот выход:
>>>
{'5T314 10A02': '28', '100 GBS 12': '04', '524 WAL 75': '24', 'D3S11 EUBG 20': '07', '24TEG 5063': '07', 'HG55 BPO': '09', 'TR44 VCZ': '04', 'TR09 TRE': '22', 'DV61 GGB': '44', 'FR52 SWD': '06'}
['D3S11 EUBG 20', '5T314 10A02', '24TEG 5063', '524 WAL 75', '100 GBS 12']
{'5T314 10A02': '07', '100 GBS 12': '22', '524 WAL 75': '07', '24TEG 5063': '28', 'D3S11 EUBG 20': '44'}
10 cars have passed Camera A, then Camera B
5T314 10A02 is speeding with 107.14285714285714 mps
524 WAL 75 is speeding with 107.14285714285714 mps
предполагалось Две последние строки были иметь разные скорости. Я понимаю, что скорости, возникающие в результате ввода &, остаются бесчеловечными, но это не проблема.
Третья выходная линия показала, что времена были назначены на разные номерные знаки. Я ищу способ исправить это.
Последние две выходные линии должны сделать с:
for key,value in Timestaken4.items():
speed=distance/int(value)
if speed>speedlimit:
print(key,"is speeding with",distance/int(value),"mps")
Помимо раз назначаются на разные номерные знаки, как я могу изменить код так, что он отображает правильную скорость?
Я попытался работать с милями в час, но для меня это не сработало. Я преобразовал все значения так, чтобы они соответствовали метрам в секунду, но есть ли способ округлить прошедшее время? После 'elapsed = [l - e для l, e в zip (leave, enter)]', я получил результаты, такие как «D3S11 EUBG 20» ускорялся со скоростью 2727.3 м/с, где результат должен был быть «27.2727» и т. Д. Извините, если это проблема, я все еще выясняю ваш код. –
Вместо 'l-e' put' (l-e)/100' в этом понимании списка. Может быть, 'distance' находится в cm? Или время минут ... – kwinkunks
Я понял, но '(l-e)/100' был полезен. Наконец, не могли бы вы объяснить мне, что «(» {0:> 14s} ускорялось при {1: 8.1f} м/с? .format (plate, speed)) 'делает? Это первый раз, когда я сталкиваюсь с таким методом, и часть моей задачи - также объяснить каждую часть кода. Надеюсь, вы понимаете. Заранее спасибо! –