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
问题原因
- 变量被重复初始化:每次进入
option_no==1分支时,camery_availability都会被重新赋值为3,之前的修改直接被覆盖,导致更新无效。 - 更新逻辑位置错误:
camery_availability -=1放在了car_type==1分支的外面,不管用户有没有租Camry都会执行减1操作,逻辑错误。 - 缺少循环流程:用户选择继续操作时,代码没有回到车辆列表展示环节,就算数量更新了也看不到变化。
修复后的代码
# 把车辆可用性变量放在循环外,避免每次被重置 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
相关产品推荐
相关产品推荐

