问题描述
此代码出现错误:
def SellFor(Price,Vehicle):
WheelsCost=(Vehicles[Vehicle][Wheels]*200)
TotalPrice=WheelsCost
if Price > (TotalPrice+1000):
return False
else:
return True
while True:
try:
Price=int(input("Input Price to sell: "))
except:
print("\n Invalid Input. \n")
else:break
if SellFor(Price,VehicleToSell):
Money+=Price
del Vehicles[VehicleToSell]
print()
print("Vehicle Sold. \n")
break
else:
print("Price too large.")
我正在制作一个车辆构造游戏,这只是销售车辆时脚本的一部分。
在分配WheelsCost
变量时,您会注意到我给了它一个带有两个索引的另一个变量的值,并且该变量是一个字典,并且有了索引,我从主字典中访问对象/字典,然后在该次要对象中,我正在访问键值。
当函数在函数中的代码行WheelsCost=(Vehicles[Vehicle][Wheels]*200)
中运行时出现错误,错误提示为KeyError: 4
,在制造车辆时,我给了它4个轮子(所以它将是汽车),因此我假设4
中KeyError
的来源。
,因此我的目标是将轮子的数量乘以200,所以我以代码中所示的方式进行操作,因为那是从对象中检索值的方式,似乎引发了错误,因此我编辑了该行代码,并将其直接转换为整数,因为我认为计算机正被键和值所混淆,所以我将其更改为:WheelsCost=(int(Vehicles[Vehicle][Wheels])*200)
,但仍然提出了同样的错误,所以在这一点上我很困,我想不起其他事情了,请不要太苛刻,我知道它的简单目标只是将两个数字相乘,但是我真的不知道该怎么做。
Wheels
不是局部变量,所以我不能直接访问它,我必须引用整个字典,也要使用{循环}而不是print(Vehicles[Vehicle])
来整洁地打印出来:
Type : ground
Colour : red
Wheels : 4
TopSpeed : 120
Acceleration : 70
Seats : 5
Engines : 1
Electric : False
PlateNumber : 123456
所有给定的值均由用户提供,未经过硬编码。
解决方法
Wheels
是字典键,它是一个字符串。您需要引用它。
WheelsCost Vehicles[Vehicle]['Wheels'] * 200
不带引号的情况下,将其视为变量,并且全局变量的值显然为4
。因此,它正在尝试查找不存在的字典键4
。