Я пытаюсь написать сценарий приоритета таргетинга для ИИ. Моя цель - ранжировать цели на основе их оценки damage_per_shot/rate_of_fire
и переупорядочить список в соответствии с самым высоким приоритетом таргетинга. Я, наконец, ошибся, но не знаю, как работать. 'NoneType' object has no attribute 'get'
словарь переупорядочения python на основе комбинации значений
Я очень новичок в Python и создал это в основном с помощью Googling, которые я использовал бы в Ruby. Я также был бы благодарен за предложения о том, как это сделать в правильном стиле «Python», если я совершу какие-либо серьезные ошибки.
enemyList=[{"id":1,"damage_per_shot":10,"rate_of_fire":2},{"id":3,"damage_per_shot":0,"rate_of_fire":0},{"id":2,"damage_per_shot":14,"rate_of_fire":2}]
#enemyList=unit_client.ask_nearest_enemy()
print(enemyList)
aDict = {}
for item in enemyList:
if(item["rate_of_fire"]!=0):
currScore=float(item["damage_per_shot"]/item["rate_of_fire"])
aDict[item['id']] = currScore
def focus_fire2(data=None, *args, **kawargs):
print("===ff2===")
target_id=sorted(aDict, key=data.get)
print(target_id)
print("attacking: "+str(id))
#unit_client.do_attack(key)
##remove item from list
if(len(aDict)>0):
del aDict[target_id] #remove the object from the dict after done
print(aDict)
focus_fire2()
else:
return 0
#unit_client.when_item_destroyed(target, aDict.pop(key,None))
#unit_client.when_item_destroyed(target, focus_fire2)
focus_fire2()
отслеживающий выглядит
[{'damage_per_shot': 10, 'id': 1, 'rate_of_fire': 2}, {'damage_per_shot': 0, 'id
': 3, 'rate_of_fire': 0}, {'damage_per_shot': 14, 'id': 2, 'rate_of_fire': 2}]
===ff2===
Traceback (most recent call last):
File "ffire.py", line 26, in <module>
focus_fire2()
File "ffire.py", line 13, in focus_fire2
target_id=sorted(aDict, key=data.get)
AttributeError: 'NoneType' object has no attribute 'get'
Можете ли вы предоставить полную ошибку/отслеживающий – Totem
Я заметил, что у вас есть «data.get» в функции focus_fire2, и в аргументах вы устанавливаете данные в None по умолчанию. Если вы специально не задали данные для чего-то вроде focus_fire2 (data = something), тогда ошибка имеет смысл ... – Totem
@Paul Rooney, спасибо за включение traceback – Rilcon42