从字典列表值提取元素:自定义车辆管理代码报错求助
解决你的车辆信息提取问题
嘿,我瞅见你在提取车辆属性的时候踩了个小坑,咱们来把它捋顺~
问题根源
你写的carList[car[0]]是错误的逻辑:
car是你输入的完整车牌号字符串(比如"ABC 123"),car[0]只会取这个字符串的第一个字符(也就是"A"),而你的字典carList的键是完整的车牌号,所以这样肯定找不到对应的值,还会引发KeyError。- 正确的姿势是:先通过
carList[car]拿到对应车辆的属性列表,再用索引从这个列表里取具体属性,比如carList[car][0]是车型,carList[car][1]是年份,以此类推。
另外还有几个小细节要调整
- 你重复调用了两次
input()获取车牌号,这是冗余的,删掉一次就好。 - 判断车辆是否存在的条件可以更简洁:用
not (car in carList)代替(car in carList.keys()) == 0,可读性更强。 - 最后一行你用了
choice = str(input(...)),如果只是想打印车辆信息,直接用print()就够了;如果是想让用户确认操作,再保留input()也可以。
修正后的完整代码
carList = {"ABC 123": ["Mustang GT", 1969, "Black"]} # 只需要一次输入获取车牌号 car = input("What car would you like to withdraw? Write the license plate: ").upper() # 简化判断条件,循环直到输入有效或用户输入0 while not (car in carList) and car != "0": car = input("That car doesn't exist. Write a new one or press 0: ").upper() # 当用户没输入0时,打印车辆信息 if car != "0": model, year, colour = carList[car] # 用解包让代码更清爽 print(f"You wish to withdraw {car}\nModel: {model}\nYear: {year}\nColour: {colour}") # 如果需要获取用户选择,再用input: # choice = input("Confirm withdrawal? (Y/N): ").upper()
代码解释
- 用
carList[car]拿到对应车辆的属性列表,然后直接解包成model, year, colour,比用索引取值的写法更易读。 - 加了
if car != "0"的判断,避免用户输入0的时候还去尝试打印不存在的车辆信息。
这样修改后,就能正常提取并打印每个车辆属性啦~
内容的提问来源于stack exchange,提问作者Axroxx
相关产品推荐
相关产品推荐

