2015-12-02 2 views
0

Я пытаюсь написать код, который будет вычислять скорость автомобилей с разными номерами, правильный формат и неверный. Программа будет печатать скоростные автомобили с неправильным форматом в отдельном текстовом файле. Это ошибка, я только что получил, и я понятия не имею о том, как решить эту проблему:Целочисленная ошибка в коде

import re 
distance = 200 
speedlimit = 50 
nonstandardReg = open("text.txt ","w") 

userinput = input("Choose a car number 1 to 5") 
if userinput ==('1')or(' 1')or('car1')or(' car1'): 
car1 = "AD 12DER, 12:36:01, 12:36:40" 
elif userinput ==('2')or(' 2')or('car2')or(' car2'): 
car2 = "DE 61FE1, 02:47:01, 02:47:30" 
elif userinput == ('3')or(' 3')or('car3')or(' car3'): 
car3 = "AF 012GL, 04:08:32, 07:32:28" 
elif userinput == ('4')or(' 4')or('car4')or(' car4'): 
car4 = "TG 043WE, 08:45:23, 12:14:56" 
elif userinput == ('5')or(' 5')or('car5')or(' car5'): 
car5 = "TL 12AWY" 
else: 
print("Invalid Car") 
car1Time1 =int(car1[16:18]) 
car1Time2 =int(car1[26:28]) 
car1TimeEnd = car1Time2-car1Time1 
car1Speed = distance/car1TimeEnd 

car2Time1 =int(car2[16:18]) 
car2Time2 =int(car2[26:28]) 
car2TimeEnd = car2Time2-car2Time1 
car2Speed = distance/car2TimeEnd 

car3Time1 =int(car3[16:18]) 
car3Time2 =int(car3[26:28]) 
car3TimeEnd = car3Time2-car3Time1 
car3Speed = distance/car3TimeEnd 

car4Time1 =int(car4[16:18]) 
car4Time2 =int(car4[26:28]) 
car4TimeEnd = car4Time2-car4Time1 
car4Speed = distance/car4TimeEnd 

car5Time1 =int(car5[16:18]) 
car5Time2 =int(car5[26:28]) 
car5TimeEnd = car5Time2-car5Time1 
car5Speed = distance/car5TimeEnd 

Это ошибка, я получаю:

car2Time1 =(int(car2[16:18])) 
ValueError: invalid literal for int() with base 10: '' 
+0

Почему бы вам не использовать петлю? Вы повторяете слишком много вещей. –

+0

Использует ли это только автомобиль 2 или все автомобили? –

+0

, если пользовательский ввод 1, тогда автомобиль2 через автомобиль5 не будет существовать. Я бы ожидал ошибку «car2 not defined». – Ryan

ответ

0

Из ваших комментариев, это звучит, как вы не что вы хотите, чтобы программа выполняла. Вполне возможно, что вы ищете что-то вроде этого:

if userinput ==('1')or userinput ==(' 1')or userinput ==('car1')or userinput ==(' car1'): 
car = "AD 12DER, 12:36:01, 12:36:40" 
elif userinput ==('2')or userinput ==(' 2')or userinput ==('car2')or userinput ==(' car2'): 
car = "DE 61FE1, 02:47:01, 02:47:30" 
elif userinput == ('3')or userinput ==(' 3')or userinput ==('car3')or userinput ==(' car3'): 
car = "AF 012GL, 04:08:32, 07:32:28" 
elif userinput == ('4')or userinput ==(' 4')or userinput ==('car4')or userinput ==(' car4'): 
car = "TG 043WE, 08:45:23, 12:14:56" 
elif userinput == ('5')or userinput ==(' 5')or userinput ==('car5')or userinput ==(' car5'): 
car = "TL 12AWY" 
else: 
print("Invalid Car") 
carTime1 =int(car[16:18]) 
carTime2 =int(car[26:28]) 
carTimeEnd = carTime2-carTime1 
carSpeed = distance/carTimeEnd 

Теперь, если они пытаются использовать car5, вы будете иметь проблемы, потому что вы укоротить, что один, чтобы не включать информацию о синхронизации.

+0

Спасибо Райан: D – Kuboos

+0

@Kuboos Каков ваш план по устранению проблемы с 5-м автомобилем ?? –

+0

Я дам ему время, в которое он прошел первый датчик, а затем время, в которое он прошел последний датчик – Kuboos

0

В вашем коде есть несколько вопросов. Во-первых, это условие

if userinput ==('1')or(' 1')or('car1')or(' car1'): 

всегда будут оценены в True. Вы должны использовать

if userinput ==('1') or userinput==(' 1') or userinput==('car1') or userinput == (' car1'): 

вместо этого. И так далее с заявлениями elif. Тогда вам нужен только один car переменную:

if userinput ==('1') or userinput==(' 1') or userinput==('car1') or userinput == (' car1'): 
car = "AD 12DER, 12:36:01, 12:36:40" 
... 
elif userinput ==('5') or userinput==(' 5') or userinput==('car5') or userinput == (' car5'): 
car = "TL 12AWY" 
else: 
print("Invalid Car") 
carTime1 =int(car[16:18]) 
carTime2 =int(car[26:28]) 
carTimeEnd = carTime2-carTime1 
carSpeed = distance/carTimeEnd 

И вы должны правильно инициализации переменной для car car5.

+0

, если r e.match ("[AZ] [AZ] [0-9] [0-9] [AZ] [AZ] [AZ]"): ТипError: match() отсутствует 1 обязательный позиционный аргумент: 'string' помогите мне с этой проблемой, я пытаюсь получить код, чтобы узнать, является ли автомобиль reg в правильном формате, и если это я хочу, чтобы он ничего не печатал и если он в неправильном формате, я хочу, чтобы код печатал, что автомобиль ускорял + его рег в отдельном текстовом файле, который называется нестандартным регистром – Kuboos

+0

@Kuboos 're.match' [требует] (https://docs.python.org/2/library/re.html#re.match) два аргумента - шаблон и строка. И вы пытаетесь использовать его только с шаблоном arg. – kvorobiev

+0

как бы я это сделал? – Kuboos

0

Я не совсем уверен, полезен ли этот код для вас, но вы должны переконфигурировать свой код, если очень сложно найти ошибки.

car_dict={ 

'car1': "AD 12DER, 12:36:01, 12:36:40", 
'car2': "DE 61FE1, 02:47:01, 02:47:30", 
'car3': "AF 012GL, 04:08:32, 07:32:28", 
'car4': "TG 043WE, 08:45:23, 12:14:56", 
'car5': "TL 12AWY" 
} 

def speed_calculator(st, distance =200): 
    start_time= int(st[16:18]) 
    end_time= int(st[26:28]) 
    time_in_between = end_time - start_time 
    return distance/time_in_between 

userinput = raw_input("Choose a car number 1 to 5").strip() 


for key in car_dict: 
    if userinput in key: 
     print speed_calculator(car_dict[key]) 
+0

вы также можете добавить немного, где он ничего не печатает, если номерная табличка находится в формате буквенного письма с номером буквой буквенного письма, и если он не печатает автомобиль + его рег и говорит, что он ускоряется в отдельном текстовом файле, называемом нестандартный reg – Kuboos

+0

ваш код имеет синтаксическую ошибку в калькуляторе скорости – Kuboos

+0

Успешно работает на моей машине, возможно, вы используете python3.x, а ошибка связана с 'raw_input'. –

Смежные вопросы