python 有条件的说不通

dwbf0jvd  于 2022-12-25  发布在  Python
关注(0)|答案(1)|浏览(233)

我有一个错误处理模块,这里是一个错误处理车牌:

def is_plate(prompt=""):
    format_plate = re.compile(r'[A-Za-z]{3}\d{3}$')
    while True:
        p = input(prompt).upper()
        if format_plate.match(p):
            return p
        else:
            print("Invalid license plate, try again. Your license plate needs to be in this format:(abc123)")

我导入了那个模块,并在我的程序中的一个方法中实现它。下面是我的程序的一个片段:

import error_handle as eh
class Car:
    def __init__(self,name,car_type,reg_nr):
        self.owner = name
        self.car_type = car_type
        self.reg_nr = reg_nr

    def __str__(self):
        return f'{self.owner},{self.car_type},{self.reg_nr}'
class Garage:
    def __init__(self):
        self.parking_log_list = []
        self.account_list = []

def changing_info(self,license_plate):
    for car in self.account_list:
        if license_plate == car.reg_nr:
            edit_choice = int(input("Choose what you like to change:\n1.License Plate\n2.Name\n3.Car Type\n"))
            if edit_choice == "1":
                car.reg_nr = eh.is_plate("State your new license plate: ")
            if edit_choice == "2":
                car.owner = input("State your Full name: ")
            if edit_choice == "3":
                car.type = eh.is_alpha("State your new car type: ")
garage = Garage()
license_plate = eh.is_plate("State your license plate: ")
garage.changing_info(license_plate)

当我运行这个程序时,这是下面的输出:
一个二个一个一个
它不会执行下一行代码
当我把条件语句改为:

if license_plate != car.reg_nr:

它继续执行下一行
我不明白为什么它和!=运算符一起工作,它不应该是==运算符吗?或者是我的错误处理模块上的函数有问题吗?

gzszwxb4

gzszwxb41#

当你有!=操作符的时候,它就运行了,因为在你的for循环中,你是通过self.account_list循环的,尽管当它循环的时候,这个列表是空的,所以它把car设置为None,因此它不会执行,有==操作符的代码,因为车牌不等于None

相关问题