Python - Elif не работает, и он просто пропущен - PullRequest
0 голосов
/ 25 мая 2018

Это мой код для камеры ANPR, которая сканирует лицензию, номерной знак, а также проверяет, ускоряются ли они или нет, и записывает всю информацию в текстовый документ с именем output.txt.Все это работает, кроме одной части, см. Внизу.Кроме того, код ошибки для него не появляется

#Imports
import time
import random

#Gets the number plate
np=input()

#Sets the parts of the license plate
twoletters=np[0:2]
twonumbers=np[2:4]
threeletters=np[4:7]

#Sensors
sensor1=0
sensor2=random.uniform(0.25, 0.4)
sensor2=round(sensor2, 1)

#Variables
twoletterstf=False
twonumberstf=False
threeletterstf=False
valid=False
speed=0
ticketprice=0
ticket=False
distance=10

#Calculations to work out the speed
time.sleep(1)
distance=10
times=sensor2-sensor1
ans=1/times
speed=distance*ans



#If more than 7 letters and numbers
if len(np)>7 or len(np)<7:
    valid=False
    print("Invalid Nuber Plate")

#If less than 7 letters and numbers outputs number plate and speed

#If their is upper case letters and digits in correct order
elif twoletters.isupper() and twoletters.isalpha and twonumbers.isdigit() 
and threeletters.isupper() and threeletters.isalpha():
    valid=True
    twoletterstf=True
    twonumberstf=True
    threeletterstf=True


#If isn't upper case or their isn't 2 numbers or if their isnt't three letters, then outputs the number plate with speed
elif twoletterstf==False or twonumberstf==False or threeletterstf==False:
    print("Invalid Number Plate")
    valid=False

elif speed > 31:
    ticket=True
    ticketprice=100+speed

elif speed < 31:
    ticket=False
    ticketprice=0

else:
    exit



f=open("Output.txt", "a")
f.write("Number Plate:" + str(np) + "\n")
f.write("Valid:" + str(valid) + "\n")
f.write("Speed:" + str(speed) + "M/S" + "\n")
f.write("Ticket:" + str(ticket) + "\n")
f.write("Ticket Price: £" + str(ticketprice) + "\n")
f.write("\n")
f.close()

Это проблема, элифы на самом деле не работают, и поэтому действует так, как будто их там не было.И когда он записывает код в текстовом документе, он всегда выглядит как ложный и никогда не верный, если он на самом деле ускоряется. Так что, если кто-то может помочь, это будет реальная помощь

elif speed > 31:
    ticket=True
    ticketprice=100+speed

elif speed < 31:
    ticket=False
    ticketprice=0

1 Ответ

0 голосов
/ 25 мая 2018
#Imports
import time
import random

#If more than 7 letters and numbers
def CheckPlate(np):
    IsPlateValid = False
    if len(np) != 7:
        print("Invalid Plate Number!")
    else:
        IsPlateValid = True
    return IsPlateValid

#If less than 7 letters and numbers outputs number plate and speed

def CheckPlateContent(twoletters, twonumbers, threeletters):
    twoletterstf=False
    twonumberstf=False
    threeletterstf=False
    valid = False
    for letter in twoletters: #I have to use (for x in Xs) because of array input but your format should work fine here  if input is user input
        if letter.isupper() and letter.isalpha():
            twoletterstf = True
    for number in twonumbers:
        if number.isdigit():
            twonumberstf = True
    for letter in threeletters:
        if letter.isupper() and letter.isalpha():
            threeletterstf = True
    if (twoletterstf == True and twonumberstf == True and threeletterstf == True):
        valid= True
    else:
        print("Invalid Plate Number!")
    return valid

def SpeedCheck(speed):
    ticket = False
    ticketprice = 0
    if speed >= 31:
        ticket=True
        ticketprice=100+speed
    return ticket, ticketprice

def main():
    #Gets the number plate
    np=['A','C','4','2','F','G','H'] #input is an array because I id this on Atom and there is no input console.

    #Sets the parts of the license plate
    twoletters=np[0:2]
    twonumbers=np[2:4]
    threeletters=np[4:7]

    #Sensors
    sensor1=0
    sensor2=random.uniform(0.25, 0.4)
    sensor2=round(sensor2, 1)

    #Variables
    speed=0
    ticketprice=0
    ticket=False
    distance=10

    #Calculations to work out the speed
    time.sleep(1)
    distance=10
    times=sensor2-sensor1
    ans=1/times
    speed=distance*ans

    bool = CheckPlate(np)
    valid = CheckPlateContent(twoletters, twonumbers, threeletters)
    ticket, ticketprice = SpeedCheck(speed)

    print ("Number Plate:" + str(np) + "\n")
    print ("Valid:" + str(valid) + "\n")
    print ("Speed:" + str(speed) + "M/S" + "\n")
    print ("Ticket:" + str(ticket) + "\n")
    print ("Ticket Price: £" + str(ticketprice) + "\n")


if __name__ == "__main__":
    main()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...