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

如何在汽车租赁程序中实现库存为0时终止租赁操作?

问题描述

我开发了一款汽车租赁程序,用户租赁特定车辆时,该车辆的可用数量会递减。比如某车辆初始可用数量为2,用户租赁两次后可用数量变为0。我希望当用户尝试租赁可用数量已为0的车辆时,程序终止相关计算与操作,并打印提示“This car is not available.”。但当前程序在可用数量为0时仍会继续执行租赁操作,导致可用数量变成负数,找不到问题出在哪,以下是我的代码:

print("Please select one: \n\t\b\b\b\b\b1. Car Rental \n\t\b\b\b\b\b2. Car Return \n\t\b\b\b\b\b2. Print the totals")
option_no = int(input("Option no.: "))
operation = 'y' or 'Y'
camery_availability = 3
pajero_availability = 2
altima_availability = 2
while operation=='Y' or operation=='y':
    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("1. Camery  \t\t\b\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\b\b",pajero_availability, "\t\t\t\b\b\b\b\bQR150 \t\tQR30  \t\t\t\t\t\b\b\b\bQR70")

        altima_price = 70
        altima_liability_insurance = 20
        altima_comprhensive_insurance = 50
        print("3. Altima \t\t\b\b\b\b\b",altima_availability, "\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: ")

        #car type 1 (camery)
        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

        #car type 2 (Pajero)
        if car_type==2:
            if insurance_type=='L' or insurance_type=='l':
                cost = No_of_days*pajero_price
                insurance_cost = No_of_days*pajero_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*pajero_price
                insurance_cost = No_of_days*pajero_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
            pajero_availability = pajero_availability - 1
    
        #car type 3 (Altima)
        elif car_type==3:
            if insurance_type=='L' or insurance_type=='l':
                cost = No_of_days*altima_price
                insurance_cost = No_of_days*altima_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*altima_price
                insurance_cost = No_of_days*altima_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
            altima_availability = altima_availability - 1
问题根源

核心问题是没有在用户选择车辆后先检查可用数量,直接执行了计费计算和库存递减操作,导致车辆库存为0时仍能被租赁。此外代码还存在逻辑冗余、判断结构不严谨的问题。

修复后的代码
print("Please select one: \n\t1. Car Rental \n\t2. Car Return \n\t3. Print the totals")
option_no = int(input("Option no.: "))
operation = 'y'
camery_availability = 3
pajero_availability = 2
altima_availability = 2

while operation.lower() == 'y':
    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\tQR90 \t\tQR20 \t\t\t\tQR50")

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

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

        car_type = int(input("Enter car type: "))
        # 先检查选中车辆的可用数量
        car_available = False
        if car_type == 1:
            if camery_availability <= 0:
                print("This car is not available.")
                operation = input("More operation? [Y/N] ")
                continue
            car_available = True
        elif car_type == 2:
            if pajero_availability <= 0:
                print("This car is not available.")
                operation = input("More operation? [Y/N] ")
                continue
            car_available = True
        elif car_type == 3:
            if altima_availability <= 0:
                print("This car is not available.")
                operation = input("More operation? [Y/N] ")
                continue
            car_available = True
        else:
            print("Invalid car type.")
            operation = input("More operation? [Y/N] ")
            continue

        # 车辆可用时才继续后续流程
        No_of_days = int(input("Enter how many days: "))
        insurance_type = input("Enter 'L' for Liability insurance and 'F' for full insurance: ")

        total = 0
        cost = 0
        insurance_cost = 0
        tax = 0
        # 统一计算逻辑,减少冗余
        if car_type == 1:
            cost = No_of_days * camery_price
            if insurance_type.lower() == 'l':
                insurance_cost = No_of_days * camery_liability_insurance
            elif insurance_type.lower() == 'f':
                insurance_cost = No_of_days * camery_comprhensive_insurance
            else:
                print("Error. Please enter the correct character")
                operation = input("More operation? [Y/N] ")
                continue
        elif car_type == 2:
            cost = No_of_days * pajero_price
            if insurance_type.lower() == 'l':
                insurance_cost = No_of_days * pajero_liability_insurance
            elif insurance_type.lower() == 'f':
                insurance_cost = No_of_days * pajero_comprhensive_insurance
            else:
                print("Error. Please enter the correct character")
                operation = input("More operation? [Y/N] ")
                continue
        elif car_type == 3:
            cost = No_of_days * altima_price
            if insurance_type.lower() == 'l':
                insurance_cost = No_of_days * altima_liability_insurance
            elif insurance_type.lower() == 'f':
                insurance_cost = No_of_days * altima_comprhensive_insurance
            else:
                print("Error. Please enter the correct character")
                operation = input("More operation? [Y/N] ")
                continue

        tax = cost * 0.05
        total = cost + insurance_cost + tax
        print(f"Cost: QR {format(cost, '.2f')}")
        print(f"Insurance: QR {format(insurance_cost, '.2f')}")
        print(f"Tax: QR {format(tax, '.2f')}")
        print("--------------------------------")
        print(f"Total: QR {format(total, '.2f')}")

        # 只有成功完成租赁后才减少库存
        if car_type == 1:
            camery_availability -= 1
        elif car_type == 2:
            pajero_availability -= 1
        elif car_type == 3:
            altima_availability -= 1

        operation = input("More operation? [Y/N] ")
关键修改点
  • 在用户选择车型后立即检查库存,如果库存为0则直接提示并跳过后续计费流程
  • 将车型判断改为if-elif-else结构,避免逻辑冲突
  • 统一计费逻辑,减少代码冗余
  • 修复了operation的初始化错误,用lower()简化大小写判断
  • 移除无效退格符\b,改用f-string格式化输出,让表格更整洁
  • 只有在租赁流程正常完成后才减少车辆库存,避免错误操作导致库存异常

内容的提问来源于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 19:40:30