Python条件判断逻辑异常:车库系统中==不生效而!=正常
核心原因:车牌大小写不一致
你的is_plate函数会将用户输入的车牌转为大写后返回(p = input(prompt).upper()),但如果account_list中存储的Car实例的reg_nr是小写或混合大小写,那么license_plate == car.reg_nr会因为大小写不相等而返回False,循环内的修改逻辑根本不会执行,程序自然直接退出。
而当你改成license_plate != car.reg_nr时,只要account_list里有数据,就会进入循环执行后续代码——这并不是因为!=本身正确,而是它绕过了大小写不匹配的问题。
其他代码问题(影响后续功能执行)
除了大小写问题,你的代码还有几处错误需要修正:
changing_info方法缩进错误
这个方法被定义在Garage类外面了,它应该是类的成员方法,需要缩进到Garage类内部:class Garage: def __init__(self): self.parking_log_list = [] self.account_list = [] # 缩进后作为Garage的成员方法 def changing_info(self,license_plate): for car in self.account_list: # ... 后续代码edit_choice类型不匹配
你把用户输入转成了int类型(edit_choice = int(input(...))),但后面判断时却和字符串"1"、"2"、"3"比较,int和字符串永远不相等,导致修改逻辑无法触发。应该改成和整数比较:edit_choice = int(input("Choose what you like to change:\n1.License Plate\n2.Name\n3.Car Type\n")) if edit_choice == 1: # 使用整数1而非字符串"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.car_type = eh.is_alpha("State your new car type: ") # 修正属性名属性名错误
修改车辆类型时,你写的是car.type,但Car类定义的属性是car_type,应该改成car.car_type,否则会给Car实例新增一个无关的type属性,而非修改原本的车辆类型。正则表达式优化
既然已经将输入转为大写,正则可以简化为r'^[A-Z]{3}\d{3}$',加上^表示从字符串开头匹配,和结尾的$配合,确保整个字符串严格符合3大写字母+3数字的格式,避免出现前后多余字符的情况:format_plate = re.compile(r'^[A-Z]{3}\d{3}$')
验证解决方案
- 确保
account_list中存储的Car实例的reg_nr是大写,或者在创建Car实例时就统一转为大写:# 创建Car实例时统一转大写 car = Car("John Doe", "Sedan", "abc123".upper()) garage.account_list.append(car) - 修正上述所有代码错误后,再使用
license_plate == car.reg_nr的判断逻辑,就能正常进入修改流程。
内容的提问来源于stack exchange,提问作者Kevin Lam

