You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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里有数据,就会进入循环执行后续代码——这并不是因为!=本身正确,而是它绕过了大小写不匹配的问题。

其他代码问题(影响后续功能执行)

除了大小写问题,你的代码还有几处错误需要修正:

  1. 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:
                # ... 后续代码
    
  2. 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: ")  # 修正属性名
    
  3. 属性名错误
    修改车辆类型时,你写的是car.type,但Car类定义的属性是car_type,应该改成car.car_type,否则会给Car实例新增一个无关的type属性,而非修改原本的车辆类型。

  4. 正则表达式优化
    既然已经将输入转为大写,正则可以简化为r'^[A-Z]{3}\d{3}$',加上^表示从字符串开头匹配,和结尾的$配合,确保整个字符串严格符合3大写字母+3数字的格式,避免出现前后多余字符的情况:

    format_plate = re.compile(r'^[A-Z]{3}\d{3}$')
    

验证解决方案

  1. 确保account_list中存储的Car实例的reg_nr是大写,或者在创建Car实例时就统一转为大写:
    # 创建Car实例时统一转大写
    car = Car("John Doe", "Sedan", "abc123".upper())
    garage.account_list.append(car)
    
  2. 修正上述所有代码错误后,再使用license_plate == car.reg_nr的判断逻辑,就能正常进入修改流程。

内容的提问来源于stack exchange,提问作者Kevin Lam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 08:10:40