【问题标题】:How do I access a value in an object filled dictionary?如何访问对象填充字典中的值?
【发布时间】:2021-11-09 14:51:24
【问题描述】:

这里是代码有问题的部分:

import numpy as np

class Player():
  def __init__(self, health, maxHealth, baseDmg, dmg, name, weapons, items, isAlive, previousRoom, room):
    self.health = health
    self.maxHealth = maxHealth
    self.baseDmg = baseDmg
    self.dmg = dmg
    self.name = name
    self.weapons = weapons
    self.items = items
    self.isAlive = isAlive
    self.previousRoom = previousRoom
    self.coords = (0, 0)

  def Move(self, direction):
    if direction not in self.room.exits:
      print("Cannot Move In That Direction!")
      return
    newRoomName = self.room.exits[direction]
    self.previousRoom = self.room.name
    print("Moving to", newRoomName)
    world[newRoomName] = newRoomName
    self.room = world[newRoomName]

class Room():
  def __init__(self, name, description, exits, hasWeapon, weapon, hasItem, item, hasEnemy, enemy, isFirstVisit, coords):
    self.name = name
    self.description = description
    self.exits = exits
    self.hasWeapon = hasWeapon
    self.weapon = weapon
    self.hasItem = hasItem
    self.item = item
    self.hasEnemy = hasEnemy
    self.enemy = enemy
    self.isFirstVisit = isFirstVisit
    self.coords = coords

world = {}
rooms = np.empty((11,11), object)

rooms[5][5] = Room(
  "room1",
  "",
  {"E": "room2"},
  False,
  None,
  False,
  None,
  False,
  None,
  True,
  (5, 5)
)
rooms[5][6] = Room(
  "room2",
  "",
  {"W": "room1"},
  False,
  None,
  False,
  None,
  False,
  None,
  True,
  (5, 5)
)

counter = 1

world["room1"] = rooms[3][3]
world["room2"] = rooms[3][4]

player = Player(10, 10, 5, 5, "Jedidiah", [], [], True, world["room1"].coords, world["room1"].coords)

我想要做的是使用 2d 数组和字典(根据项目要求)在 python 中创建一个移动系统,但它一直给我一个错误,说“str object has no attribute 'coords'”:

Traceback (most recent call last):
  File "main.py", line 75, in <module>
    player = Player(10, 10, 5, 5, "Ethan", [], [], True, world["room1"].coords, world["room1"].coords)
AttributeError: 'NoneType' object has no attribute 'coords'

我不知道为什么会这样,但我确信这是一个简单的解决方案。我是编程新手,所以请让答案尽可能简单。感谢所有帮助。

【问题讨论】:

  • np.empty 创建一个空数组,world["room1"] 设置为索引 rooms[3][3] 处的数组。由于它是空的,因此您不能在其上使用 .coords。您的意思是让 world["room1"] 和 world["room2"] 成为您之前制作的房间吗?它们设置在不同的指标上。
  • 你需要world["room1"] = rooms[5][5]world["room2"] = rooms[5][6]
  • 天哪,我真是个白痴。太感谢了。我现在真的很笨

标签: python python-3.x numpy object


【解决方案1】:

np.empty with object dtype 用None 元素创建一个数组:

In [184]: rooms = np.empty((2,2), object)
In [185]: rooms
Out[185]: 
array([[None, None],
       [None, None]], dtype=object)

我看到你有一组 rooms [5,5] 和 [5,6] 到 Room 对象的元素,并将其他几个元素分配给 world dict (3, 3) (3,4)。这些元素仍然是None

看起来所有那些“未设置”的坐标都给你带来了问题。要么对索引更加小心,要么添加一些保护措施来正确处理None 元素。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多