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

Python租车系统代码问题:可用车辆数无法更新,求修复方法

问题:租赁车辆后可用数量未更新

我编写了一段用于根据租赁操作更新可用车辆数量的代码,例如初始有3辆可用Camry,用户租出1辆后应显示2辆,但运行代码时可用车辆数始终未发生变化。

原代码

if option_no==1:
    print("Select one of the available cars: ")
    print("--------------------------------------------------------------------------------------------------------------")
    print("Model \t\tAvailable \tPrice/day \tLiability insurance/day \tComprehensive insurance/day")
    print("--------------------------------------------------------------------------------------------------------------")
        
    camery_price = 90
    camery_availability = 3
    camery_liability_insurance = 20
    camery_comprhensive_insurance = 50
    print("1. Camery  \t\t\b\b\b\b",camery_availability, "\t\t\t\b\b\b\b\bQR90 \t\tQR20 \t\t\t\t\t\b\b\b\bQR50")

    pajero_price = 150
    pajero_liability_insurance = 30
    pajero_comprhensive_insurance = 70
    print("2. Pajero \t\t\b\b\b\b2 \t\t\t\b\b\b\b\bQR150 \t\tQR30  \t\t\t\t\t\b\b\b\bQR70")

    altima = 70
    altima_liability_insurance = 20
    altima_comprhensive_insurance = 50
    print("3. Altima \t\t\b\b\b\b2 \t\t\t\b\b\b\b\bQR70 \t\tQR20  \t\t\t\t\t\b\b\b\bQR50")

    car_type = int(input("Enter car type: "))
    No_of_days = int(input("Enter how many days: "))
    insurance_type = input("Enter 'L' for Liability insurance and 'F' for full insurance: ")
    if car_type==1:
        if insurance_type=='L' or insurance_type=='l':
            cost = No_of_days*camery_price
            insurance_cost = No_of_days*camery_liability_insurance
            tax = cost*0.05
            total = cost+insurance_cost+tax
            print("Cost: QR", format(cost, '.2f'))
            print("Insurance: QR", format(insurance_cost, '.2f'))
            print("Tax: QR", format(tax, '.2f'))
            print("--------------------------------")
            print("Total: ", format(total, '.2f'))
        elif insurance_type=='F' or insurance_type=='f':
            cost = No_of_days*camery_price
            insurance_cost = No_of_days*camery_comprhensive_insurance
            tax = cost*0.05
            total = cost+insurance_cost+tax
            print("Cost: QR", format(cost, '.2f'))
            print("Insurance: QR", format(insurance_cost, '.2f'))
            print("Tax: QR", format(tax, '.2f'))
            print("--------------------------------")
            print("Total: ", format(total, '.2f'))
        else:
            print("Error. Please enter the correct character")
        operation = input("More operation? [Y/N] ")
        if operation=='N' or operation=='n':
            break
    camery_availability = camery_availability - 1 

问题原因

  1. 变量被重复初始化:每次进入option_no==1分支时,camery_availability都会被重新赋值为3,之前的修改直接被覆盖,导致更新无效。
  2. 更新逻辑位置错误:camery_availability -=1放在了car_type==1分支的外面,不管用户有没有租Camry都会执行减1操作,逻辑错误。
  3. 缺少循环流程:用户选择继续操作时,代码没有回到车辆列表展示环节,就算数量更新了也看不到变化。

修复后的代码

# 把车辆可用性变量放在循环外,避免每次被重置
camery_availability = 3
pajero_availability = 2
altima_availability = 2

# 用循环包裹操作流程,支持重复操作
while True:
    if option_no == 1:
        print("Select one of the available cars: ")
        print("--------------------------------------------------------------------------------------------------------------")
        print("Model \t\tAvailable \tPrice/day \tLiability insurance/day \tComprehensive insurance/day")
        print("--------------------------------------------------------------------------------------------------------------")
            
        camery_price = 90
        camery_liability_insurance = 20
        camery_comprhensive_insurance = 50
        print(f"1. Camery  \t\t{camery_availability} \t\t\tQR90 \t\tQR20 \t\t\t\t\tQR50")

        pajero_price = 150
        pajero_liability_insurance = 30
        pajero_comprhensive_insurance = 70
        print(f"2. Pajero \t\t{pajero_availability} \t\t\tQR150 \t\tQR30  \t\t\t\t\tQR70")

        altima_price = 70
        altima_liability_insurance = 20
        altima_comprhensive_insurance = 50
        print(f"3. Altima \t\t{altima_availability} \t\t\tQR70 \t\tQR20  \t\t\t\t\tQR50")

        car_type = int(input("Enter car type: "))
        No_of_days = int(input("Enter how many days: "))
        insurance_type = input("Enter 'L' for Liability insurance and 'F' for full insurance: ")
        
        # 标记是否成功租赁
        rented = False
        if car_type == 1:
            if insurance_type in ['L', 'l']:
                cost = No_of_days * camery_price
                insurance_cost = No_of_days * camery_liability_insurance
                tax = cost * 0.05
                total = cost + insurance_cost + tax
                print("Cost: QR", format(cost, '.2f'))
                print("Insurance: QR", format(insurance_cost, '.2f'))
                print("Tax: QR", format(tax, '.2f'))
                print("--------------------------------")
                print("Total: ", format(total, '.2f'))
                rented = True
            elif insurance_type in ['F', 'f']:
                cost = No_of_days * camery_price
                insurance_cost = No_of_days * camery_comprhensive_insurance
                tax = cost * 0.05
                total = cost + insurance_cost + tax
                print("Cost: QR", format(cost, '.2f'))
                print("Insurance: QR", format(insurance_cost, '.2f'))
                print("Tax: QR", format(tax, '.2f'))
                print("--------------------------------")
                print("Total: ", format(total, '.2f'))
                rented = True
            else:
                print("Error. Please enter the correct character")
            
            # 只有成功租赁后才减少可用数量
            if rented:
                camery_availability -= 1
            
            operation = input("More operation? [Y/N] ")
            if operation in ['N', 'n']:
                break
        # 可以在这里补充其他车型的租赁逻辑和数量更新
    else:
        # 处理其他option的逻辑
        break

修复说明

  • 将车辆可用性变量移到循环外部,确保每次操作都基于最新的数量计算。
  • 仅在用户成功租赁Camry(且保险类型输入正确)后,才执行camery_availability -=1操作,逻辑更严谨。
  • 用while True循环包裹整个操作流程,用户选择继续操作时会重新展示更新后的车辆列表。
  • 用f-string替换原有的退格符\b,让输出格式更简洁易维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 13:56:38